2015-07-06 3 views
2

Я пытаюсь использовать HtmlUnit для обнаружения ресурсов (скриптов, изображений, таблиц стилей и т. Д.), Которые не загружаются на веб-странице.Могу ли я использовать HtmlUnit для прослушивания событий загрузки ресурсов?

Я попытался

new WebConnectionWrapper(webClient) { 
    @Override 
    public WebResponse getResponse(WebRequest request) throws IOException { 
     WebResponse response; 
     response = super.getResponse(request); 
     System.out.println(response.getStatusCode()); 
     return response; 
    } 
}; 

безрезультатно. Это, кажется, не обрабатывать CSS, изображения или JS, несмотря на HtmlUnit протоколирования:

StatusCode = [404] CONTENTTYPE = [текст/html] файла: /resources/style.css

для справки, вот файл Я загрузка:

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Test</title> 
     <script type='text/javascript'> 
      var xhr = new XMLHttpRequest(); 
      xhr.open("get", "someBadLink", true); 
      xhr.send(); 
     </script> 
     <link href="/resources/style.css" rel="stylesheet"/> 
    </head> 

    <body> 
     <img src="bad_image.png"> 
    Cool. 
    </body> 
</html> 

есть ли способ использовать HtmlUnit обнаружить ресурс AJAX, CSS скрипт и изображение, что все 404?

ответ

1
  • Для AJAX вам нужно подождать как указано here.
  • HtmlUnit автоматически не загружает HtmlLink и HtmlImage, из соображений удобства.
  • Ниже приведен фрагмент, который будет печатать все. Вы можете использовать .getByXPath(), чтобы получить список всех элементов.


public static void main(String[] args) throws Exception { 
    try (final WebClient webClient = new WebClient()) { 

     new WebConnectionWrapper(webClient) { 
      @Override 
      public WebResponse getResponse(WebRequest request) throws IOException { 
       WebResponse response = super.getResponse(request); 
       System.out.println(request.getUrl()); 
       System.out.println(response.getStatusCode()); 
       return response; 
      } 
     }; 

     String url = "http://localhost/test.html"; 
     HtmlPage page = webClient.getPage(url); 

     // to wait for AJAX 
     webClient.waitForBackgroundJavaScript(3000); 

     // to forcibly load the link 
     HtmlLink link = page.getFirstByXPath("//link"); 
     link.getWebResponse(true); 

     // to forcibly load the image 
     HtmlImage image = page.getFirstByXPath("//img"); 
     image.getImageReader(); 
    } 
} 
Смежные вопросы