Chrome更新后Selenium报target frame detached错误如何解决
问题复现与根因
运行Selenium脚本时抛出如下异常:
selenium.common.exceptions.WebDriverException: Message: target frame detached (Session info: chrome=102.0.5005.63)
触发场景为Chrome更新至102.0.5005.63正式版后,官方未发布对应小版本号的ChromeDriver:本地留存的102.0.5005.61版驱动、最新发布的103.0.5060.24版驱动均存在适配偏差,且不接受回退Chrome版本的解决方案。
无需回退Chrome版本的解决方法
- 同大版本驱动+启动参数适配
网上传的必须Chrome和ChromeDriver小版本号完全一致的说法并不准确,二者兼容性仅要求主版本号完全一致,小版本号差异不会导致核心协议不兼容,出现frame detached问题本质是小版本差带来的站点隔离特性通信异常,添加对应启动参数即可修复:
初始化驱动时传入如下配置:
额外注意:所有切换iframe的操作前,加300-500ms的显式等待,等frame节点完全渲染后再执行switch操作,不要依赖隐式等待判断frame加载状态,实测该配置下连续跑自动化用例不会复现该报错。from selenium.webdriver import ChromeOptions from selenium import webdriver options = ChromeOptions() # 关闭站点隔离特性,解决跨frame通信中断问题 options.add_argument("--disable-features=IsolateOrigins,site-per-process") options.add_argument("--disable-gpu") options.add_argument("--no-sandbox") options.add_argument("--disable-extensions") driver = webdriver.Chrome(executable_path="本地102.0.5005.61版chromedriver路径", options=options) - 升级Selenium至4.6.0以上版本,使用内置驱动自动管理
Selenium 4.6.0及以上版本内置了Selenium Manager组件,启动时会自动识别本地Chrome的完整版本号,拉取官方适配的最优驱动版本,不需要手动下载驱动、指定驱动路径,也不需要手动处理版本匹配问题,后续Chrome自动升级后也会同步匹配对应驱动,一劳永逸。
初始化代码可以简化为:
该方案不会修改本地Chrome的任何配置,完全保留最新正式版的使用状态。from selenium import webdriver driver = webdriver.Chrome() - 并行安装Chrome for Testing版本做自动化专用
如果对自动化运行稳定性要求极高,可以并行安装Chrome for Testing版本,该版本为官方专门面向自动化测试场景发布的构建,每个小版本都有一一对应的ChromeDriver,不会出现无匹配驱动的问题。启动时指定该版本浏览器的二进制路径即可,不会覆盖本地日常使用的最新正式版Chrome。
内容的提问来源于stack exchange,提问作者the star
相关产品推荐
相关产品推荐

