Selenium中driver.find_element_by_xpath未找到元素时如何跳过执行其他逻辑
Selenium元素不存在时跳过执行的实现方案
核心逻辑是捕获Selenium查找元素失败时抛出的NoSuchElementException异常,在异常分支执行备选逻辑即可,具体修改步骤如下:
- 首先导入Selenium的元素未找到异常类
from selenium.common.exceptions import NoSuchElementException
- 初始化driver后添加隐式等待,避免页面未加载完成导致的元素查找误判
隐式等待会作用于所有元素查找逻辑,最长等待设置的时长,元素提前加载完成就会直接向下执行:
driver = webdriver.Chrome() driver.implicitly_wait(10) # 单位为秒,可根据页面加载速度调整 driver.get('https://www.target.com/p/plusone-waterproof-rechargeable-dual-vibrating-massager/-/A-76150669#lnk=sametab')
- 使用try-except结构实现分支逻辑
try: # 先尝试查找并点击ship元素 ship = driver.find_element_by_xpath('//*[@id="viewport"]/div[4]/div/div[2]/div[3]/div[1]/div/div[3]/div[1]/div[2]/button') ship.click() except NoSuchElementException: # 未找到ship元素时,执行addtoCart点击逻辑 addtoCart = driver.find_element_by_xpath('//*[@id="addToCartButtonOrTextIdFor76150669"]') addtoCart.click() time.sleep(2) cart = driver.get('https://www.target.com/cart')
完整修改后代码
from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.common.exceptions import NoSuchElementException import time # 初始化driver并配置隐式等待 driver = webdriver.Chrome() driver.implicitly_wait(10) driver.get('https://www.target.com/p/plusone-waterproof-rechargeable-dual-vibrating-massager/-/A-76150669#lnk=sametab') # 分支执行逻辑 try: ship = driver.find_element_by_xpath('//*[@id="viewport"]/div[4]/div/div[2]/div[3]/div[1]/div/div[3]/div[1]/div[2]/button') ship.click() except NoSuchElementException: addtoCart = driver.find_element_by_xpath('//*[@id="addToCartButtonOrTextIdFor76150669"]') addtoCart.click() time.sleep(2) cart = driver.get('https://www.target.com/cart')
内容的提问来源于stack exchange,提问作者Karl
相关产品推荐
相关产品推荐

