2014-05-05 32 views
5

我期待從一組網頁中收集信息,這些網頁的格式都非常相似。我需要一些打開後通過Javascript加載到頁面上的信息。看起來HTMLUnit是一個非常常見的工具,所以這就是我正在使用的工具。不幸的是,這很慢,這是我在很多論壇上看到的投訴。 webClient.getPage()命令是永恆的。當我關閉Javascript時,它運行得很快,但我需要執行一些Javascript命令。我想知道,有沒有辦法選擇性地執行一些JavaScript命令而不是所有的命令?我可以配置HTMLUnit只運行特定的JavaScript進程而不是整個事情嗎?

另外,是否有一個程序比HTMLUnit處理Javascript快得多?

回答

3

排序您可以通過編程方式決定要加載的外部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); 
+0

謝謝,我只是想第二部分,它確實有點幫助。我會明天嘗試第一部分,看看它是如何發展的。任何其他工具的使用想法?這是我的理解,這是一個測試工具包,因此工作緩慢,以處理格式錯誤的代碼。由於我在明確工作的網站上使用它,有沒有更快的工具你知道? –

+0

@ user3598519你也可以試試phantomJS。它非常快。 HtmlUnit雖然有點強大。 –

+0

使用NodeJS怎麼樣?我剛開始閱讀它,它看起來很快,但可能在我不知道的功能方面有限制。對於加載網頁,從頁面運行javascript命令並收集結果的任務,NodeJS會是更快的選擇嗎? –

相關問題