htmlunit爬取Ajax动态生成的网页获取不到生成后的结果的问题的解决

在抓取某个站点的内容时,获取不到js加载后渲染的结果,但是也设置了支持js,支持ajax,并且设置了js执行的等待时间。可仍然获取不到。
后来查看控制台打印的异常信息,发现有一个关于页面js的异常: missing ) after argument list(***********.js #32 );而这个js正是加载的需要抓取的部分。查看32行,控制台打印的该位置内容大致如下:
$('#news_pbl').masonry().masonry('reload');//���娴���版���    });
可见,该部分由于乱码,并没有换行,导致后边的])被注释掉,使得js代码出错,无法加载内容。
于是就尝试是否能修改该js的编码,使其正常执行。
经过查找:
 
webClient.setWebConnection(
new WebConnectionWrapper(wc) {
public WebResponse getResponse(WebRequest request) throws IOException {
               WebResponse response = super.getResponse(request);
               if (request.getUrl().toExternalForm().contains("bfdata.js")) {//bfdata.js是需要修改编码的js,你可以修改该处逻辑
                   String content = response.getContentAsString("GBK");
                   WebResponseData data = new WebResponseData(content.getBytes("UTF-8"),
                           response.getStatusCode(), response.getStatusMessage(), response.getResponseHeaders());
                   response = new WebResponse(data, request, response.getLoadTime());
               }
               return response;
           }
}
);

webClient对象为实例化的WebClient,你可以调试,看用哪种编码.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值