如何使用Selenium JavaScript WebDriver连接已激活浏览器会话
复用已有的Selenium Chrome会话
问题原因
你直接实例化WebDriver和Session的代码缺少**HTTP执行器(Executor)**配置,这是WebDriver与ChromeDriver服务器通信的核心组件,所以无法生成和Builder创建的一致的实例结构,也无法成功连接已有会话。
正确实现方案
要连接已激活的会话,必须指定ChromeDriver服务器地址,创建对应的执行器并绑定到WebDriver实例中,完整代码如下:
const { WebDriver, Session, Capabilities, HttpExecutor, HttpClient } = require("selenium-webdriver"); // 替换为你的目标会话ID const targetSessionId = '5cdfff6e4dfd7e5551795d365db289b2'; // ChromeDriver默认服务地址,若修改过端口请对应调整 const driverServerUrl = 'http://localhost:9515'; // 创建HTTP客户端与执行器 const httpClient = HttpClient.createClient(driverServerUrl); const executor = new HttpExecutor(httpClient); // 初始化会话与WebDriver实例 const session = new Session(targetSessionId, Capabilities.chrome()); const driver = new WebDriver(session, executor); // 测试连接:获取当前页面标题 driver.getTitle().then(title => { console.log('当前页面标题:', title); }).catch(err => { console.error('会话连接失败:', err); });
关键细节
- Executor是核心:
Builder.build()内部会自动创建并绑定执行器,手动实例化WebDriver时必须显式配置,否则无法和ChromeDriver建立通信。 - 确认服务状态:要连接的会话对应的ChromeDriver必须处于运行状态,且会话未被关闭,否则会抛出会话不存在的错误。
- 实例结构匹配:运行上述代码后,打印
driver会得到和Builder创建的完全一致的实例结构,包含session_、executor_等关键属性。
内容的提问来源于stack exchange,提问作者alireza kargar
相关产品推荐
相关产品推荐

