จะหลีกเลี่ยง NoSuchElementException ในซีลีเนียมได้อย่างไร? [ซ้ำ]

Aug 18 2020

ใหม่ทั้งหมดนี้ดังนั้นฉันขออภัยหากเป็นคำถามที่โง่เขลา

นี่คือทั้งหมดที่ฉันพยายามทำ:

nxt_btn = driver.find_element_by_xpath('/html/body/main/article/section/form/div[2]/button')
nxt_btn.click()
time.sleep(2)
vote_check = driver.find_element_by_xpath('/html/body/main/article/section/form/div[1]/div[2]/div/div/fieldset/div/div/div[2]/div/input')
vote_check.click()
time.sleep(2)
nxt_btn = driver.find_element_by_xpath('/html/body/main/article/section/form/div[2]/button')
nxt_btn.click()
driver.quit()

และมันจะกลับมา:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/main/article/section/form/div[1]/div[2]/div/div/fieldset/div/div/div[2]/div/input"}


(Session info: chrome=84.0.4147.125)

ฉันได้ลองเปลี่ยนเวลารอเลือกองค์ประกอบที่แตกต่างกันและตรวจสอบว่าอยู่ใน iframe หรือไม่ซึ่งถ้าเป็นเช่นนั้นฉันไม่สามารถหาได้โดยแค่ขึ้นไปบนเส้นทาง

คำตอบ

1 AmrutaPande Aug 18 2020 at 12:18

แทนที่จะนอนหลับให้ใช้ซีลีเนียมระเบิดรอ

 element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.XPATH, "XPATH"))

เงื่อนไขที่คุณสามารถใช้ได้คือ:

  1. visibility_of_element_located
  2. text_to_be_present_in_element
  3. element_to_be_clickable