我可以将HTMLUnit配置为仅运行特定的javascript进程而不是整个事件吗?

Sam*_*bel 5 java htmlunit

我希望从一组网页中收集信息,这些网页的格式非常相似.我需要在打开后通过Javascript加载到页面上的一些信息.似乎HTMLUnit是一个非常常见的工具,所以我正在使用它.不幸的是,这很慢,这是我在许多论坛上看到的抱怨.webClient.getPage()命令是永远的.当我关闭Javascript时,它运行得很快,但我需要执行一些Javascript命令.我想知道,有没有办法有选择地执行一些Javascript命令而不是所有命令?

或者,是否有一个比HTMLUnit快得多的程序来处理Javascript?

Nei*_*gan 4

有点。您可以通过编程方式决定要加载哪些外部 JavaScript URL:

如果启用了 JavaScript,HtmlUnit 将运行页面上嵌入的所有 JS。但是,如果不需要某些外部 URL,您可以选择不加载它们。

下面是一些可以帮助您入门的代码:

    webClient.setWebConnection(new FalsifyingWebConnection(webClient) {
        @Override
        public WebResponse getResponse(WebRequest request) throws IOException {

            if(request.getUrl().getPath().toLowerCase().equals("some url i don't need ")) {
                return createWebResponse(request, "", "application/javascript");
            }

            return super.getResponse(request);
        }
    });
Run Code Online (Sandbox Code Playgroud)

设置以下内容也可能会加快速度:

    java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(Level.OFF); 

    webClient.setCssErrorHandler(new SilentCssErrorHandler());

    webClient.setIncorrectnessListener(new IncorrectnessListener() {
        @Override
        public void notify(String s, Object o) { }
    });

    webClient.getCookieManager().setCookiesEnabled(false);
    webClient.getOptions().setCssEnabled(false);
    webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
    webClient.getOptions().setThrowExceptionOnScriptError(false);
    webClient.getOptions().setPrintContentOnFailingStatusCode(false);
Run Code Online (Sandbox Code Playgroud)