Tout d'abord, installation de selenium pour utilisation avec Python :
pip install selenium pip install webdriver-manager # à priori inutile, inclus dans l’installation précédente
On crée ensuite un script (ici en Python3) qui va ouvrir un driver.
Il faut ensuite relever les identifiants de la page html, par exemple des inputs du formulaire, pour définir un objet qui va y accéder pour réaliser les opérations nécessaire : saisie de texte, clic pour soumettre le formulaire ou cocher une case d'option…
from selenium import webdriver from selenium.webdriver.firefox.service import Service from webdriver_manager.firefox import GeckoDriverManager from selenium.webdriver.common.by import By # la variable est nommée `browser` on peut remplacer par `driver` qu'on retrouve généralement dans les exemples browser = webdriver.Firefox(service=Service(GeckoDriverManager().install())) # page de connexion, remplacer l'url par celle utile browser.get("http://localhost:8010/login") browser.maximize_window() # se connecter user_name = browser.find_element(By.ID, "username") psw = browser.find_element(By.ID, "password") user_name.send_keys("mon-user-name") psw.send_keys("mon-mot-2-passe") submit_button = browser.find_element(By.XPATH, value="//button[@type='submit']") # si le bouton est une input, remplacer button par input submit_button.click() # aller à la page du formulaire et le remplir browser.get("http://localhost:8010/sample/new") sample_name = browser.find_element(By.ID, "sample_name") sample_samplingDate = browser.find_element(By.ID, "sample_samplingDate") sample_archaeologicalLayer = browser.find_element(By.ID, "sample_archaeologicalLayer") sample_name.send_keys("non-test-échantillon") sample_samplingDate.send_keys("2023") sample_archaeologicalLayer.send_keys("US niv4") # … à vous de jouer ! #browser.quit() # activer si test automatique sans vérifications visuelles
Une fois connecté, on peut avoir besoin de changer de page. Il suffit dans ce cas d'appeler à nouveau la méthode get :
browser.get("http://localhost:8010/sample/new")
Il peut aussi y avoir des redirections d'une page vers une autre, par exemple le basculement sur un service d'identification 1) sur une autre url, puis retour.
Dans ce cas, il faut attendre que la page soit chargée ou un élément de cette page (logo, champ de saisie…)
# … # on ajoute les déclarations des 2 objets suivants : from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait timeout = 5 try: username_input_present = EC.presence_of_element_located((By.ID, 'username')) WebDriverWait(driver, timeout).until(username_input_present) except TimeoutException: print ("Timed out waiting for page to load")
src : https://stackoverflow.com/a/41725576/6614155
voir aussi : https://www.selenium.dev/documentation/webdriver/waits/
On peut simuler des frappes de clavier, comme une tabulation (TAB) pour changer de champ, la touche entrée (ENTER) pour soumettre le formulaire et évidemment saisir du texte :
# il faut tout d'abord ajouter from selenium.webdriver import Keys, ActionChains driver.get("https://my-web-site") # et enchaîner les frappes que l'on souhaite : # passage au champ de saisie (ou bouton suivant) ActionChains(driver) \ .send_keys(Keys.TAB)\ .perform() # taper un texte ActionChains(driver) \ .send_keys("abcdef")\ .perform() # équivalent de la touche entrée (soumettre, valider) ActionChains(driver) \ .send_keys(Keys.ENTER)\ .perform()
Voir : https://www.selenium.dev/documentation/webdriver/actions_api/keyboard/
et https://github.com/SeleniumHQ/seleniumhq.github.io/blob/trunk/examples/python/tests/actions_api/test_keys.py#L34-L36
Il suffit d'exécuter le script python :
python3 mon-script-selenium.py