Java Selenium DevTools v127:addScriptToEvaluateOnNewDocument无效求助
问题:Selenium DevTools
addScriptToEvaluateOnNewDocument 注入脚本未生效 我正在使用Java结合Selenium开发网页爬虫,需要在网页加载前注入JavaScript代码以重写部分方法。尝试通过DevTools的addScriptToEvaluateOnNewDocument方法实现,但未产生预期效果;不过以下Emulation相关代码可正常运行,因此推测DevTools依赖配置正确:
devTools.send(Emulation.setDeviceMetricsOverride( 500, // width 600, // height 50, // deviceScaleFactor true, // mobile Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty() ));
完整测试代码如下:
String driverpath = Main.configuration.getString("browser.chromedriver"); String browserpath = Main.configuration.getString("browser.chromebrowser"); if(driverpath != null && !driverpath.isBlank()){ System.setProperty( "webdriver.chrome.driver", driverpath ); System.setProperty( "webdriver.gecko.driver", driverpath ); } ChromeOptions options = new ChromeOptions(); if(headless){ Main.printf("Chrome headless"); options.addArguments("--headless"); } options.addArguments("--disable-search-engine-choice-screen"); options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems options.addArguments("start-maximized"); // open Browser in maximized mode options.addArguments("disable-infobars"); // disabling infobars options.addArguments("--disable-extensions"); // disabling extensions options.addArguments("--disable-gpu"); // applicable to windows os only options.addArguments("--no-sandbox"); // Bypass OS security model if(browserpath != null && !browserpath.isBlank()){ options.setBinary(browserpath); } Main.printf("Start Chromedriver..."); this.driver = new ChromeDriver(options); DevTools devTools = ((HasDevTools) driver).getDevTools(); devTools.createSession(); devTools.send(Emulation.setDeviceMetricsOverride( 500, // width 600, // height 50, // deviceScaleFactor true, // mobile Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty() )); String script = "window.was_here=true; console.log('Script executed');"; ScriptIdentifier identifier = devTools .send(Page.addScriptToEvaluateOnNewDocument(script, // source Optional.empty(), // worldName Optional.of(false), // includeCommandLineAPI Optional.of(false) // runImmediately )); System.err.println(String.format( "Method Page.addScriptToEvaluateOnNewDocument result: %s", identifier)); driver.navigate().to("https://intoli.com/blog/not-possible-to-block-chrome-headless/chrome-headless-test.html"); try { Thread.sleep(100); // nur zum Test, für sichtbare Effekte } catch (InterruptedException e) { e.printStackTrace(); } Object d = getJSExecutor().executeScript("return window.was_here"); if(d != null){ boolean data = (Boolean) d; Main.printf("Scraper", "DATA:"+(data ? "T" : "F")); }else Main.printf("Scraper", "D IS NULL!!"); devTools.send(Page.removeScriptToEvaluateOnNewDocument(identifier)); try { Thread.sleep(500000); // nur zum Test, für sichtbare Effekte } catch (InterruptedException e) { e.printStackTrace(); } driver.quit(); System.exit(0); Main.printf("Chromedriver started :)");
依赖与版本信息
- Maven Selenium依赖:
- selenium-java:4.25.0
- selenium-devtools-v127:4.25.0
- Chrome浏览器版本:GoogleChromePortable64_127.0.6533.120_online
- Chrome Driver版本:v127
测试代码参考自某开源项目,烦请协助排查addScriptToEvaluateOnNewDocument方法未生效的原因。
内容的提问来源于stack exchange,提问作者felixoben
相关产品推荐
相关产品推荐

