Selenium Python WebDriver渲染器超时后挂起,捕获错误仍无效
解决ChromeDriver超时后挂起无法导航的问题
针对你遇到的Timed out receiving message from renderer:40.00错误,以及超时后ChromeDriver挂起的问题,可尝试以下几种解决方法:
1. 修改页面加载策略
默认的页面加载策略normal会等待所有资源(图片、脚本、样式等)加载完成,容易触发超时并导致driver挂起。可以将加载策略改为eager(等待DOM加载完成即可)或none(完全不等待),配合超时设置使用:
from selenium.webdriver.chrome.options import Options options = Options() # 设置加载策略为eager options.page_load_strategy = 'eager' # 可选值:normal, eager, none driver = uc.Chrome(seleniumwire_options=sel_options, options=options, use_subprocess=True) driver.execute_cdp_cmd('Network.setUserAgentOverride', {"userAgent": agent}) driver.set_page_load_timeout(40) def navigate(url): try: driver.get(url) except Exception as e: print(f"导航错误: {e}")
2. 超时后强制终止页面加载
在捕获到超时异常时,通过Chrome DevTools Protocol(CDP)命令强制停止当前页面的加载,避免driver陷入挂起状态:
def navigate(url): try: driver.get(url) except Exception as e: print(f"导航错误: {e}") # 强制停止页面加载 driver.execute_cdp_cmd('Network.stopLoading', {}) # 可选:导航到空白页重置状态 driver.get('about:blank')
3. 检查Chrome与ChromeDriver版本兼容性
Linux环境下,Chrome浏览器和ChromeDriver的版本必须严格匹配(主版本号一致),版本不匹配可能导致渲染进程通信异常。可以通过以下命令查看版本:
- 查看Chrome版本:
google-chrome --version - 查看ChromeDriver版本:
chromedriver --version
如果版本不一致,下载对应版本的ChromeDriver替换即可。
4. 禁用不必要的Chrome特性
禁用一些可能导致渲染进程阻塞的特性,比如GPU加速、扩展程序等:
options = Options() options.add_argument('--disable-gpu') options.add_argument('--disable-extensions') options.add_argument('--disable-dev-shm-usage') # 解决Linux下/dev/shm内存不足问题 options.add_argument('--no-sandbox') # 禁用沙箱模式,部分Linux环境需要
内容的提问来源于stack exchange,提问作者Ned Hulton
相关产品推荐
相关产品推荐

