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 :

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

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:
  …

Le fichier test ne doit pas s'appeler selenium.py.

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)