====Principe====
[[https://www.selenium.dev/|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 : [[https://github.com/mozilla/geckodriver/releases|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 [[https://github.com/mozilla/geckodriver/issues/330|Firefox]] {{ :lang:prog:selenium:cannot_get_console_error_logs_from_firefox_issue_330_mozilla_geckodriver_03_01_2021_17_18_41_.html |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)