Selenium捕获Chrome not reachable异常及重启驱动方案咨询
解决方法
1. 先导入缺失的异常类
你之前遇到NameError: name 'WebDriverException' is not defined是因为没有导入Selenium的对应异常类,首先在代码头部添加导入语句:
from selenium.common.exceptions import WebDriverException
2. 调整代码逻辑实现驱动自动重启
核心逻辑是:捕获到chrome not reachable异常时,先清理旧驱动进程,再重启驱动,可选择重试当前失败的商品。修改后的参考代码如下:
# 初始化驱动 driver = driver.start_driver() for index, row in listado_productos.iterrows(): # 单条商品最多重试1次(可自定义次数) retry_flag = True while retry_flag: try: driver.get(url) amount = driver.find_element(By.CSS_SELECTOR, "div.ui-header_subtitle a.test span.ui-subtitle").text # 省略其余业务逻辑 db.update_article_date(article_df) # 执行成功退出重试循环 retry_flag = False except WebDriverException as e: # 判断是否是Chrome不可达异常 if "chrome not reachable" in str(e): # 先清理旧驱动残留 try: driver.quit() except: pass # 重启驱动 driver = driver.start_driver() # 保持retry_flag为True,重试当前商品 else: # 其他WebDriver异常,标记为错误,不重试 db.update_article_error(row['product_id']) retry_flag = False except Exception as e: # 其余业务异常,标记错误 db.update_article_error(row['product_id']) retry_flag = False # 最终关闭驱动 try: driver.quit() except: pass
注意事项
- 旧驱动调用
quit()方法可以彻底关闭Chrome进程和驱动进程,避免系统残留僵尸进程占用资源 - 可以根据实际需求调整单条商品的重试次数,避免无限重试卡住流程
内容的提问来源于stack exchange,提问作者Cristian Avendaño
相关产品推荐
相关产品推荐

