CodeGym /Cours /Python SELF FR /Création de fonctions pour rechercher et interagir avec d...

Création de fonctions pour rechercher et interagir avec des éléments sur une page web

Python SELF FR
Niveau 37 , Leçon 2
Disponible

1. Bases de la recherche d'éléments sur une page

Utilisation des méthodes de recherche d'éléments

Quand tu commences à utiliser Selenium dans des projets réels, une des premières tâches sera de trouver des éléments sur la page. C’est un peu comme chercher le bouton de l'ascenseur dans un hôtel : tu dois savoir où il se trouve pour appuyer et aller à l'étage voulu.

Selenium propose plusieurs méthodes pour rechercher des éléments. En fonction de tes préférences, tu peux utiliser find_element_by_id, find_element_by_name, find_element_by_xpath, find_element_by_css_selector, etc. Rappelons-nous ce que tu sais déjà et écrivons un petit exemple simple :

Python

from selenium import webdriver

# On crée une instance du navigateur (ici, on utilise Chrome)
driver = webdriver.Chrome()

# On ouvre la page
driver.get('http://example.com')

# Recherche d'un élément par ID
element_by_id = driver.find_element_by_id('main')

# Recherche d'un élément par nom
element_by_name = driver.find_element_by_name('username')

# Recherche d'un élément par XPath
element_by_xpath = driver.find_element_by_xpath('//div[@class="content"]')

# Recherche d'un élément par sélecteur CSS
element_by_css = driver.find_element_by_css_selector('div.content')

Différences entre find_element et find_elements

Quand tu as plusieurs éléments que tu veux récupérer (par exemple, tous les boutons avec la classe btn), il te faudra la méthode find_elements. La différence entre find_element et find_elements est que le premier retourne un seul élément, tandis que le second retourne une liste d'éléments.

Python

# Recherche d'un seul élément
single_element = driver.find_element_by_class_name('btn')

# Recherche de plusieurs éléments
multiple_elements = driver.find_elements_by_class_name('btn')

# Parcours des éléments trouvés
for element in multiple_elements:
    print(element.text)

Comme tu le vois, find_elements est parfait pour travailler avec des collections d'éléments qui peuvent être multiples sur une page. Chaque méthode find_element_xxx a son équivalent find_elements_xxx, qui retourne une liste d'éléments.

2. Interaction interactive avec les éléments

Interaction avec des boutons, des liens et des champs de saisie

Maintenant que tu te souviens comment trouver des éléments, il est temps de te rappeler comment interagir avec eux ! C’est un peu comme jouer avec un ensemble LEGO : il faut assembler correctement les pièces pour obtenir ce que tu veux.

L’interaction avec les éléments peut se faire grâce aux méthodes fournies par Selenium. Voyons encore une fois comment cela se fait :

Python

# Cliquer sur un bouton
button = driver.find_element_by_id('submit')
button.click()

# Saisir du texte dans un champ de saisie
input_field = driver.find_element_by_name('q')
input_field.send_keys('Python selenium tutorial')

# Obtenir le texte d'un élément
header = driver.find_element_by_tag_name('h1')
print(header.text)

Gestion des événements et actions avec des éléments dynamiques

Quand il s'agit de travailler avec des éléments dynamiques, comme des boutons qui n'apparaissent qu'après une certaine action, il est important de prendre en compte les délais et les attentes. Selenium propose des moyens pour attendre le chargement de ces éléments. L'un d'eux est d'utiliser la classe WebDriverWait en combinaison avec expected_conditions.

Python

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# Attente de l'apparition du bouton pendant 10 secondes
button = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, 'submit'))
)

button.click()

Note. Pour éviter d'écrire expected_conditions à chaque fois, on l’a renommé lors de l'importation en EC.

Utiliser une attente rend ton script plus fiable et évite qu'il ne casse à cause de délais temporaires ou d’un chargement lent de la page. Et en pratique, cela arrive très souvent - presque tout le temps :)

3. Qu'est-ce qui peut mal tourner ?

Tout. Tout peut mal tourner. Tu es prêt à interagir avec les éléments, et soudain, bam, quelque chose ne fonctionne pas. Discutons de quelques erreurs typiques auxquelles tu pourrais te heurter.

Premièrement, NoSuchElementException — c’est le message d’erreur que tu verras assez souvent, surtout si l’élément que tu cherches n’existe pas sur la page. Cela se produit si tu essayes de trouver un élément qui n’est pas là. Pour éviter ces situations, tu peux utiliser la méthode try-except pour gérer les exceptions.

Python

from selenium.common.exceptions import NoSuchElementException

try:
    element = driver.find_element_by_id('non_existent_id')
except NoSuchElementException:
    print("Oups, on dirait que l'élément n'a pas été trouvé !")

Tu peux aussi rencontrer des problèmes avec des éléments dynamiques et des temps de chargement. Dans ce cas, attends le chargement des éléments avec WebDriverWait, comme nous l’avons vu plus tôt.

1
Mission
Python SELF FR, niveau 37, leçon 2
Bloqué
Recherche d'un élément par ID
Recherche d'un élément par ID
2
Mission
Python SELF FR, niveau 37, leçon 2
Bloqué
Recherche de plusieurs éléments par sélecteur CSS
Recherche de plusieurs éléments par sélecteur CSS
3
Mission
Python SELF FR, niveau 37, leçon 2
Bloqué
Automatisation de l'entrée et du clic
Automatisation de l'entrée et du clic
4
Mission
Python SELF FR, niveau 37, leçon 2
Bloqué
Traitement de contenu dynamique avec attente
Traitement de contenu dynamique avec attente
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION