的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; 
     } 
    }; 
+0

你能具体谈谈我如何使用你的代码加载所有的内部JavaScript和加载后执行它们的原页? – Michal