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.
Pour le faire fonctionner en Python, il faut :
pip install selenium
geckodriver.exe
dans le path.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
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)