【问题标题】:Get XPath of a Facebook page post using HtmlUnit使用 HtmlUnit 获取 Facebook 页面帖子的 XPath
【发布时间】:2014-01-26 03:13:41
【问题描述】:

我想使用 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。 我只想获取包含带有文本的帖子的跨度的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);
        }
    }

问题似乎是 page1 具有静态 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 中的注释。但是通过检查元素进行检查时,它显示为正常。因此它的动态未注释。在加载了所有动态内容之后,我是否无法让 page1 的 html 处于该状态,以便我可以正确获取 xpath?可以使用 selenium web-driver 来完成吗?

【问题讨论】:

  • @MostyMostacho 你能帮忙吗?

标签: javascript ajax facebook selenium-webdriver htmlunit


【解决方案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。

【讨论】:

  • 感谢您的快速回复!我赞成你的回答,因为它真的很酷。但是,如果您在 facebook 页面中看到代码,我不知道等待执行的 javascript 函数。现在需要我做进一步的功课!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-26
相关资源
最近更新 更多