2014-01-26 81 views
0

我想使用HtmlUnit獲取facebook帖子的xpath。您可以參考這兩個問題我們就可以得到我想要做更多的想法:使用HtmlUnit獲取Facebook頁面帖子的XPath

  1. Supernatural behaviour with a facebook page
  2. HtmlUnit commenting out lines of facebook page

爲了模仿我做什麼,你可以按照Q-1。 HTML代碼(facebook頁面)的pastebin鏈接是http://pastebin.com/MfXsYSJQ

或者只是你可以去https://www.facebook.com/bhramakarserver。 我只想獲得包含帖子文本的span的xpath:「嗨!這是此頁面的第一篇文章。」 我試過是這樣的:

public class ForStackOverflow { 
     public static void main(String[] args) throws IOException { 
      WebClient client=new WebClient(BrowserVersion.FIREFOX_17); 
      client.getOptions().setJavaScriptEnabled(true); 
      client.getOptions().setRedirectEnabled(true); 
      client.getOptions().setThrowExceptionOnScriptError(true); 
      client.getOptions().setCssEnabled(true); 
      client.getOptions().setUseInsecureSSL(true); 
      client.getOptions().setThrowExceptionOnFailingStatusCode(false); 
      client.setAjaxController(new NicelyResynchronizingAjaxController()); 

      HtmlPage page1=client.getPage("https://www.facebook.com/bhramakarserver"); 
      System.out.println(page1.asXml()); 
      //getting the xpath of span of class="userContent" 
      HtmlInput input=(HtmlInput)page1.getByXPath("/html/body//input[@type='submit']").get(0); 
      System.out.println(input.asXml()); 
//This line gives error as the xpath evaluates to null 
      HtmlSpan span=(HtmlSpan)page1.getByXPath("/html/body//span[@class='userContent']").get(0); 
     } 
    } 

,這似乎是在第1頁有靜態html的問題。在此,span元素:

<span data-ft="&#123;&quot;tn&quot;:&quot;K&quot;&#125;" class="userContent">Hi! this is the first post of this page.</span> 

是動態生成的。因此,它看起來像在page1的html中註釋,但通過檢查元素進行檢查時,它顯示爲正常。因此,它的動態uncommented.Is沒有辦法,我可以讓page1的html在所有的動態內容已被加載後處於狀態,以便我可以正確地獲得xpath?可以使用硒驅動程序完成嗎?

+0

@MostyMostacho可以幫忙嗎? – rahulserver

回答

1

鑑於這些信息,假設某些AJAX調用未被觸發或者您沒有正確等待AJAX​​執行似乎是公平的。我沒有得到使用AJAX控制器的最佳結果。可悲的是,循環通常是最好的方式。

我已經解釋瞭如何做,在這個問題:Get the changed HTML content after it's updated by Javascript? (htmlunit)

如果不這樣做的伎倆,那麼很可能你得到的JavaScript異常。我已經寫了一些可能的解決方法,在這種情況下,在另一個問題:How to overcome an HTMLUnit ScriptException?

如果這些工作都沒有......那麼我建議使用其他東西,而不是HTMLUnit。任何真正的瀏覽器驅動器都可以實現。或者可以使用PhantomJS或ZombieJS等其他選擇。

+0

感謝您的快速響應!我已經提出了你的答案,因爲它非常酷。但是,如果你看到Facebook頁面中的代碼,我不知道什麼JavaScript功能等待執行。現在需要進一步的作業! – rahulserver

相關問題