lang:prog:selenium
Table des matières
Principe
Selenium permet de lancer un navigateur web (Firefox : Gecko), d'analyser le contenu de la page et de simuler des actions.
Il fonctionne autant en mode graphique et un CLI (head-less) uniquement.
Installation
Dépendences
Pour le faire fonctionner en Python, il faut :
- installer Selenium en version python :
pip install selenium
- installer le driver Firefox ou Gecko : GeckoDriver. Il faut ajouter le dossier contenant
geckodriver.exe
dans le path. - installer Firefox avec une version compatible avec GeckoDriver.
Vérification
from selenium import webdriver from selenium.webdriver import FirefoxOptions from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.expected_conditions import ( presence_of_element_located, ) from selenium.webdriver.support.ui import WebDriverWait opts = FirefoxOptions() opts.add_argument("--headless") with webdriver.Firefox(options=opts) as driver: wait = WebDriverWait(driver, 10) driver.get("https://google.com/ncr") driver.find_element(By.NAME, "q").send_keys("cheese" + Keys.RETURN) first_result = wait.until( presence_of_element_located((By.CSS_SELECTOR, "h3>div")) ) print(first_result.get_attribute("textContent"))
La console python doit sortir (par exemple) :
Show more
Messages d'erreur
selenium.common.exceptions.WebDriverException: Message: Process unexpectedly closed with status 1
:
Le WebDriver est lancé en mode interface graphique dans un environnement CLI-only. Il faut ajouter l'option --head-less
:
from selenium.webdriver import FirefoxOptions opts = FirefoxOptions() opts.add_argument("--headless") with webdriver.Firefox(options=opts) as driver: …
ImportError: cannot import name 'webdriver'
:
Le fichier test ne doit pas s'appeler selenium.py
.
selenium.common.exceptions.WebDriverException: Message: HTTP method not allowed
:
get_log
n'est pas implémenté chez Firefox Archive du 10/11/2016 le 03/01/2021
Il est par contre possible d'activer la redirection de la console sur la sortie standard :
profile = new FirefoxProfile(); profile.setPreference("devtools.console.stdout.content", true); driver = webdriver.Firefox(firefox_profile=profile)
lang/prog/selenium.txt · Dernière modification : 2021/01/03 17:26 de root