【问题标题】:HtmlUnit scraping google+ page javascript. Click show more button not workingHtmlUnit 抓取 google+ 页面 javascript。单击显示更多按钮不起作用
【发布时间】:2013-12-11 19:52:57
【问题描述】:

我正在尝试废弃此页面https://plus.google.com/115016587855962294424/about。 一切正常,但是当我尝试单击显示更多以加载更多评论时,这里没有任何反应是我的代码

final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_24); 
page = webClient.getPage("https://plus.google.com/115016587855962294424/about"); 
assertEquals(200,page.getWebResponse().getStatusCode()); 
assertEquals("OK",page.getWebResponse().getStatusMessage()); 
System.out.println(page.getWebResponse().getStatusCode()); 

点击此处显示更多

HtmlSpan advancedSearchAn = (HtmlSpan) page.getFirstByXPath("//*[@id=\"115016587855962294424-about-page\"]/div/div[1]/div/div/div[2]/div[3]/span[1]"); 
    page = advancedSearchAn.click(); 

但我什至没有尝试过

//            webClient.waitForBackgroundJavaScript(10 * 1000); 
//            webClient.setAjaxController(new NicelyResynchronizingAjaxController()); 
//            webClient.setAjaxController(new AjaxController(){ 
//                @Override 
//                public boolean processSynchron(HtmlPage page, WebRequest request, boolean async) 
//                { 
//                    return true; 
//                } 
//            }); 

有什么建议吗?

更新:

*有人建议我修改传入的 JavaScript 代码 经过 子类 HttpWebConnection 并将 getResponse() 覆盖为:*

new WebConnectionWrapper(webClient) { 
         public WebResponse getResponse(WebRequest request) throws IOException { 
      // System.out.println("content"); 
            WebResponse response = super.getResponse(request); 
        if          (request.getUrl().toExternalForm().contains("https://plus.google.com/115016587855962294424/about")) { 
           String content = response.getContentAsString("UTF-8"); 

        //change content -- what is need to be changed 

          System.out.println("content "+content); 
                   WebResponseData data = new WebResponseData(content.getBytes("UTF-8"), 
                           response.getStatusCode(), response.getStatusMessage(), response.getResponseHeaders()); 
                   response = new WebResponse(data, request, response.getLoadTime()); 
               } 
               System.out.println("content "+response.getContentAsString()); 
               return response; 
           } 

关于如何准确完成以及需要修改什么的任何建议,我尝试了以下 API 的 htmlunit jsoup webharvest selenium

【问题讨论】:

    标签: selenium web-scraping jsoup htmlunit webharvest


    【解决方案1】:

    单击更多会导致提交 ajax 请求,返回时会更改 DOM

    Htmlunit's javascript 支持不好,所以只需使用代理工具分析正在发送的请求并手动编码即可。

    我使用 Fiddler 作为代理工具。

    【讨论】:

    • 好吧,这是我在发布问题之前尝试的第一件事,我认为每次请求都包含差异 id 的问题可能不是原因,例如 google.com/_/pages/local/loadreviews? ozv=es_oz_20131215.09_p2&avw=pr%3Apr&f.sid=-6382787331828227490&_reqid=651070&rt=j) #reqid=651070# 是随机的并且与每个请求不同@coding_idiot
    猜你喜欢
    • 2021-12-10
    • 1970-01-01
    • 2021-07-26
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    • 1970-01-01
    相关资源
    最近更新 更多