Селен вебдрайвер. Бесконечная загрузка страницы
Я использую Selenium Webdriver с Firefox для очистки веб-страниц. Иногда веб-браузер ждет бесконечное время для выполнения некоторых чрезмерных запросов (например, к facebook.net).
Я пытался использовать BrowserMob-Proxy для фильтрации этих запросов. Но это не помогло. Эти запросы, даже после получения кода 200 или 404, не прекращаются.
Я думал о некоторой возможности остановить загрузку веб-браузера через некоторое время. Например:
try {
Thread.sleep(5000);
} catch (InterruptedException ex) {
Thread.currentThread().interrupt(); }
((JavascriptExecutor) driver).executeScript("window.stop();");
Но это не работает, пока веб-страница не загружается полностью.
Что вы можете предложить мне сделать в моем случае?
PS Это код с использованием параметра pageLoadTimeout.
WebDriver driver;
FirefoxBinary firefox;
FirefoxProfile customProfile;
public static void main(String[] args) {
openFirefox();
for (String url : listOfUrls) {
Boolean pageLoaded = false;
while (pageLoaded == false) {
try {
driver.get(url);
pageLoaded = true;
} catch (org.openqa.selenium.TimeoutException ex) {
System.out.println("Got TimeoutException on page load. Restarting browser...");
restartFirefox();
}
}
//here I do something with a content of a webpage
}
}
public static void openFirefox(){
firefox = new FirefoxBinary(new File(Constants.PATH_TO_FIREFOX_EXE));
customProfile = new FirefoxProfile();
customProfile.setAcceptUntrustedCertificates(true);
customProfile.setPreference("webdriver.load.strategy", "unstable");
driver = new FirefoxDriver(firefox, customProfile);
driver.manage().deleteAllCookies();
driver.manage().timeouts().pageLoadTimeout(60, TimeUnit.SECONDS);
}
private static void restartFirefox() {
driver.close();
firefox.quit();
openFirefox();
}
1 ответ
Как насчет использования тайм-аутов? Так что для каждого
WebDriver
экземпляр, который вы используете, необходимо установить:WebDriver.Timeouts pageLoadTimeout (долгое время, модуль java.util.concurrent.TimeUnit)
Который по документации:
Задает время ожидания завершения загрузки страницы, прежде чем выдать ошибку. Если время ожидания отрицательное, загрузка страниц может быть неопределенной.
Parameters: time - The timeout value. unit - The unit of time. Returns: A Timeouts interface.
Я пытался использовать BrowserMob-Proxy для фильтрации этих запросов. Но это не помогло. Эти запросы, даже после получения кода 200 или 404, не прекращаются.
Что значит "не помог". Я тебе не верю. Пожалуйста, поделитесь своим кодом для внесения в черный список URL. Например, следующий код вернул мне HTTP.200 для любого сайта, связанного с Google Analytics.
server.blacklistRequests("https?://.*\\.google-analytics\\.com/.*", 200); // server is bmp proxy server
- Я слышал, что
WebDriver
теперь должен иметьwebdriver.load.strategy
, Я никогда не использовал это все же. Таким образом, поведение WebDrivers по умолчанию блокирует вызовы (a'laget()
) ждатьdocument.readyState
бытьcomplete
, но я прочитал, что с этим свойством вы можете сказать водителю, чтобы он вернулся сразу. Так что, может быть, стоит поискать это на некоторое время.