2014-01-26 53 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

相关问题