Anonymous
Java Selenium DevTools v127
Сообщение
Anonymous » 25 окт 2024, 19:48
В настоящий момент я работаю в Java над веб-скребком с селеном и хочу добавить код JavaScript перед загрузкой любого веб-сайта, чтобы можно было переопределить некоторые методы... Я хотел использовать DevTools, но, к сожалению, у меня нет эффекта addScriptToEvaluateOnNewDocument... Но этот код каким-то образом работает, поэтому я предполагаю, что зависимости 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 Драйвер: v127 (
https://datatoolbar.com/downloads/Drivers/chrome.127/ )
Может ли кто-нибудь сказать мне, почему мой тестовый код не работает, я скопировал тест из этот проект
Подробнее здесь:
https://stackoverflow.com/questions/791 ... tools-v127
1729874881
Anonymous
В настоящий момент я работаю в Java над веб-скребком с селеном и хочу добавить код JavaScript перед загрузкой любого веб-сайта, чтобы можно было переопределить некоторые методы... Я хотел использовать DevTools, но, к сожалению, у меня нет эффекта addScriptToEvaluateOnNewDocument... Но этот код каким-то образом работает, поэтому я предполагаю, что зависимости DevTools верны. [code]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() )); [/code] Полный тестовый код: [code]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 :)"); [/code] Зависимости Maven Selenium: [list] [*]selenium-java:4.25.0 [*]selenium-devtools-v127:4.25.0 [/list] Браузер Chrome: GoogleChromePortable64_127.0.6533.120_online Chrome Драйвер: v127 (https://datatoolbar.com/downloads/Drivers/chrome.127/) Может ли кто-нибудь сказать мне, почему мой тестовый код не работает, я скопировал тест из этот проект Подробнее здесь: [url]https://stackoverflow.com/questions/79126626/java-selenium-devtools-v127[/url]