|
|
@@ -0,0 +1,111 @@ |
|
|
#!/usr/bin/env python3.6 |
|
|
# |
|
|
# Navigation with selenium on Firefox in the Valenciennes university website. |
|
|
# Copyright (C) 2017 Nicolas Mauger <[email protected]> |
|
|
# |
|
|
# This program is free software: you can redistribute it and/or modify |
|
|
# it under the terms of the GNU General Public License as |
|
|
# published by the Free Software Foundation, either version 3 of the |
|
|
# License, or (at your option) any later version. |
|
|
# |
|
|
# This program is distributed in the hope that it will be useful, |
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
|
# GNU General Public License for more details. |
|
|
# |
|
|
# You should have received a copy of the GNU General Public License |
|
|
# along with this program. If not, see <https://www.gnu.org/licenses/>. |
|
|
|
|
|
# This program require selenium, gekodriver, datetime and argparse to run. |
|
|
|
|
|
# usage: Process some authentification in univ-valecenciennes.fr |
|
|
# [-h] [-d DATE] -u USERNAME -p PASSWORD |
|
|
# |
|
|
# optional arguments: |
|
|
# -h, --help show this help message and exit |
|
|
# |
|
|
# optional named arguments: |
|
|
# -d DATE, --date DATE Specific date of edt - format YYYY-MM-DD. Default: |
|
|
# today date |
|
|
# |
|
|
# required named arguments: |
|
|
# -u USERNAME, --username USERNAME |
|
|
# Your Sesame username |
|
|
# -p PASSWORD, --password PASSWORD |
|
|
# Your Sesame password |
|
|
|
|
|
# Reminder : your are not authorized to remove the above license, whatever the reason. |
|
|
|
|
|
from selenium import webdriver |
|
|
from selenium.webdriver.common.by import By |
|
|
from selenium.webdriver.support.ui import Select |
|
|
from selenium.common.exceptions import NoSuchElementException |
|
|
|
|
|
import argparse |
|
|
import datetime |
|
|
|
|
|
# Setup the parser |
|
|
parser = argparse.ArgumentParser("Process some authentification in univ-valecenciennes.fr", add_help="True") |
|
|
|
|
|
# Define the options : |
|
|
|
|
|
# The following args are optional |
|
|
optinalNamed = parser.add_argument_group('optional named arguments') |
|
|
optinalNamed.add_argument("-d", "--date", help="Specific date of edt - format YYYY-MM-DD. Default: today date") |
|
|
|
|
|
# The following args are required: |
|
|
requiredNamed = parser.add_argument_group('required named arguments') |
|
|
requiredNamed.add_argument("-u", "--username", help="Your Sesame username", required=True) |
|
|
requiredNamed.add_argument("-p", "--password", help="Your Sesame password", required=True) |
|
|
|
|
|
args = parser.parse_args() |
|
|
|
|
|
# If the date is not set, set the current date |
|
|
if args.date: |
|
|
# Rise an exception if the dateformat is not respected |
|
|
try: |
|
|
year, month, day = map(int, args.date.split('-')) |
|
|
edt_date = datetime.date(year, month, day) |
|
|
except ValueError: |
|
|
msg = "Not a valid date: {}. Should be like : YYYY-mm-dd".format(args.date) |
|
|
raise argparse.ArgumentTypeError(msg) |
|
|
else: |
|
|
edt_date = datetime.date.today() |
|
|
|
|
|
#Define all xpaths for all DOM elements who will be use during the navigaton |
|
|
xpaths = { 'usernameTxtBox' : "//input[@name='username']", |
|
|
'passwordTxtBox' : "//input[@name='password']", |
|
|
'submitButton' : "//input[@name='submit']", |
|
|
'mesCoursButton' : "//a[@title='Mes cours']", |
|
|
'ExportButton' : "//a[@title='Export Pdf']" |
|
|
} |
|
|
|
|
|
mydriver = webdriver.Firefox() |
|
|
mydriver.get("https://cas.univ-valenciennes.fr/cas/login?service=https://portail.univ-valenciennes.fr/Login") |
|
|
mydriver.maximize_window() |
|
|
|
|
|
#Clear Username TextBox if already allowed "Remember Me" |
|
|
mydriver.find_element_by_xpath(xpaths['usernameTxtBox']).clear() |
|
|
|
|
|
#Write Username in Username TextBox |
|
|
mydriver.find_element_by_xpath(xpaths['usernameTxtBox']).send_keys(args.username) |
|
|
|
|
|
#Clear Password TextBox if already allowed "Remember Me" |
|
|
mydriver.find_element_by_xpath(xpaths['passwordTxtBox']).clear() |
|
|
|
|
|
#Write Password in password TextBox |
|
|
mydriver.find_element_by_xpath(xpaths['passwordTxtBox']).send_keys(args.password) |
|
|
|
|
|
#Click Login button |
|
|
mydriver.find_element_by_xpath(xpaths['submitButton']).click() |
|
|
|
|
|
#Go to "EDT" link |
|
|
mydriver.get('https://vtmob.univ-valenciennes.fr/esup-vtclient-up4/stylesheets/desktop/welcome.xhtml') |
|
|
|
|
|
#Go to correct date with the implemented JS fonction. |
|
|
mydriver.execute_script("document.getElementById('formCal:date').value='"+edt_date.strftime('%d/%m/%Y')+"';document.forms['formCal'].submit();") |
|
|
|
|
|
#Click Export button, who download the pdf. |
|
|
#The download action may be before page display, but the pdf |
|
|
#remains the correct one. |
|
|
mydriver.find_element_by_xpath(xpaths['ExportButton']).click() |