使用HtmlUnit访问动态网站

时间:2014-11-08 18:24:08

标签: java htmlunit

我想使用API​​访问不使用的Instagram页面。我需要找到关注者的数量,因此它不仅仅是源代码下载,因为页面是动态构建的。

我发现HtmlUnit是一个模拟浏览器的库,因此JS会被渲染,我会找回我想要的内容。

HtmlPage myPage = ((HtmlPage) webClient.getPage("http://www.instagram.com/instagram"));

然而,此调用会导致以下异常:

Exception in thread "main" com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException: 403 Forbidden for http://d36xtkk24g8jdx.cloudfront.net/bluebar/3a30db9/scripts/webfont.js

所以它无法访问该脚本,但如果我正确地解释这个,它只是用于字体加载,我不需要。我用谷歌搜索如何告诉它忽略页面的一部分,并找到this线程。

webClient.setWebConnection(new WebConnectionWrapper(webClient) {
              @Override
              public WebResponse getResponse(final WebRequest request) throws IOException {
                if (request.getUrl().toString().contains("webfont")) {
                  System.out.println(request.getUrl().toString());
                  return super.getResponse(request);
                } else {
                  System.out.println("returning response...");
                  return new StringWebResponse("", request.getUrl());
                }
              }
            });

使用该代码,异常消失,但源(或页面标题,或我尝试过的任何其他内容)似乎是空的。 “返回响应......”打印一次。

我也对不同的方法持开放态度。最终,单个字符串中的整个页面源对我来说已经足够了,但我需要JS来执行。

1 个答案:

答案 0 :(得分:2)

使用JS的HtmlUnit并不是一个好的解决方案,因为Javascript引擎Mozilla Rhino对于许多JS页面不起作用并且存在很多问题。

您可以像使用网络驱动程序一样使用PhantomJ:

PhantomJs