求助:Selenium调用方法时触发NoSuchSessionException异常
我来帮你排查这个棘手的No Such Session异常问题!结合你的Chrome和ChromeDriver版本,给你整理几个针对性的排查方向:
针对Selenium "No Such Session" 异常的适配排查方案
1. 先确认会话是否被意外终止
- 检查代码里有没有在操作前提前调用了
driver.quit()或driver.close(),尤其是分支逻辑里容易出现这类遗漏,导致后续操作时会话已失效。 - 排查是否存在多线程共享同一个WebDriver实例的情况,无同步的多线程操作很容易触发会话意外关闭。
2. 强制清理ChromeDriver残留进程
这个版本的ChromeDriver偶尔会出现进程残留,导致新会话无法正常建立:
- 手动打开任务管理器,结束所有
chromedriver.exe和无窗口的后台chrome.exe进程。 - 可以在代码启动WebDriver前,添加清理逻辑(Windows环境):
// 执行命令杀掉残留的ChromeDriver进程 Runtime.getRuntime().exec("taskkill /F /IM chromedriver.exe /T");
3. 调整WebDriver启动参数
试试添加这些参数规避会话异常:
ChromeOptions options = new ChromeOptions(); // 禁用沙箱模式,避免权限问题导致会话崩溃 options.addArguments("--no-sandbox"); // 禁用GPU加速,部分Windows环境下会引发会话异常 options.addArguments("--disable-gpu"); // 阻止浏览器随Driver进程一起退出,方便排查会话状态 options.setExperimentalOption("detach", true); WebDriver driver = new ChromeDriver(options);
4. 排查环境干扰因素
- 如果使用了代理,确认代理配置是否正常,代理连接失败会直接导致会话终止。
- 暂时关闭杀毒软件、防火墙等安全工具,这类软件可能会拦截ChromeDriver与Chrome的通信,引发会话丢失。
5. 规范WebDriver生命周期管理
- 避免在循环中重复创建WebDriver实例,每次使用完毕务必调用
driver.quit()(而非driver.close(),后者仅关闭窗口,不会彻底销毁会话和进程)。 - 若使用测试框架(如TestNG/JUnit),要在
@AfterMethod或@AfterClass注解方法中统一执行driver.quit(),避免会话残留。
补充说明:你的ChromeDriver 2.38和Chrome 66.0.3359.117属于官方兼容版本,版本不匹配的问题可以直接排除,重点放在会话管理、进程残留和环境干扰上。
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

