gpt4 book ai didi

java - 我可以将 HTMLUnit 配置为只运行特定的 javascript 进程而不是整个过程吗?

转载 作者:搜寻专家 更新时间:2023-10-31 20:20:16 25 4
gpt4 key购买 nike

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

或者,有没有比 HTMLUnit 处理 Javascript 快得多的程序?

最佳答案

有点。您可以通过编程方式决定加载哪些外部 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);
}
});

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

    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);

关于java - 我可以将 HTMLUnit 配置为只运行特定的 javascript 进程而不是整个过程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23482544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com