Python自动化脚本异常处理:无搜索结果时如何实现重试跳转?
解决方案
你的问题出在当前的try-except逻辑仅处理了第一个元素查找失败的情况,若第二个元素也找不到,会直接抛出NoSuchElementException,导致后续get_attribute调用时因BCell未被正确赋值而报错。要实现两次查找都失败时自动跳转到下一条数据,需要调整异常捕获逻辑:
- 先导入Selenium的具体异常类(避免使用裸except,提升代码健壮性):
from selenium.common.exceptions import NoSuchElementException
- 重构查找元素的逻辑,在外层添加异常捕获,处理两次查找都失败的场景:
BCell = None try: # 尝试第一种链接格式 BCell = driver.find_element(By.XPATH, '//a[contains(@href, "/documents/business.html?fileNumber=")]') except NoSuchElementException: try: # 第一种失败后,尝试第二种链接格式 BCell = driver.find_element(By.XPATH, '//a[contains(@href, "/documents/trade.html?fileNumber=")]') except NoSuchElementException: # 两种格式都找不到,自增行号并跳过当前数据 X += 1 ABName = sheet.cell(X, 2).value # 假设代码在循环内,用continue跳过当前迭代 continue # 仅当找到元素时,执行后续操作 if BCell: link = BCell.get_attribute('href') # 后续的页面抓取逻辑...
- 核心说明:
- 初始化
BCell = None,避免变量未赋值时调用方法报错 - 嵌套try-except分别捕获两次查找的异常,确保两次失败时能触发行号自增
- 添加
if BCell:判断,保证只有找到有效元素后才执行get_attribute及后续操作
这样就能在两次查找都失败时,自动切换到下一行数据,彻底避免因元素不存在导致的报错。
内容的提问来源于stack exchange,提问作者Alexander Levy
相关产品推荐
相关产品推荐

