的HtmlUnit:跳过JS执行
问题描述:
问题:使用通过的HtmlUnit JS产生的HtmlUnit:跳过JS执行
- 我解析页面。
- 我必须等到所有JS都加载然后解析页面。
- 所有这些页面共享相同的JS脚本。
- 有一个问题脚本不会解析。
- 有问题的脚本不会影响html呈现。
我想做什么:
- 我要检测的问题脚本的名称。
- 把这个名字放在黑名单上。
- 并跳过它进一步解析。
这是我用来加载JS代码...
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--;
}
}
我不得不intoduce“企图”变量为了不停留在损坏的脚本加载。相反,我希望将所有有问题的脚本(保留在waitForJs中)放在黑名单中,并跳过它们在期货中的加载。可能吗?
答
您可以修改JavaScript的内容为空字符串,如暗示here:
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;
}
};
你能具体谈谈我如何使用你的代码加载所有的内部JavaScript和加载后执行它们的原页? – Michal