1

我有一个通知,每周在我抓取的这个网站上出现几次。我无法绕过它。

我可以运行代码。

el =  driver.find_element_by_xpath("//input[@id='btnRead']")
driver.execute_script("arguments[0].click();", el)

这清除了它,但如果我把它留在我的代码中,它会给我一个没有这样的元素异常。如果我尝试像这样将它包装在 try/catch 中的事件。

from selenium.common.exceptions import NoSuchElementException

try:
    el = driver.find_element_by_xpath("//input[@id='btnRead']")
    driver.execute_script("arguments[0].click();", el)
except NoSuchElementException:
    print(nonefound)
sleep(5)
driver.quit()

这也会清除它,如果它存在但如果它不存在,则错误。我假设我做错了什么,但我尝试了几个不同的版本,我总是得到错误,导致窗口挂起并停止脚本其余部分的执行。

任何想法都会很棒。

4

2 回答 2

1

如果您想继续您的脚本,您可以检查元素的长度。

如果元素的长度大于 0,则会单击。

if len(driver.find_elements_by_xpath("//input[@id='btnRead']"))>0 :
    el = driver.find_element_by_xpath("//input[@id='btnRead']")
    driver.execute_script("arguments[0].click();", el)
else:
    print("nonefound")

或诱导WebDriverWait() 和visibility_of_element_located()

try:
    el = WebDriverWait(driver,5).until(EC.visibility_of_element_located(("//input[@id='btnRead']")))
    driver.execute_script("arguments[0].click();", el)
except NoSuchElementException:
    print("nonefound")

您需要导入以下库。

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
于 2020-01-02T13:43:13.983 回答
0

是否有可能除了NoSuchElementException. “悬挂”可能来自TimeoutException. 尝试在那里打印这样的异常:

from selenium.common.exceptions import NoSuchElementException

try:
    el = driver.find_element_by_xpath("//input[@id='btnRead']")
    driver.execute_script("arguments[0].click();", el)
except Exception as e:
    print(e)
sleep(5)
driver.quit()
于 2020-01-02T13:43:43.823 回答