Селен вебдрайвер. Бесконечная загрузка страницы

Я использую 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 ответ

  1. Как насчет использования тайм-аутов? Так что для каждого WebDriver экземпляр, который вы используете, необходимо установить:

    WebDriver.Timeouts pageLoadTimeout (долгое время, модуль java.util.concurrent.TimeUnit)

Который по документации:

Задает время ожидания завершения загрузки страницы, прежде чем выдать ошибку. Если время ожидания отрицательное, загрузка страниц может быть неопределенной.

Parameters:
time - The timeout value.
unit - The unit of time. Returns:
A Timeouts interface.
  1. Я пытался использовать BrowserMob-Proxy для фильтрации этих запросов. Но это не помогло. Эти запросы, даже после получения кода 200 или 404, не прекращаются.

Что значит "не помог". Я тебе не верю. Пожалуйста, поделитесь своим кодом для внесения в черный список URL. Например, следующий код вернул мне HTTP.200 для любого сайта, связанного с Google Analytics.

server.blacklistRequests("https?://.*\\.google-analytics\\.com/.*", 200); // server is bmp proxy server
  1. Я слышал, что WebDriver теперь должен иметь webdriver.load.strategy, Я никогда не использовал это все же. Таким образом, поведение WebDrivers по умолчанию блокирует вызовы (a'la get()) ждать document.readyState быть complete, но я прочитал, что с этим свойством вы можете сказать водителю, чтобы он вернулся сразу. Так что, может быть, стоит поискать это на некоторое время.
Другие вопросы по тегам