Outils pour utilisateurs

Outils du site


lang:prog:selenium

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