2017-08-03 1 views
0

Je suis en train de localiser un élément en utilisant le sélénium python, et ont le code suivant:Impossible de trouver l'élément en Python Sélénium

zframe = driver.find_element_by_xpath("/html/frameset/frameset/frame[5]") 
driver.switch_to.frame(zframe) 
findByXpath("/html/body/form/table/tbody/tr/td[2]/label[3]").click() 
element = driver.find_element_by_xpath("//*[@id='awdType']") 

Je reçois l'erreur:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id='awdType']"} (Session info: chrome=59.0.3071.115)

Des idées pour lesquelles il n'est peut-être pas capable de localiser cet élément? J'ai utilisé le xpath exact en le copiant et en changeant aussi de frames. Merci!

+0

Quel site vous rampez? – ksai

+0

L'erreur 'Impossible de localiser l'élément' dit tout. Soit le 'xpath' de l'élément est incorrect, soit l'élément n'est pas présent/visible. Merci – DebanjanB

Répondre

1

Le problème se produit car awdType est chargé par ajax ou jquery. Vous devez utiliser selenium Waits. Il existe deux types d'attentes explicites et implicites. Évitez d'utiliser l'attente implicite.

# Explicit wait example 
from selenium.webdriver.support import expected_conditions as EC 

wait = WebDriverWait(driver,20) 
element = wait.until(EC.element_to_be_clickable((By.ID, 'awdType'))) 

OU

# implicit wait example 
driver.implicitly_wait(10) # seconds 
element = driver.find_element_by_xpath("//*[@id='awdType']") 
+0

Comment pouvez-vous conclure 'awdType est chargé par ajax ou jquery'? Merci – DebanjanB

+0

Cet élément n'est pas rendu dans le dom lorsque votre script atteint à element = driver.find_element_by_xpath ("// * [@ id = 'awdType']") –

+0

De cela, je reçois l'erreur que "WebDriverWait" est non défini même lorsque j'inclus l'en-tête ci-dessus pour importer expected_conditions comme EC –