Python Selenium - Element introuvable?
Medestrac -
Bonjour,
J'utilise quotidiennement une application web.
Je souhaite automatiser l'activation de certaines options que je dois refaire chaque fois que j'arrive sur la page. J'utilise donc Selenium, mais j'ai régulièrement des erreurs. Voici mon code:
from webdriver_manager.chrome import ChromeDriverManager
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.implicitly_wait(20)
driver.get("adresse de mon appli")
driver.find_element(By.ID, "identificatorLogin").send_keys("MonIdentifiant")
driver.find_element(By.ID, "passwordLogin").send_keys("MonMotdePasse")
driver.find_element(By.ID, "loginCnx").click()
driver.find_element(By.ID, "addMachines").click()
Quand je lance ça: la page web s'ouvre et arrive sur l'écran d'authentification. L'identifiant et le mot de passe sont automatiquement saisis et validés en cliquant sur "loginCnx".
J'arrive donc sur une seconde page, qui contient un bouton "addMachines" sur lequel je veux cliquer...mais ça ne marche pas systématiquement, j'obtiens régulièrement une erreur:
selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
J'ai donc décidé de lister mes élements pour voir ce qu'il y a dedans:
Mon code:
ids = driver.find_elements(By.XPATH,'//*[@id]')
print("Taille", len(ids))
for ii in ids:
# print ii.tag_name
print(ii.get_attribute('id'))
Son exécution donne également un résultat variable. La taille est toujours 23. Mais le nombre d'éléments affichés avant l'erreur varie: généralement entre 5 et 8:
Taille 23 diagonal-stripe triangle sideMenuMachine addMachineMenuMachineNew addMachines hideMachinesMenuButton Traceback (most recent call last): ... selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document (Session info: chrome=108.0.5359.125) Stacktrace: Backtrace: ...
Je retrouve bien mon bouton "addMachines".
Je ne comprend pas pourquoi il ne va pas jusqu'au bout de la boucle for pour m'afficher les 23 éléments...et je ne comprends pas pourquoi il ne veut pas cliquer sur "addMachines" (enfin...pas toujours. De temps en temps ça marche...ce qui m'intrigue d'autant plus!)
Windows / Firefox 108.0
3 réponses
Bonjour,
Entre le moment où tu cliques sur la connexion et celui où tu veux cliquer sur ton bouton addMachine.. il serait sûrement utile de mettre une temporisation.
Je pense que le temps de chargement de la page peut être plus ou moins long
A voir de ce côté la peut-être ::https://www.selenium.dev/selenium/docs/api/py/webdriver_support/selenium.webdriver.support.wait.html#module-selenium.webdriver.support.wait
Je pensais que la commande
driver.implicitly_wait(20)
a justement pour vocation de palier à ces temps de chargement.