Javascript HtmlUnit:跳过JS执行
问题:Javascript HtmlUnit:跳过JS执行,javascript,java,htmlunit,Javascript,Java,Htmlunit,问题: 我正在使用HtmlUnit解析JS生成的页面 我必须等到所有的JS都被加载,然后解析页面 所有这些页面共享相同的JS脚本 有一个有问题的脚本无法解析 有问题的脚本不会影响html呈现 我想做什么: 我想检测问题脚本的名称 把这个名字列入黑名单 并跳过它进行进一步分析 这是我用于JS加载的代码 private void waitForJs(WebClient client, HtmlPage page) throws Exception { int maxDelay =
- 我正在使用HtmlUnit解析JS生成的页面李>
- 我必须等到所有的JS都被加载,然后解析页面李>
- 所有这些页面共享相同的JS脚本李>
- 有一个有问题的脚本无法解析
- 有问题的脚本不会影响html呈现
- 我想检测问题脚本的名称
- 把这个名字列入黑名单
- 并跳过它进行进一步分析
private void waitForJs(WebClient client, HtmlPage page) throws Exception {
int maxDelay = 1000;
int attempts = 10;
int i = client.waitForBackgroundJavaScript(maxDelay);
while (i > 0 && attempts > 0) {
i = client.waitForBackgroundJavaScript(maxDelay);
if (i == 0) {
break;
}
synchronized (page) {
page.wait(500);
}
log("Waiting for JS (" + i + "), attempts: " + attempts, false);
attempts--;
}
}
我必须引入“尝试”变量,以避免在加载损坏的脚本时卡住。与此相反,我希望将所有有问题的脚本(仍保留在waitForJs中)放到黑名单上,并在将来跳过它们的加载。有可能吗?您可以将JavaScript的内容修改为空字符串,如下所示:
您能否更具体地说明如何使用您的代码加载所有内部Java脚本,并在加载后为原始页面执行它们?
new WebConnectionWrapper(webClient) {
public WebResponse getResponse(WebRequest request) throws IOException {
WebResponse response = super.getResponse(request);
if (request.getUrl().toExternalForm().contains("my_url")) {
String content = response.getContentAsString();
// change content
content = "";
WebResponseData data = new WebResponseData(content.getBytes(),
response.getStatusCode(), response.getStatusMessage(), response.getResponseHeaders());
response = new WebResponse(data, request, response.getLoadTime());
}
return response;
}
};