Java循环Selenium会话出现SessionNotCreatedException,throws InterruptedException是否有误?
解答你的问题
一、关于throws InterruptedException的疑问
首先明确:throws InterruptedException和SessionNotCreatedException之间没有直接关联,这个声明本身不存在错误。
原因如下:
InterruptedException是一个受检异常(Checked Exception),通常在代码中调用了会阻塞线程的方法(比如Thread.sleep()、Selenium显式等待WebDriverWait内部的线程等待逻辑等)时,需要在方法签名中声明抛出,或者在方法内部捕获处理。SessionNotCreatedException属于Selenium定义的运行时异常(RuntimeException),这类异常不需要在方法签名中通过throws声明——JVM允许方法直接抛出这类异常而无需提前告知调用者。
所以你的方法里写throws InterruptedException是合理的(只要你的代码确实有会触发这个异常的逻辑),和你遇到的SessionNotCreatedException没有冲突,也不存在“因为异常类型不匹配而错误”的问题。
二、排查SessionNotCreatedException的可能原因
结合你给出的环境信息(Chrome 64.0.3282.119、ChromeDriver 2.35、Selenium Server 3.10.0),先确认版本兼容性:ChromeDriver 2.35官方说明是支持Chrome 62-64版本,所以版本匹配是没问题的。那可以从这些方向排查:
- 资源耗尽问题:循环创建大量Selenium会话会占用较多系统资源(内存、进程),如果循环次数过多,可能导致系统无法创建新的Chrome进程,触发会话创建失败。建议在循环中每次使用完会话后,调用
driver.quit()彻底关闭浏览器进程,释放资源。 - ChromeDriver权限问题:在Linux环境下,ChromeDriver文件需要有可执行权限。可以通过命令
chmod +x chromedriver赋予执行权限。 - Chrome启动参数问题:Linux下运行Chrome可能需要添加特定启动参数,比如禁用沙箱模式(
--no-sandbox)、禁用GPU(--disable-gpu),避免因系统环境限制导致浏览器无法启动。示例代码:ChromeOptions options = new ChromeOptions(); options.addArguments("--no-sandbox"); options.addArguments("--disable-gpu"); WebDriver driver = new ChromeDriver(options); - 系统环境问题:检查Linux系统是否安装了Chrome运行所需的依赖库(比如
libXss1、libappindicator1等),缺失依赖会导致Chrome无法启动,进而触发会话创建失败。 - Selenium Server配置问题:如果是通过Selenium Grid运行,确认Server是否正常运行,节点是否注册成功,且节点的ChromeDriver路径配置正确。
内容的提问来源于stack exchange,提问作者SimonFreeman
相关产品推荐
相关产品推荐

