我使用 Selenium webdriver 和 Firefox 来抓取网页。有时,Web 浏览器会无限期地等待完成一些过多的请求(例如对 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();
}