Python Selenium 一个隐藏的框架,有时与 java 脚本断言一起出现
Posted
技术标签:
【中文标题】Python Selenium 一个隐藏的框架,有时与 java 脚本断言一起出现【英文标题】:Python Selenium a hidden frame that appears sometimes with java script assert 【发布时间】:2020-04-21 03:59:38 【问题描述】:我在我抓取的这个网站上每周出现几次通知。我无法绕过它。
我可以运行代码。
el = driver.find_element_by_xpath("//input[@id='btnRead']")
driver.execute_script("arguments[0].click();", el)
这会清除它,但如果我将它留在我的代码中,它会给我一个 no such element 异常。如果我尝试像这样将它包装在 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()
这也会清除它,如果它存在,但如果它不存在,则会出错。 我认为我做错了什么,但我已经尝试了几个不同的版本,但我总是收到导致窗口挂起并停止执行其余脚本的错误。
任何想法都会很棒。
【问题讨论】:
this 将是您的答案。请尝试。 我试过这个,但我无法让它工作。我很感激你的帮助。澄清一下,我可以在元素存在时找到它。我只是无法捕捉到错误以阻止代码中断。 【参考方案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
【讨论】:
非常感谢,我之前尝试过这个版本,一定是在某个地方弄乱了代码。这完全解决了我的问题。我刚刚测试了 10 种不同的方法。【参考方案2】:除了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()
【讨论】:
以上是关于Python Selenium 一个隐藏的框架,有时与 java 脚本断言一起出现的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 setAttribute 方法和 Selenium 和 Python 更改 Datepicker 的隐藏元素的日期?
selenium python 针对js生成的下拉列表,如何选择隐藏的选项
如何单击使用 Selenium WebDriver 隐藏的元素?