【JAVA】【获取vue页面】什么,不支持vue页面的内容获取,支持的来了,还不需要额外安装浏览器。
来源地址:https://juejin.cn/post/7032620393622044686【每日一点事】毛豆和黄豆其实是一个东西,毛豆是年轻的时候,黄豆是已经年老的时候。一、前言最近,一个网友问,怎么想做个数据调查报告,都被页面加载403、页面内容加载不到、vue页面劝退。什么?这点小事还解决不了?vue页面不支持?我立马甩了这篇代码给他!vue页面403页面二、代码分析没改代码前的代码(获取
·
来源地址:https://juejin.cn/post/7032620393622044686
【每日一点事】
毛豆和黄豆其实是一个东西,毛豆是年轻的时候,黄豆是已经年老的时候。
一、前言
最近,一个网友问,怎么想做个数据调查报告,都被页面加载403、页面内容加载不到、vue页面劝退。什么?这点小事还解决不了?vue页面不支持?我立马甩了这篇代码给他!
vue页面
403页面
二、代码分析
没改代码前的代码(获取不到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);
}
结果展示
三、结论
在页面请求中,会存在http(s)证书是否有效问题,也会存在重定向(403)页面,并且还有存在页面是靠js动态渲染的(vue页面)。因此,在获取页面内容中,我们需要考虑的诸多问题。
HtmlUnit都解决了这些问题,并且不需要像其他工具类那样,需要再配合浏览器,安装一个浏览器装置等等。总得来说,HtmlUnit功能很全,使用起来也很方便!
【最后】
感谢你看到最后,如果你持有不同的看法,欢迎你在文章下方进行留言、评论。
我是南方者,一个热爱计算机更热爱祖国的南方人。
如果文章内容仅供学习参考,如有侵权,非常抱歉,请立即联系作者删除。
更多推荐
已为社区贡献1条内容
所有评论(0)