Python Selenium 有时会出现 java 脚本断言的隐藏框架

Python Selenium a hidden frame that appears sometimes with java script assert

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

我可以运行代码。

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()

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

任何想法都会很棒。

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

如果元素的长度大于 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

有没有可能除了NoSuchElementException还有其他的例外。 "hanging" 可能来自 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()