====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)