欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 前端技术 > javascript >内容正文

javascript

htmlunit爬虫工具使用--模拟浏览器发送请求,获取JS动态生成的页面内容

发布时间:2025/7/25 javascript 56 豆豆
生活随笔 收集整理的这篇文章主要介绍了 htmlunit爬虫工具使用--模拟浏览器发送请求,获取JS动态生成的页面内容 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

Htmlunit是一款模拟浏览抓取页面内容的java框架,具有js解析引擎(rhino),可以解析页面的js脚本,得到完整的页面内容,特殊适合于这种非完整页面的站点抓取。

下载地址:

  https://sourceforge.net/projects/htmlunit/files/htmlunit/

 

maven地址:

<dependency><groupId>net.sourceforge.htmlunit</groupId><artifactId>htmlunit</artifactId><version>2.18</version></dependency>

 

 

代码的实现非常简单,主要分为两种常用场景:

  • 解析页面的js
  • 不解析页面的js
  •  

    package cn.qlq.craw.httpunit;import com.gargoylesoftware.htmlunit.BrowserVersion; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlPage; /*** httpunit爬虫* @author liqiang**/ public class HttpUnitCraw { public static void main(String[] args) throws Exception { HttpUnitCraw crawl = new HttpUnitCraw(); String url = "http://qiaoliqiang.cn/"; System.out.println("----------------------抓取页面时不解析js-----------------"); crawl.crawlPageWithoutAnalyseJs(url); System.out.println("----------------------抓取页面时解析js-------------------"); crawl.crawlPageWithAnalyseJs(url);} /** * 功能描述:抓取页面时不解析页面的js * @param url * @throws Exception */ public void crawlPageWithoutAnalyseJs(String url) throws Exception{ //1.创建连接client WebClient webClient = new WebClient(BrowserVersion.CHROME); //2.设置连接的相关选项 webClient.getOptions().setCssEnabled(false); webClient.getOptions().setJavaScriptEnabled(false); webClient.getOptions().setTimeout(10000); //3.抓取页面 HtmlPage page = webClient.getPage(url); System.out.println(page.asXml()); //4.关闭模拟窗口 webClient.closeAllWindows(); } /** * 功能描述:抓取页面时并解析页面的js * @param url * @throws Exception */public void crawlPageWithAnalyseJs(String url) throws Exception{ //1.创建连接client WebClient webClient = new WebClient(BrowserVersion.CHROME); //2.设置连接的相关选项 webClient.getOptions().setCssEnabled(false); webClient.getOptions().setJavaScriptEnabled(true); //需要解析js webClient.getOptions().setThrowExceptionOnScriptError(false); //解析js出错时不抛异常 webClient.getOptions().setTimeout(10000); //超时时间 ms //3.抓取页面 HtmlPage page = webClient.getPage(url); //4.将页面转成指定格式 webClient.waitForBackgroundJavaScript(10000); //等侍js脚本执行完成 System.out.println(page.asXml()); //5.关闭模拟的窗口 webClient.closeAllWindows(); } } 主要关注webClient的几个选项配置, webClient.getOptions().setJavaScriptEnabled(true); //需要解析js webClient.getOptions().setThrowExceptionOnScriptError(false); //解析js出错时不抛异常

     

    需要将这两个开关打开才可以解析页面的js,css的渲染默认关掉就可以,因为爬虫本身没有界面,所以这块不需要,即下面的配置: webClient.getOptions().setCssEnabled(false);

     

     

    htmlunit在解析js的时候也有可能失败,这块还没有深入研究,后续使用遇到问题再记录 抓取到的内容默认以xml形式获得,即page.asXml(), 因为这样可以通过jsoup去解析html页面数据,jsoup是一个比较方便简洁的工具.

     

    总结

    以上是生活随笔为你收集整理的htmlunit爬虫工具使用--模拟浏览器发送请求,获取JS动态生成的页面内容的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。