Jvppeteer

本库的灵感来自 Puppeteer(Node.js), API 也与其基本上保持一致,做这个库是为了方便使用 Java 操控 Chrome 或 Chromium

Jvppeteer 通过 DevTools 控制 Chromium 或 Chrome。

默认情况下,以 headless 模式运行,也可以通过配置运行'有头'模式。

你可以在浏览器中手动执行的绝大多数操作都可以使用 Jvppeteer 来完成! 下面是一些示例:

生成页面 PDF。

抓取 SPA(单页应用)并生成预渲染内容(即“SSR”(服务器端渲染))。

自动提交表单,进行 UI 测试,键盘输入等。

创建一个时时更新的自动化测试环境。 使用最新的 JavaScript 和浏览器功能直接在最新版本的 Chrome 中执行测试。

捕获网站的 timeline trace,用来帮助分析性能问题。

测试浏览器扩展。

开始使用

以下是使用依赖管理工具(如 maven 或 gradle)的简要指南。

Maven

要使用 maven,请将此依赖添加到pom.xml文件中:

io.github.fanyong920

jvppeteer

1.0.4

Gradle

要使用 Gradle,请将 Maven 中央存储库添加到您的存储库列表中:

mavenCentral()

然后,您可以将最新版本添加到您的构建中。

compile "io.github.fanyong920:jvppeteer:1.0.4"

Logging

该库使用 SLF4J 进行日志记录,并且不附带任何默认日志记录实现。

调试程序将日志级别设置为 TRACE。

独立 jar

如果您不使用任何依赖项管理工具,则可以在此处找到最新的独立 jar 。

快速开始

1、启动浏览器

//设置基本的启动配置,这里选择了‘有头’模式启动

ArrayList argList = new ArrayList<>();

String path = "D:\\develop\\project\\toString\\chrome-win\\chrome.exe";

LaunchOptions options = new LaunchOptionsBuilder().withArgs(argList).withHeadless(false).withPipe(true).withExecutablePath(path).build();

argList.add("--no-sandbox");

argList.add("--disable-setuid-sandbox");

//启动

Puppeteer.launch(options);

在这个例子中,我们明确指明了启动路径,程序就会根据指明的路径启动对应的浏览器,如果没有明确指明路径,那么程序会尝试启动默认安装路径下的 Chrome 浏览器

2、导航至某个页面

String path ="D:\\develop\\project\\toString\\chrome-win\\chrome.exe";

ArrayList argList = new ArrayList<>();

LaunchOptions options = new LaunchOptionsBuilder().withArgs(argList).withHeadless(false).withExecutablePath(path).build();

argList.add("--no-sandbox");

argList.add("--disable-setuid-sandbox");

Browser browser = Puppeteer.launch(options);

Page page = browser.newPage();

page.goTo("https://www.taobao.com/about/");

browser.close();

这个例子中,浏览器导航到具体某个页面后关闭。在这里并没有指明启动路径。argList是放一些额外的命令行启动参数的,在下面资源章节中我会给出相关资料。

3、生成页面的 PDF

ArrayList argList = new ArrayList<>();

String path = "D:\\develop\\project\\toString\\chrome-win\\chrome.exe";

//生成pdf必须在无厘头模式下才能生效

LaunchOptions options = new LaunchOptionsBuilder().withArgs(argList).withHeadless(true).withExecutablePath(path).build();

argList.add("--no-sandbox");

argList.add("--disable-setuid-sandbox");

Browser browser = Puppeteer.launch(options);

Page page = browser.newPage();

page.goTo("https://www.baidu.com/?tn=98012088_10_dg&ch=3");

page.pdf("test.pdf");

在这个例子中,导航到某个页面后,将整个页面截图,并写成PDF文件。注意,生成PDF必须在headless模式下才能生效

4、TRACING 性能分析

ArrayList argList = new ArrayList<>();

String path = "D:\\develop\\project\\toString\\chrome-win\\chrome.exe";

LaunchOptions options = new LaunchOptionsBuilder().withArgs(argList).withHeadless(true).withExecutablePath(path).build();

argList.add("--no-sandbox");

argList.add("--disable-setuid-sandbox");

Browser browser = Puppeteer.launch(options);

Page page = browser.newPage();

//开启追踪

page.tracing().start("C:\\Users\\howay\\Desktop\\trace.json");

page.goTo("https://www.baidu.com/?tn=98012088_10_dg&ch=3");

page.tracing().stop();

//waifor tracingComplete

在这个例子中,将在页面导航完成后,生成一个 json 格式的文件,里面包含页面性能的具体数据,可以用 Chrome 浏览器开发者工具打开该 json 文件,并分析性能。

5、页面截图

ArrayList arrayList = new ArrayList<>();

String path = "D:\\develop\\project\\toString\\chrome-win\\chrome.exe";

LaunchOptions options = new LaunchOptionsBuilder().withArgs(arrayList).withHeadless(true).withExecutablePath(path).build();

arrayList.add("--no-sandbox");

arrayList.add("--disable-setuid-sandbox");

Browser browser = Puppeteer.launch(options);

Page page = browser.newPage();

page.goTo("https://www.baidu.com/?tn=98012088_10_dg&ch=3");

ScreenshotOptions screenshotOptions = new ScreenshotOptions();

//设置截图范围

Clip clip = new Clip(1.0,1.56,400,400);

screenshotOptions.setClip(clip);

//设置存放的路径

screenshotOptions.setPath("test.png");

page.screenshot(screenshotOptions);

页面导航完成后,设置截图范围以及图片保存路径,即可开始截图。

更多的例子请看这里

资源

执照

此仓库中找到的所有内容均已获得 Apache 许可。有关详细信息,请参见LICENSE文件

java .jvp文件_GitHub - eddylapis/jvppeteer: Headless Chrome For Java (Java 爬虫)相关推荐

  1. 总结java创建文件夹的4种方法及其优缺点-JAVA IO基础总结第三篇

    本文是Java IO总结系列篇的第3篇,前篇的访问地址如下: 总结java中创建并写文件的5种方式-JAVA IO基础总结第一篇 总结java从文件中读取数据的6种方法-JAVA IO基础总结第二篇 ...

  2. .net core + headless chrome实现动态网页爬虫

    一般的http请求库只能够抓取到网页的静态内容,如果想抓取通过js动态生成的内容可以使用没有gui的browser库,之前许多人会使用phantomjs作为headless browser,不过现在p ...

  3. java buffer 记事本_GitHub - programmer-zhang/DuangCalender: 简易日历记事本(java+android端)...

    在设计日历记事本时,需要编写4个Java类:CalendarPad.class.Year.class.NotePad.class.month.class. 日历记事本除了需要编写的上述3个Java所给 ...

  4. java 编译文件 命令,CMD命令行编译运行单个java文件

    java文件中不含包名 这种情况比较简单 public class NoPackage{ public static void main(String[] args){ System.out.prin ...

  5. java 搭建论坛_GitHub - NieShaoLiang/bbs: 基于spring boot的java论坛系统

    JavaBBS社区 简介 1.JavaBBS是一款使用Java编写的简易社区系统. 2.采用前后端分离的机制实现.前台项目通过http访问RESTFulAPI获取信息渲染页面. 3.项目技术分层明显, ...

  6. ant java xml文件,ant 学习(2)-ant开发java程序,buile.xml文件分离

    用Ant 开发java 程序----以及将build.xml文件拆分 用Ant 开发java 程序,以HelloWord 为例 1> 本次实例的目录结构: c:\ant_test 主目录 --- ...

  7. java微信机器人_GitHub - linux-china/weixin-robot-java: 微信公共平台机器人Java SDK

    Weixin robot Java 微信公共平台自动回复机器人的Java SDK,你可以使用SDK简单快速构建微信机器人. 微信Robot Java借鉴了url rewrite的思想,url rewr ...

  8. mac java打包文件_关于macos:使用JarBundler将Java转换为MacOSX的.app文件

    我要做的就是将一个简单的Java程序转换为一个macOSX .app文件,以便我可以将其作为简单的可执行文件分发. 我到处都读过,每个人都说相同的话: 使用Xcode-据我所知,Xcode不再支持Ja ...

  9. java保存文件到linux指定目录_怎么使用java编程实现linux下全部文件目录的遍历

    为了避免目录列举消耗时间过长,请指定一个目录来模拟,命令行参数:代表路径的字符串. 如果认可代码,请加分50,谢谢 ---- import javax.swing.*; import javax.sw ...

最新文章

  1. MATLAB应用实战系列(七十七)-【图像处理】COVID-19 防疫应用口罩检测
  2. nginx 域名配置_nginx 一个域名配置多个vue项目
  3. Java多线程编程递增_java多线程编程之简介
  4. android的颜色渐变动画效果图,Android简单实现一个颜色渐变的ProgressBar
  5. HTTP请求上下文之终结:HttpContext类
  6. 【linux,跟Java初学者分享几点经验
  7. windows技巧——notepad2 取代自带 notepad ,功能强大!
  8. 花费巨资参加SAP培训真的有用吗?
  9. uploadify上传
  10. nginx安装部署ssl证书
  11. 用pip install pqi时报错:parse() got an unexpected keyword argument 'transport_encoding'
  12. python+pytest接口自动化之测试函数、测试类/测试方法的封装
  13. OpenStack的过去、现在和未来
  14. 缺少vcruntime140d.dll的解决办法
  15. 小样本学习之关系网络:让机器自己学习如何度量
  16. nodejs模块加载的猜想
  17. 【BZOJ-28921171】强袭作战大sz的游戏 权值线段树+单调队列+标记永久化+DP...
  18. gaussDB200 单节点安装
  19. Eclipse+Java+Swing+Mysql实现员工工资管理系统
  20. android studio(自带SDK)安装教程

热门文章

  1. [转帖]关于win7共享的问题和解答
  2. 【2022】多线程并发编程面试真题
  3. python 的作用
  4. 学成在线--16.添加课程计划
  5. python中的魔术方法
  6. {%extends bootstrap/base.html%}的添加,使得其他block无法继承
  7. 玩Python遇到的问题一二三及解决办法
  8. 第二季2:/package/mpp/sample的总体分析
  9. 字符设备驱动基础篇2——用开发板来调试驱动模块的步骤
  10. C++远征之封装篇——字符串类型