Selenium循环定时访问网页时出现‘因标签页崩溃导致会话被删除’问题的解决求助
解决Selenium循环中"tab crashed"页面崩溃问题
这问题我之前帮不少开发者排查过,结合你的场景,给你几个针对性的解决方案,按优先级尝试:
1. 复用浏览器实例(最关键的优化)
你现在每次循环都新建Chrome实例然后立刻关闭,这种频繁创建销毁的操作非常消耗系统资源,很容易触发tab崩溃。建议把浏览器实例的创建移到循环外面,循环内只刷新页面:
# 初始化浏览器实例(只执行一次) chrome_options = Options() # 保留你的现有参数,再加上后面推荐的资源限制参数 chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-dev-shm-usage') # 重点加这个 score_driver2 = webdriver.Chrome(options=chrome_options) while True: try: score_driver2.get("https://dtlive.com.au/afl/dataview.php") time.sleep(2) # 这里执行你的数据存储逻辑 time.sleep(30) except Exception as e: print(f"出现异常: {e}") # 如果真的崩溃了,可以尝试重启实例 score_driver2.quit() score_driver2 = webdriver.Chrome(options=chrome_options) # 程序结束时再退出(如果循环会终止的话) # score_driver2.quit()
2. 添加更多Chrome资源限制参数
很多时候tab崩溃是因为Chrome占用了过多的共享内存或系统资源,试试添加这些参数:
--disable-dev-shm-usage:解决Linux环境下/dev/shm空间不足的问题,这个是很多tab崩溃的核心原因--headless=new:如果不需要可视化界面,用新版无头模式,资源占用比旧版低很多--disable-gpu:禁用GPU加速,减少不必要的资源消耗--single-process:强制单进程运行(适合轻量页面,注意部分复杂页面可能有兼容问题)--window-size=1920x1080:指定窗口大小,避免无头模式下的渲染异常
完整的options配置示例:
from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-dev-shm-usage') chrome_options.add_argument('--headless=new') chrome_options.add_argument('--disable-gpu') chrome_options.add_argument('--single-process') chrome_options.add_argument('--window-size=1920x1080')
3. 检查系统资源与版本兼容性
- 系统资源:用
top或htop监控运行时的CPU、内存占用,如果循环运行一段时间后资源被占满,说明频繁创建实例的消耗超出了系统承载,要么优化逻辑,要么升级硬件。 - 版本匹配:确保你的Chrome浏览器版本、ChromeDriver版本、Selenium版本三者完全兼容。比如Chrome 118.x必须搭配ChromeDriver 118.x,Selenium建议用4.x的最新稳定版,版本不匹配会导致各种奇怪的崩溃问题。
4. 开启日志定位具体原因
如果上面的方案都没用,可以开启Chrome的日志功能,看看崩溃的具体触发点:
chrome_options.add_argument('--enable-logging') chrome_options.add_argument('--v=1') # 日志级别,1是基础信息,更高数值更详细
运行程序后查看控制台输出,里面会有崩溃相关的日志,能帮你定位是页面资源加载问题、JS错误还是系统层面的问题。
内容的提问来源于stack exchange,提问作者broccoli
相关产品推荐
相关产品推荐

