【问题标题】:HtmlUnit 2.17 have issues with Java 7HtmlUnit 2.17 与 Java 7 存在问题
【发布时间】:2015-06-18 02:39:39
【问题描述】:

我的此代码适用于 Java6,但不适用于 Java7。 我同时使用了 HtmlUnit2.12 和 HtmlUnit2.17,没有任何效果。请建议我在这里缺少什么?

从 Java7 我得到这个异常:java.net.SocketTimeoutException: Read timed out

import java.io.IOException;
import java.net.MalformedURLException;

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

public class Test {
    public static void main(String[] args) throws FailingHttpStatusCodeException, MalformedURLException, IOException {
        String url = "http : / / kellyserviceshk . force . com / careers";
        String content = fetchPage(url, "firefox", 30000, true);
        System.out.println(content);
    }

    private static String fetchPage(String url, String browser, long delayinmillis, boolean javaScriptEnable) {
        WebClient webClient = new WebClient(BrowserVersion.FIREFOX_17);
        webClient.getOptions().setCssEnabled(false);
        webClient.getOptions().setThrowExceptionOnScriptError(false);
        webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
        webClient.getOptions().setUseInsecureSSL(true);
        webClient.getCookieManager().setCookiesEnabled(true);
        webClient.getOptions().setJavaScriptEnabled(javaScriptEnable);
        webClient.setAjaxController(new NicelyResynchronizingAjaxController());

        String content="";
        try {               
            HtmlPage page = webClient.getPage(url);
            webClient.waitForBackgroundJavaScript(delayinmillis);
            content = page.asXml();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if(webClient!=null){
                webClient.closeAllWindows();
                webClient=null;
            }

        }
        return content;
    }

}

在更改 HtmlUnit2.17 时,我使用 BrowserVersion 作为 FIREFOX_38,而不是 FIREFOX_17。 我应该做出哪些改变?

【问题讨论】:

    标签: java web-crawler htmlunit htmlunit-driver


    【解决方案1】:

    你可以尝试定义超时时间:

    webClient.getOptions().setTimeout(0); // zero for an infinite wait. (time in milliseconds)
    

    默认超时为 90 秒(在 HtmlUnit-2.11 之前为 0)。

    【讨论】:

    • 只是一个观察:根据您的情况,冷更改此选项是危险的。我和OP有同样的问题。在我.setTimeout(0) 之后,我的一项测试的运行时间从几分钟缩短到几小时!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    相关资源
    最近更新 更多