我想使用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来执行。
答案 0 :(得分:2)
您可以像使用网络驱动程序一样使用PhantomJ: