jvppeteer

fanyong920Apache-2.0活跃维护

用 Java 调用 Chrome 和 Firefox 无头浏览器的 API,方便做网页抓取和自动化操作,省去自己封装浏览器协议。

Java API For Chrome and Firefox

v3.6.5发布于 2026-07-12 07:37 UTC804star171fork同步于 2026-11-07 07:34 UTC

怎么上手

由 README 提炼,执行前请确认
<dependency>
  <groupId>io.github.fanyong920</groupId>
  <artifactId>jvppeteer</artifactId>
  <version>3.6.5</version>
</dependency>
硬件要求按 README 说明

README 未说明

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

用 Java 通过 DevTools 和 WebDriver-bidi 控制 Chrome 与 Firefox 的浏览器自动化库

用 Java 调用 Chrome 和 Firefox 无头浏览器的 API,方便做网页抓取和自动化操作,省去自己封装浏览器协议。

核心能力

  • 通过 DevTools 协议控制 Chrome for Testing
  • 通过 WebDriver-bidi 协议控制 Firefox
  • 默认无头模式运行,可配置为有 UI 模式
  • 支持页面打印 PDF、截图、表单提交等操作
  • 捕获网站 timeline trace 辅助性能分析

容易踩的坑

需自行下载与 Jvppeteer 版本绑定的 Chrome for Testing 或 Firefox,版本不匹配可能出问题;打印 PDF 必须设置 headless=true 并添加 --no-sandbox 启动参数;Firefox 走 WebDriver-bidi,部分功能不支持会抛 UnsupportedOperationException;库仅依赖 SLF4J 接口,不附带日志实现,需自行引入。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v3.6.5
  1. v3.6.5Release 3.6.5最新正式版2026-07-12 · 2026-07-12 07:37 UTC

    具体见CHANGELOG.md

  2. v3.6.4Release 3.6.42026-05-20 · 2026-05-20 04:55 UTC
    查看更新说明

    具体见CHANGELOG.md

  3. v3.6.3Release 3.6.32026-04-26 · 2026-04-26 07:58 UTC
    查看更新说明

    具体见CHANGELOG.md

  4. v3.6.2Release 3.6.22026-03-19 · 2026-03-19 11:07 UTC
    查看更新说明

    具体见CHANGELOG.md

  5. v3.6.1Release 3.6.12025-12-28 · 2025-12-28 09:22 UTC
    查看更新说明

    具体见CHANGELOG.md

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    Jvppeteer

    Java API For Chrome and Firefox

    Jvppeteer 通过 DevTools and WebDriver-bidi 控制 Chrome for Testing(下面简称 Chrome)或 Firefox。 默认情况下,以 headless (无 UI)模式运行,也可以通过配置运行'有UI'模式。

    目前,Jvppeteer 控制 Chrome 仅支持通过 DevTools 、控制 Firefox 仅支持 WebDriver-bidi 。WebDriver-bidi 并不支持所有函数,不支持的功能 会抛出 UnsupportedOperationException, WebDriver-bidi 支持的函数查看: WebDriver BiDi 支持

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

    • 生成页面 PDF。
    • 抓取 SPA(单页应用)并生成预渲染内容(即“SSR”(服务器端渲染))。
    • 自动提交表单,进行 UI 测试,键盘输入等。
    • 创建一个时时更新的自动化测试环境。 使用最新的 JavaScript 和浏览器功能直接在最新版本的 Chrome 中执行测试。
    • 捕获网站的 timeline trace,用来帮助分析性能问题。
    • 测试浏览器扩展。

    开始使用

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

    Maven

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

    <dependency>
      <groupId>io.github.fanyong920</groupId>
      <artifactId>jvppeteer</artifactId>
      <version>3.6.5</version>
    </dependency>
    
    Gradle

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

    mavenCentral()
    

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

    compile "io.github.fanyong920:jvppeteer:3.6.5"
    
    Logging

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

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

    独立 jar

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

    二、快速开始

    1、下载浏览器

    从2.0.0版本开始,Jvppeteer与 Chrome 配合使用, Chrome 使用的是新的无头模式,旧的无头模式现在是一个名为 chrome-headless-shell 的独立程序。无论你使用 Chrome 还是 chrome-headless-shell ,你只要将 headless 设置为 true, Jvppeteer 会自动匹配新的无头模式和旧的无头模式.

    在此版本之前,Jvppeteer 下载并与 Chromium 配合使用。

    2、支持的浏览器版本列表

    每个 Jvppeteer 版本都有一个绑定的浏览器版本,最好采用绑定的浏览器版本使用 Jvppeteer。

    下表提供了 Jvppeteer 版本与绑定的浏览器版本之间的映射。如果没有列出完全匹配的 Jvppeteer 版本,则支持的浏览器版本是紧接在前的版本:

    3.6.3-3.6.5Chrome for Testing 149.0.7798.0 & Firefox stable_149.0
    3.5.0- 3.6.2Chrome for Testing 142.0.7444.175 & Firefox stable_145.0.1
    3.4.0-3.4.2Chrome for Testing 137.0.7151.119 & Firefox stable_139.0.4
    3.3.6-3.3.9Chrome for Testing 135.0.7049.42 & Firefox stable_137.0
    3.3.0--3.3.5Chrome for Testing 133.0.6943.98 & Firefox stable_135.0
    3.0.0--3.2.0Chrome for Testing 131.0.6778.87 & Firefox stable_133.0
    2.2.0--2.2.5Chrome for Testing 130.0.6723.58
    2.1.2Chrome for Testing 128.0.6613.137
    2.1.1Chrome for Testing 128.0.6613.137
    2.1.0Chrome for Testing 128.0.6613.137
    2.0.0Chrome for Testing 128.0.6613.137
    1.1.6Chromium 722234
    1.1.5Chromium 722234
    1.1.4Chromium 722234
    1.1.3Chromium 722234
    1.1.2Chromium 722234
    1、页面打印PDF

    要打印 PDF,请使用 Page.pdf() 。手动在浏览器按Ctrl+P可以预览 PDF,弹出的窗口就是 PDF 样式,把各个选项点一下,看一下预览效果 然后再回来写代码。

        //pdf必须配置headless = true
        launchOptions.setHeadless(true);
        ArrayList<String> args = new ArrayList<>();//添加一些额外的启动参数
        args.add("--no-sandbox");//pdf必须添加这个参数,不然无法打印,具体看这里https://github.com/puppeteer/puppeteer/issues/12470
        launchOptions.setArgs(args);
        Browser cdpBrowser = Puppeteer.launch(launchOptions);
        Page page = cdpBrowser.newPage();
        GoToOptions goToOptions = new GoToOptions();
        goToOptions.setWaitUntil(Collections.singletonList(PuppeteerLifeCycle.NETWORKIDLE));
        page.goTo("https://www.baidu.com/?tn=68018901_16_pg",goToOptions);
        PDFOptions pdfOptions = new PDFOptions();
        pdfOptions.setPath("baidu.pdf");
        pdfOptions.setOutline(true);//生成大纲
        pdfOptions.setFormat(PaperFormats.a4);//A4大小
        pdfOptions.setPrintBackground(true);//打印背景图形,百度一下这个蓝色按钮就显示出来了
        pdfOptions.setPreferCSSPageSize(false);
        pdfOptions.setScale(1.1);//缩放比例1.1
        page.pdf(pdfOptions);
        //关闭浏览器
        cdpBrowser.close();
    

    默认情况下,Page.pdf() 等待字体加载。

    2、页面截图

    要捕获屏幕截图,请使用 Page.screenshot()。

    	@Test
        public void test3() throws Exception {
            Browser cdpBrowser = Puppeteer.launch(launchOptions);
            Page page = cdpBrowser.newPage();
            page.goTo("https://www.baidu.com/?tn=68018901_16_pg");
            ScreenshotOptions screenshotOptions = new ScreenshotOptions();
            screenshotOptions.setPath("baidu.png");
            screenshotOptions.setOmitBackground(true);
            //全屏截图
            screenshotOptions.setFullPage(true);
            //截图的更多
            screenshotOptions.setCaptureBeyondViewport(true);
            page.screenshot(screenshotOptions);
            cdpBrowser.close();
        }
    
        @Test
        public void test4() throws Exception {
            Browser cdpBrowser = Puppeteer.launch(launchOptions);
            Page page = cdpBrowser.newPage();
            page.goTo("https://www.baidu.com/?tn=68018901_16_pg");
            ScreenshotOptions screenshotOptions = new ScreenshotOptions();
            screenshotOptions.setPath("baidu.png");
            //指定图片类型,path指定的名称中的后缀便不起作用了
            screenshotOptions.setType(ImageType.JPEG);
            //jpg可以设置这个选项
            screenshotOptions.setQuality(80.00);
            //全屏截图
            screenshotOptions.setFullPage(true);
            page.screenshot(screenshotOptions);
            cdpBrowser.close();
        }
    
        @Test
        public void test5() throws Exception {
            Browser cdpBrowser = Puppeteer.launch(launchOptions);
            Page page = cdpBrowser.newPage();
            page.goTo("https://www.baidu.com/?tn=68018901_16_pg");
            ScreenshotOptions screenshotOptions = new ScreenshotOptions();
            screenshotOptions.setPath("baidu.jpeg");
            //指定图片类型,path指定的名称中的后缀便不起作用了
            screenshotOptions.setType(ImageType.WEBP);
            //jpg可以设置这个选项
            screenshotOptions.setQuality(80.00);
            //全屏截图
            screenshotOptions.setFullPage(true);
            page.screenshot(screenshotOptions);
            cdpBrowser.close();
        }
    
    更多的例子请看项目内的example文件夹 点击这里,是入门级别的例子,对如何使用 Jvppeteer 有很大帮助。或者看看本项目的WIKI。

    三、遇到问题怎么办

    如果你在 Linux 上安装 Chrome 并运行 遇到麻烦,或者在某个场景中遇到麻烦,可以 在 Puppeteer(Node.js) 库中的 Troubleshooting 寻找答案,也可以在其 issues 中寻找一些解决问题的思路,或者google baidu puppeteer的解决方案,再应用到你的问题上。

    四、资源

    1. Puppeteer中文文档 : 更加详细的 API 文档 ,多看看了解一下
    2. DevTools Protocol :CDP 协议
    3. 本项目的WIKI: 目前写有一些内容,后续有想到新的,会持续更新
    4. 命令行启动参数大全

    五、执照

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