Selenium如何不使用try except判断元素是否存在或可见?
解决方案
你之前调用.isDisplayed()不生效的核心原因是:find_element方法在找不到匹配元素时会直接抛出NoSuchElementException异常,代码根本执行不到调用.isDisplayed()的步骤。无需使用try except的实现方式如下:
核心思路
使用find_elements(复数形式)替代find_element,该方法在找不到匹配元素时只会返回空列表,不会抛出异常,只需判断返回列表的长度即可判断对应位置的图片是否存在。
实现代码
# 首先获取所有缩略图对应的li元素列表 thumb_items = driver.find_elements_by_xpath('//*[@id="goods_thumb_content"]/ul/li') # 取前三张图片(按你的场景3张是保底存在的) Image1 = thumb_items[0].get_attribute("data-bigimg") Image2 = thumb_items[1].get_attribute("data-bigimg") Image3 = thumb_items[2].get_attribute("data-bigimg") Image4 = None # 判断是否存在第四张图片 if len(thumb_items) >= 4: Image4 = thumb_items[3].get_attribute("data-bigimg") # 后续逻辑可正常执行,Image4为None即代表没有第四张图
Selenium 4+ 适配写法
如果你使用的是Selenium 4及以上版本,find_elements_by_xpath方法已被弃用,推荐使用如下写法:
from selenium.webdriver.common.by import By thumb_items = driver.find_elements(By.XPATH, '//*[@id="goods_thumb_content"]/ul/li')
内容的提问来源于stack exchange,提问作者tejas
相关产品推荐
相关产品推荐

