【JAVA】【获取vue页面】什么?不支持vue页面的内容获取?支持的来了,还不需要额外安装浏览器!

简介: 【JAVA】【获取vue页面】什么?不支持vue页面的内容获取?支持的来了,还不需要额外安装浏览器!

一、前言


  最近,一个网友问,怎么想做个数据调查报告,都被页面加载403、页面内容加载不到、vue页面劝退。什么?这点小事还解决不了?vue页面不支持?我立马甩了这篇代码给他!vue页面


微信截图_20220519182452.png


403页面

微信截图_20220519182502.png


二、代码分析


没改代码前的代码(获取不到vue页面和403页面)


public static void main(String[] args) {
    // 这里举例找了个vue页面(小牛翻译)的来测试
    String nowHtml = "https://www.niutrans.com";
    URL url;
    try {
      url = new URL(nowHtml);
      URLConnection openConnection = url.openConnection();
      InputStream inputStream = openConnection.getInputStream();
      byte[] b = new byte[1024];
      int len;
      while ((len = inputStream.read(b)) != -1) {
        System.out.println(new String(b, 0, len));
      }
      inputStream.close();
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }


改动后的代码需要的依赖


<!-- 获取页面内容依赖 -->
    <dependency>
      <groupId>net.sourceforge.htmlunit</groupId>
      <artifactId>htmlunit</artifactId>
      <version>2.43.0</version>
    </dependency>


改动后的代码


public static void main(String[] args) {
    // 这里举例找了个vue页面(小牛翻译、b站页面)的来测试
    String nowHtml = "https://www.niutrans.com";
//    String nowHtml = "https://www.bilibili.com";
    getWebBody(nowHtml);
  }
  public static void getWebBody(String nowHtml) {
    WebClient webClient = new WebClient(BrowserVersion.CHROME);
    webClient.getOptions().setActiveXNative(false);// 不启用ActiveX
    webClient.getOptions().setCssEnabled(false);// 是否启用CSS,因为不需要展现页面,所以不需要启用
    webClient.getOptions().setUseInsecureSSL(true); // 设置为true,客户机将接受与任何主机的连接,而不管它们是否有有效证书
    webClient.getOptions().setJavaScriptEnabled(true); // 很重要,启用JS
    webClient.getOptions().setDownloadImages(false);// 不下载图片
    webClient.getOptions().setThrowExceptionOnScriptError(false);// 当JS执行出错的时候是否抛出异常,这里选择不需要
    webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);// 当HTTP的状态非200时是否抛出异常,这里选择不需要
    webClient.getOptions().setTimeout(15 * 1000); // 等待15s
    webClient.getOptions().setConnectionTimeToLive(15 * 1000);
    webClient.waitForBackgroundJavaScript(10 * 1000);// 异步JS执行需要耗时,所以这里线程要阻塞30秒,等待异步JS执行结束
    HtmlPage page = null;
    try {
      page = webClient.getPage(nowHtml);// 加载网页
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      webClient.close();
    }
    String htmlStr = page.getBody().asXml();
    System.out.println(htmlStr);
  }


结果展示


微信截图_20220519182516.png


三、结论


  在页面请求中,会存在http(s)证书是否有效问题,也会存在重定向(403)页面,并且还有存在页面是靠js动态渲染的(vue页面)。因此,在获取页面内容中,我们需要考虑的诸多问题。

  HtmlUnit都解决了这些问题,并且不需要像其他工具类那样,需要再配合浏览器,安装一个浏览器装置等等。总得来说,HtmlUnit功能很全,使用起来也很方便!


【最后】


  感谢你看到最后,如果你持有不同的看法,欢迎你在文章下方进行留言、评论。

我是南方者,一个热爱计算机更热爱祖国的南方人。


文章内容仅供学习参考,如有侵权,非常抱歉,请立即联系作者删除。

目录
相关文章
|
7天前
|
JavaScript 前端开发 Java
|
1天前
|
Web App开发 JavaScript 前端开发
如何在浏览器中安装使用Vue开发者工具?Vue开发者工具的安装使用?可直接提取插件安装使用
这篇文章介绍了如何在浏览器中安装和使用Vue开发者工具,提供了两种下载方式,包括直接下载编译好的插件和从GitHub上下载源代码后进行打包。文章还详细说明了在Chrome浏览器中加载插件的步骤,以及插件在Vue项目和非Vue项目中的不同表现。
如何在浏览器中安装使用Vue开发者工具?Vue开发者工具的安装使用?可直接提取插件安装使用
|
7天前
|
JavaScript
VUE——如何兼容IE9|IE10|IE11浏览器
VUE——如何兼容IE9|IE10|IE11浏览器
18 0
VUE——如何兼容IE9|IE10|IE11浏览器
|
12天前
|
Web App开发 资源调度 前端开发
electron 中如何安装或更新 vuejs-devtool 最新稳定版
electron 中如何安装或更新 vuejs-devtool 最新稳定版
|
22天前
|
JavaScript
vue 中安装并使用echart
vue 中安装并使用echart
22 2
|
7天前
|
JavaScript 前端开发 网络协议
WebSocket在Java Spring Boot+Vue框架中实现消息推送功能
在现代Web应用中,实时消息提醒是一项非常重要的功能,能够极大地提升用户体验。WebSocket作为一种在单个TCP连接上进行全双工通信的协议,为实现实时消息提醒提供了高效且低延迟的解决方案。本文将详细介绍如何在Java Spring Boot后端和Vue前端框架中利用WebSocket实现消息提醒功能。
20 0
|
7天前
|
JavaScript API
VUE——监听浏览器关闭及标签页关闭事件
VUE——监听浏览器关闭及标签页关闭事件
14 0
|
1月前
|
存储 缓存 JavaScript
|
1月前
|
Web App开发 XML Java
《手把手教你》系列基础篇(九十六)-java+ selenium自动化测试-框架之设计篇-跨浏览器(详解教程)
【7月更文挑战第14天】这篇教程介绍了如何使用Java和Selenium构建一个支持跨浏览器测试的自动化测试框架。设计的核心是通过读取配置文件来切换不同浏览器执行测试用例。配置文件中定义了浏览器类型(如Firefox、Chrome)和测试服务器的URL。代码包括一个`BrowserEngine`类,它初始化配置数据,根据配置启动指定的浏览器,并提供关闭浏览器的方法。测试脚本`TestLaunchBrowser`使用`BrowserEngine`来启动浏览器并执行测试。整个框架允许在不同浏览器上运行相同的测试,以确保兼容性和一致性。
47 3
|
1月前
|
Web App开发 安全 Linux
Linux系统之安装Firefox浏览器
【7月更文挑战第8天】Linux系统之安装Firefox浏览器
63 8