用java+selenium启动chrome浏览器时报错Exception in thread "main" org.openqa.selenium.NoSuchSession

本文介绍了在使用Java和Selenium启动Chrome浏览器时遇到NoSuchSession错误的问题。错误源于ChromeDriver版本与Chrome浏览器版本不匹配。通过查看警告信息并参考相关博客,找到对应版本的ChromeDriver,更新后问题得到解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在很多网页内容都是动态生成的,动态页面信息的提取可以使用selenium。提取动态页面信息的

其中一种方法就是启动浏览器执行js代码,那么第一步就是要先启动浏览器。

下面上代码:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class ChromeTest{
	
	public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver","D:\\ChromeDriver\\chromedriver_win32\\chromedriver.exe");
      //新建一个WebDriver 的对象,但是new 的是chrome的驱动
        WebDriver driver =new ChromeDriver(); 
      //打开指定的网站
        driver.get("http://www.baidu.com");
        System.out.println(driver.getTitle());

        /**
         * dr.quit()和dr.close()都可以退出浏览器,简单的说一下两者的区别:第一个close,
         * 如果打开了多个页面是关不干净的,它只关闭当前的一个页面。第二个quit,
         * 是退出了所有Webdriver所有的窗口,退的非常干净,所以推荐使用quit最为一个case退出的方法。
         */
        driver.quit();//退出浏览器
	}
}
运行结果如下图:

### Selenium中SessionNotCreatedException异常的解决方案 在使用Selenium WebDriver,`SessionNotCreatedException` 异常通常与浏览器配置或用户数据目录(User Data Directory)有关。当尝试启动一个已处于使用状态的用户数据目录,可能会触发此异常。以下是对该问题的详细分析和解决方法。 #### 1. 异常原因 `SessionNotCreatedException` 可能由以下原因之一引起: - 浏览器实例尚未完全关闭,而另一个进程正在使用相同的用户数据目录[^1]。 - 用户数据目录被其他程序锁定,例如杀毒软件或文件同步工具。 - 配置了错误的选项,导致浏览器无法正确初始化。 #### 2. 解决方案 以下是几种常见的解决方法: ##### 方法一:避免重复使用用户数据目录 确保每次运行测试不重复使用同一个用户数据目录。可以通过动态生成临目录来实现这一点。例如,在Python中可以使用 `tempfile` 模块创建目录: ```python import tempfile from selenium import webdriver temp_dir = tempfile.mkdtemp() options = webdriver.ChromeOptions() options.add_argument(f"--user-data-dir={temp_dir}") driver = webdriver.Chrome(options=options) ``` 这种方法确保每次运行测试都会使用一个新的用户数据目录[^1]。 ##### 方法二:强制关闭现有浏览器实例 如果用户数据目录已被占用,可以尝试在启动实例之前关闭所有相关浏览器进程。例如,在Windows系统中可以使用以下命令关闭所有Chrome进程: ```bash taskkill /F /IM chrome.exe ``` 在脚本中可以结合 `subprocess` 模块执行上述命令: ```python import subprocess from selenium import webdriver subprocess.run("taskkill /F /IM chrome.exe", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) options = webdriver.ChromeOptions() driver = webdriver.Chrome(options=options) ``` ##### 方法三:禁用用户数据目录 如果不依赖于特定的用户数据目录,可以直接禁用它。通过添加 `--no-sandbox` 和 `--disable-dev-shm-usage` 参数,可以减少冲突的可能性: ```python options = webdriver.ChromeOptions() options.add_argument("--no-sandbox") options.add_argument("--disable-dev-shm-usage") driver = webdriver.Chrome(options=options) ``` 这些参数适用于某些特殊环境(如Docker容器),能够有效避免因权限或资源限制引发的问题[^1]。 ##### 方法四:检查并修复用户数据目录 如果必须使用固定的用户数据目录,则需要确保该目录未被其他进程占用。可以通过以下步骤进行排查: - 确认没有其他浏览器实例正在运行。 - 删除或备份现有的用户数据目录,并重新创建一个新的目录。 示例代码如下: ```python import shutil import os from selenium import webdriver user_data_dir = "/path/to/user/data/dir" if os.path.exists(user_data_dir): shutil.rmtree(user_data_dir) os.makedirs(user_data_dir) options = webdriver.ChromeOptions() options.add_argument(f"--user-data-dir={user_data_dir}") driver = webdriver.Chrome(options=options) ``` #### 3. 其他注意事项 - 如果使用的是远程WebDriver(如Grid),请确保所有节点配置一致,并且不会重复使用同一用户数据目录。 - 在多线程环境中运行Selenium,每个线程应独立配置其用户数据目录,以避免冲突。 --- ### 示例代码 以下是一个完整的示例,展示如何动态生成用户数据目录并启动Chrome浏览器: ```python import tempfile from selenium import webdriver # 创建用户数据目录 temp_dir = tempfile.mkdtemp() # 配置Chrome选项 options = webdriver.ChromeOptions() options.add_argument(f"--user-data-dir={temp_dir}") options.add_argument("--no-sandbox") options.add_argument("--disable-dev-shm-usage") # 启动浏览器 driver = webdriver.Chrome(options=options) driver.get("https://www.example.com") ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值