You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Selenium Grid执行Playwright时启动两个浏览器(含空白窗口)问题

问题分析与解决

环境信息

  • Playwright版本:1.23.0
  • 操作系统:Windows
  • 浏览器:Chrome/Edge
  • Selenium Server版本:4.4.0

代码片段

public static void main( String[] args ) throws InterruptedException {
        Map<String,String> env = new HashMap<>();
        env.put("DEBUG","pw:browser*");
        env.put("SELENIUM_REMOTE_URL","http://192.168.1.103:4444");

        Playwright playwright = Playwright.create(new Playwright.CreateOptions().setEnv(env));
        Browser browser = playwright.chromium().launch(new BrowserType.LaunchOptions().setChannel("chrome").setHeadless(false));
        Page page = browser.newPage();
        page.navigate("https://playwright.dev/docs/selenium-grid");
        Thread.sleep(5000);
        // other actions...
        page.context().browser().close();
        playwright.close();
    }

问题描述

本地搭建了Selenium 4 Grid环境,Hub和Node均运行在本地系统中。执行Playwright脚本时,本该启动1个浏览器,实际却启动了2个,其中一个是空白窗口。

调试日志:

2022-09-17T05:40:12.196Z pw:browser <selenium> 连接到 http://192.168.1.103:4444/
2022-09-17T05:40:16.386Z pw:browser <selenium> 已连接到sessionId=624ba9e3aa78bdea3f2c987c67574550
2022-09-17T05:40:16.386Z pw:browser <selenium> 使用selenium v4
2022-09-17T05:40:16.387Z pw:browser <selenium> 为sessionId=624ba9e3aa78bdea3f2c987c67574550获取到端点ws://192.168.1.103:4444/session/624ba9e3aa78bdea3f2c987c67574550/se/cdp
2022-09-17T05:40:16.392Z pw:browser <ws connecting> ws://192.168.1.103:4444/session/624ba9e3aa78bdea3f2c987c67574550/se/cdp
2022-09-17T05:40:16.442Z pw:browser <ws connected> ws://192.168.1.103:4444/session/624ba9e3aa78bdea3f2c987c67574550/se/cdp
2022-09-17T05:40:23.829Z pw:browser <ws disconnecting> ws://192.168.1.103:4444/session/624ba9e3aa78bdea3f2c987c67574550/se/cdp
2022-09-17T05:40:23.841Z pw:browser <ws disconnected> ws://192.168.1.103:4444/session/624ba9e3aa78bdea3f2c987c67574550/se/cdp code=1005 reason=
2022-09-17T05:40:23.893Z pw:browser <selenium> 断开与sessionId=624ba9e3aa78bdea3f2c987c67574550的连接
2022-09-17T05:40:24.638Z pw:browser <selenium> 已断开与sessionId=624ba9e3aa78bdea3f2c987c67574550的连接

问题原因

你同时触发了两种浏览器启动逻辑:

  1. 设置SELENIUM_REMOTE_URL环境变量后,Playwright会自动通过Selenium Grid创建一个远程浏览器会话(对应日志里的selenium连接流程)。
  2. 代码里又调用了playwright.chromium().launch(),这会在本地直接启动一个新的Chrome浏览器。

两者叠加导致出现两个浏览器窗口,其中通过Selenium Grid创建的会话因为没有被代码接管,呈现为空白窗口。

解决方案

去掉本地launch()调用,改用connect()方法连接到Selenium Grid提供的CDP端点,或者直接依赖环境变量让Playwright自动处理连接。推荐修正后的代码如下:

方案一:手动指定CDP连接

public static void main( String[] args ) throws InterruptedException {
        Map<String,String> env = new HashMap<>();
        env.put("DEBUG","pw:browser*");
        env.put("SELENIUM_REMOTE_URL","http://192.168.1.103:4444");

        Playwright playwright = Playwright.create(new Playwright.CreateOptions().setEnv(env));
        // 连接到Selenium Grid的CDP端点
        Browser browser = playwright.chromium().connectOverCDP("http://192.168.1.103:4444");
        Page page = browser.newPage();
        page.navigate("https://playwright.dev/docs/selenium-grid");
        Thread.sleep(5000);
        // other actions...
        browser.close();
        playwright.close();
    }

方案二:依赖环境变量自动连接

public static void main( String[] args ) throws InterruptedException {
        Map<String,String> env = new HashMap<>();
        env.put("DEBUG","pw:browser*");
        env.put("SELENIUM_REMOTE_URL","http://192.168.1.103:4444");

        Playwright playwright = Playwright.create(new Playwright.CreateOptions().setEnv(env));
        // 当设置SELENIUM_REMOTE_URL时,chromium.connect()会自动连接到Grid
        Browser browser = playwright.chromium().connect();
        Page page = browser.newPage();
        page.navigate("https://playwright.dev/docs/selenium-grid");
        Thread.sleep(5000);
        // other actions...
        browser.close();
        playwright.close();
    }

说明

  • 当设置SELENIUM_REMOTE_URL后,Playwright会自动与Selenium Grid交互,获取CDP端点并建立连接,此时不需要再调用launch()(这是本地启动浏览器的方法)。
  • 使用connect()或connectOverCDP()可以正确接管Selenium Grid创建的浏览器会话,避免重复启动窗口。

内容的提问来源于stack exchange,提问作者Pabitra Kumar Swain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 13:55:28