Webページをスクレイピングするために、FirefoxでSelenium Webdriverを使用しています。Web ブラウザは、過剰なリクエスト (facebook.net など) が完了するまで無限に待機することがあります。
BrowserMob-Proxy を使用してこれらのリクエストをフィルタリングしようとしました。しかし、それは役に立ちませんでした。これらのリクエストは、200 または 404 コードを受信した後でも停止しません。
しばらくすると、Web ブラウザーのページの読み込みを停止する可能性について考えました。例えば:
try {
Thread.sleep(5000);
} catch (InterruptedException ex) {
Thread.currentThread().interrupt(); }
((JavascriptExecutor) driver).executeScript("window.stop();");
ただし、Web ページが完全に読み込まれるまで機能しません。
私の場合、何をするように提案できますか?
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();
}