Selenium登录后循环访问页面报WebDriverException如何解决
问题原因
你碰到的WebDriverException: cannot determine loading status from unknown error: unexpected command response是Chrome 103版本与低于4.3.0版本的Selenium存在兼容bug导致的,和你写的登录、页面跳转业务逻辑无关。Chrome 103调整了页面加载阶段的响应返回逻辑,旧版Selenium无法正确识别返回状态就会抛出这个异常,哪怕页面实际已经加载完成。
修复方案
按优先级从高到低选择以下任意一种方案即可:
- 升级Selenium到4.3.0及以上版本,官方已经在该版本修复了和Chrome 103的兼容问题,执行以下命令升级后无需修改原有业务代码:
pip install --upgrade selenium
- 如果暂时无法升级Selenium,可以在Chrome启动参数中添加配置,禁用触发该bug的Chrome特性,在你原有options配置段新增一行即可:
options.add_argument('--disable-features=PaintHolding')
- 给循环跳转逻辑增加重试兜底,该异常属于偶发的通信识别错误,重试即可正常执行,修改后的爬取循环参考代码如下:
from selenium.webdriver.support.ui import WebDriverWait import time for m in month_list: url = f"https://www.example.com/data/{m}" max_retry = 3 for retry_cnt in range(max_retry): try: driver.get(url) # 等待页面DOM完全加载后再执行后续操作 WebDriverWait(driver, 10).until( lambda d: d.execute_script("return document.readyState") == "complete" ) break except WebDriverException as e: if retry_cnt == max_retry - 1: raise e time.sleep(1) page_source = driver.page_source soup = BeautifulSoup(page_source, "html.parser") # 后续爬取逻辑
补充注意:循环爬取时不要在
driver.get()执行后立刻读取page_source,增加显式等待判断页面加载状态,也能大幅降低这类异常的出现概率。
内容的提问来源于stack exchange,提问作者Diana Mele
相关产品推荐
相关产品推荐

