我写了一段代码,其中我使用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