-1

我正在尝试废弃此页面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; 
//                } 
//            }); 

有什么建议么 ?

更新:

*有人建议我通过子类 HttpWebConnection 修改传入的 JavaScript 代码并将 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

4

1 回答 1

0

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

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

我使用 Fiddler 作为代理工具。

于 2013-12-16T07:04:32.257 回答