Splinter中is_visible()抛出ElementDoesNotExist异常问题咨询
解决方案
问题根源
browser.find_by_css() 方法本身在找不到匹配元素时会直接抛出 ElementDoesNotExist 异常,不会进入后续的 is_visible() 等待逻辑。官方文档中 is_visible(timeout) 的作用是针对已成功定位的元素,等待其变为可见状态,超时后返回False——它并不负责处理元素不存在的场景。
可行解决方法
方法1:先检查元素存在性,再判断可见性
使用Splinter提供的 is_element_present_by_css() 方法,先等待元素存在(超时时间设为1000秒),存在后再检查可见性:
# 先等待元素加载存在,超时返回False if browser.is_element_present_by_css(business_role_expand, wait_time=1000): # 元素存在后,等待其变为可见 is_visible = browser.find_by_css(business_role_expand).is_visible(1000) else: is_visible = False
方法2:捕获元素不存在异常
用try-except块捕获ElementDoesNotExist异常,将元素不存在的情况统一处理为返回False:
import splinter.exceptions try: # 尝试定位元素并等待其可见,超时返回False is_visible = browser.find_by_css(business_role_expand).is_visible(1000) except splinter.exceptions.ElementDoesNotExist: # 元素不存在时返回False is_visible = False
额外注意事项
确保你的geckodriver版本与Firefox浏览器版本兼容——版本不匹配可能导致等待逻辑异常,比如驱动无法正确识别页面加载状态,提前抛出异常。
内容的提问来源于stack exchange,提问作者eXPRESS
相关产品推荐
相关产品推荐

