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
jordane45
Messages postés38270Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention 5 novembre 20244 695 11 janv. 2023 à 14:26
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
Je viens de voir quelque chose sur les iFrames, comme quoi il faut naviguer au bon endroit avant de cliquer, mais je n'ai pas encore tout compris. Je verrai ça demain.