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

xiaoxiao2021-02-28  131

在抓取某个站点的内容时,获取不到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,你可以调试,看用哪种编码.
转载请注明原文地址: https://www.6miu.com/read-40625.html

最新回复(0)