Selenium在刷新网页后没有进入try块



我写了一段代码,其中我使用try-except块来检查事件。在try块中,如果找到指定的按钮,代码应该等待10秒,然后刷新页面。如果找不到,它应该在3秒内刷新页面。

但这里发生的是,在执行代码后,假设代码前3次进入except块,因为我们要查找的元素不在那里。但是,当元素在第4次运行中第一次出现时,代码仍然转到except块。

有人能帮我弄清楚我的逻辑哪里出了问题吗?

while True:
browser.refresh()
time.sleep(7)
try:
Check = browser.find_element_by_class_name("btn btn-sm btn-default")
time.sleep(10)
browser.refresh()
except NoSuchElementException:
time.sleep(3)
browser.refresh()

非常感谢你的帮助。

您使用了browser.find_element_by_class_name,但提供了一个css选择器
应该使用带有By对象的find_element搜索元素,因为find_element_by_class_name已弃用。

check = browser.find_element(By.CSS_SELECTOR, 'btn btn-sm btn-default')

我怀疑问题可能是由time.sleep(7)引起的。如果元素btn btn-sm btn-default的加载时间超过7秒,则代码将进入try,但由于尚未找到该元素,因此跳到except。我建议尝试WebdriverWati而不是time.sleep()。此外,还不清楚找到元素时为什么要等待10秒。所以现在,我已经把它减少到3秒,但你可以随心所欲地改变它;并且,我已经删除了except块中的sleep,并放置了一个print语句。以下是代码:

while True:
browser.refresh()
# time.sleep(7)
try:
Check = WebDriverWait(browser, 10).until(EC.visibility_of_element_located((By.CLASS_NAME, "btn btn-sm btn-default")))
print(Check)
time.sleep(3) # retaining this line just for you to observe the action.
browser.refresh()
except NoSuchElementException as e:
# time.sleep(3)
print(f"no such element found:  {e}")
browser.refresh()

所需进口:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

您可以按照@Kfir Doron 的建议,交替尝试使用CSS_SELECTOR进行定位

然而,如果这两种解决方案都无法工作,那么您可能需要查看更精确的元素本身,而不是类btn btn-sm btn-default

相关内容

  • 没有找到相关文章

最新更新