web-dev-qa-db-fra.com

selenium.common.exceptions.NoSuchElementException: Message: Impossible de localiser l'élément:

J'essaie de générer automatiquement beaucoup d'utilisateurs sur la page Web kahoot.it en utilisant Selenium pour les faire apparaître devant la classe. Cependant, je reçois ce message d'erreur lorsque j'essaie d'accéder à l'élément inputSession (où vous écrivez le gameID à entrer) le jeu) 

from Selenium import webdriver
from Selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()
driver.get("http://www.kahoot.it")

gameID = driver.find_element_by_id("inputSession")
username = driver.find_element_by_id("username")

gameID.send_keys("53384")

C'est l'erreur: 

Selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element:
{"method":"id","selector":"inputSession"}

Toute aide serait très appréciée! :) 

10
Morten Stulen

Peut-être une condition de concurrence critique dans laquelle l'élément de recherche s'exécute avant qu'il ne soit présent sur la page. Jetez un coup d’œil à la documentation wait timeout . Voici un exemple tiré de la documentation

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

driver = webdriver.Firefox()
driver.get("http://somedomain/url_that_delays_loading")
try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "myDynamicElement"))
    )
finally:
    driver.quit()
15
shri046

On dirait que le chargement de la page Web prend du temps et, par conséquent, la détection de webelement ne s'est pas produite. Vous pouvez soit utiliser le code de @ shri ci-dessus, soit simplement ajouter ces deux instructions juste en dessous du code driver = webdriver.Firefox()

driver.maximize_window() //For maximizing window
driver.implicitly_wait(20) //gives an implicit wait for 20 seconds
16
Subh

Vous pouvez également utiliser ci-dessous comme alternative aux deux solutions ci-dessus:

import time
time.sleep(30) 
0
Tikkaty