Java 使用HtmlUnit访问动态网站

Java 使用HtmlUnit访问动态网站,java,htmlunit,Java,Htmlunit,我想在不使用API的情况下访问instagram页面。我需要找到关注者的数量,因此它不仅仅是源代码下载,因为页面是动态构建的 我发现HtmlUnit是一个模拟浏览器的库,这样JS就会呈现出来,我就能得到我想要的内容 HtmlPage myPage = ((HtmlPage) webClient.getPage("http://www.instagram.com/instagram")); 但是,此调用会导致以下异常: Exception in thread "main" com.gargoyl

我想在不使用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
所以它无法访问该脚本,但如果我正确解释了这一点,它只是用于字体加载,我不需要。我在谷歌上搜索了如何告诉它忽略页面的某些部分,然后找到了这条线索

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


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

HtmlUnit with JS不是一个好的解决方案,因为许多JS页面的Javascript引擎Mozilla Rhino无法工作,并且有很多问题

您可以像Web驱动程序一样使用PhantomJs:


您是否通过编程方式连接到instagram?你是怎么做到的?我已经尝试过htmlUnit、httpClient、URLConnect,但没有使用Selenium的PhantomJs
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());
                }
              }
            });