Selenium Python脚本执行driver.get(url)偶发无报错卡死如何修复
Selenium Chrome driver.get()偶发卡死无响应修复方案
核心问题根因:你使用的v92版本Chrome/ChromeDriver默认driver.get()无全局超时限制,加上固定调试端口冲突、多用户目录切换残留进程、小版本不兼容的组合问题,导致页面加载阶段触发内核死锁,无报错也不返回。
可落地修复步骤
- 第一步:添加超时配置+异常捕获,从逻辑上避免永久卡死
初始化driver后立刻配置三类超时规则,用异常捕获逻辑处理超时场景,触发后强制销毁驱动重试:driver = webdriver.Chrome(executable_path=r"C:\Users\minh7\OneDrive\Máy tính\chromedriver v92 for portable.exe", chrome_options=options) # 新增超时配置,单位为秒 driver.set_page_load_timeout(30) # 页面加载最长等待时间 driver.set_script_timeout(30) # 页面JS执行最长等待时间 driver.implicitly_wait(10) # 元素查找隐式等待时间 driver.maximize_window() try: driver.get('https://twitter.com') except Exception as e: print(f"页面加载超时,即将销毁驱动重试:{str(e)}") driver.quit() # 强制清理当前进程,避免后台残留 # 可自行添加重试逻辑,将当前序号放回循环队列重新执行 continue print('页面加载完成,后续逻辑正常执行') - 第二步:解决固定远程调试端口冲突
你当前所有Chrome实例都绑定--remote-debugging-port=9222同一个端口,上一个实例退出后端口未及时释放的情况下,新实例启动就会出现通信死锁。无外部调试需求的话直接删除这条配置即可,v92版本Selenium默认会自动分配可用的调试端口。如果必须指定端口,可以改成动态端口:options.add_argument(f"--remote-debugging-port={9222 + i}") - 第三步:清理多用户目录切换的进程残留
每次循环结束必须主动调用driver.quit()销毁进程,不能依赖脚本自动回收,否则Chrome后台进程会锁定用户配置目录,下一次加载同目录配置时就会出现读写冲突导致卡死。可以在循环开头加Windows进程清理命令,避免残留:import os # 循环开头执行,清理所有残留Chrome进程 os.system('taskkill /f /im chrome.exe >nul 2>&1') - 第四步:调整页面加载策略降低阻塞概率
给ChromeOptions添加加载策略配置,跳过不必要的静态资源等待,避免广告、第三方资源加载慢导致的假死:# 仅等待DOM树加载完成,不需要等图片、CSS等资源加载 options.page_load_strategy = 'eager' - 第五步:修复版本兼容问题
你当前使用的ChromeDriver v92.0.4515.107和Chrome便携版v92.0.4515.131存在小版本差异,v92版本ChromeDriver对小版本兼容性较差,替换为和Chrome完全同版本的ChromeDriver v92.0.4515.131可以解决内核层面的死锁问题。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

