Java 爬虫 jvppeteer

开源地址https://gitee.com/fanyong920/jvppeteer

maven依赖:

复制代码
        <!-- java爬虫 -->
        <dependency>
            <groupId>io.github.fanyong920</groupId>
            <artifactId>jvppeteer</artifactId>
            <version>1.1.3</version>
        </dependency>

首次先下载Chrome启动器:

//自动下载,第一次下载后不会再下载

//BrowserFetcher.downloadIfNotExist(null);

如果失败按命令提示手动下载安装即可。

常用示例代码:

复制代码
package com.java.jvppeteer.controller;

import com.java.jvppeteer.service.CommonService;
import com.ruiyun.jvppeteer.core.Puppeteer;
import com.ruiyun.jvppeteer.core.browser.Browser;
import com.ruiyun.jvppeteer.core.page.Page;
import com.ruiyun.jvppeteer.options.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;

@RestController
@RequestMapping(value = "/common")
public class CommonController {

    @PostMapping("/hello")
    public ResponseEntity<?> sayHello() {
        String value = "hello world!";
        return new ResponseEntity<>(value, HttpStatus.OK);
    }

    /**
     * 启动浏览器
     */
    @GetMapping("/start")
    public void start() {
        try {
            //设置基本的启动配置,这里选择了'有头'模式启动
            ArrayList<String> argList = new ArrayList<>();
            //自动下载,第一次下载后不会再下载
            //BrowserFetcher.downloadIfNotExist(null);
            LaunchOptions options = new LaunchOptionsBuilder().withArgs(argList).withHeadless(false).build();
            argList.add("--no-sandbox");
            argList.add("--disable-setuid-sandbox");
            Puppeteer.launch(options);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 页面跳转
     * @param
     * @return void
     */
    @GetMapping("/go")
    public void go() {
        try {
            //自动下载,第一次下载后不会再下载
            //BrowserFetcher.downloadIfNotExist(null);
            ArrayList<String> argList = new ArrayList<>();
            // withHeadless 是否开启无头模式,无头模式不会显示浏览器
            LaunchOptions options = new LaunchOptionsBuilder().withArgs(argList).withHeadless(false).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/");
        } catch(Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 生成pdf
     * @param
     * @return void
     */
    @GetMapping("/pdf")
    public void pdf() {
        try {
            ArrayList<String> arrayList = new ArrayList<>();
            //生成pdf必须在无头模式下才能生效
            LaunchOptions options = new LaunchOptionsBuilder().withArgs(arrayList).withHeadless(true).build();
            arrayList.add("--no-sandbox");
            arrayList.add("--disable-setuid-sandbox");
            Browser browser = Puppeteer.launch(options);
            Page page = browser.newPage();
            page.goTo("https://gitee.com/fanyong920/jvppeteer");
            PDFOptions pdfOptions = new PDFOptions();
            pdfOptions.setPath("/Users/mac/BOOTCAMP/jayce/jvppeteer/test.pdf");
            page.pdf(pdfOptions);
            page.close();
        } catch(Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 性能分析
     * @param
     * @return void
     */
    @GetMapping("/tracing")
    public void tracing() {
        try {
            ArrayList<String> argList = new ArrayList<>();
            LaunchOptions options = new LaunchOptionsBuilder().withArgs(argList).withHeadless(true).build();
            argList.add("--no-sandbox");
            argList.add("--disable-setuid-sandbox");
            Browser browser = Puppeteer.launch(options);
            Page page = browser.newPage();
            //开启追踪
            page.tracing().start("/Users/mac/BOOTCAMP/jayce/jvppeteer/trace.json");
            page.goTo("https://www.baidu.com/?tn=98012088_10_dg&ch=3");
            page.tracing().stop();
        } catch(Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 页面截图
     */
    @GetMapping("/screenshot")
    public void screenshot() {
        try {
            ArrayList<String> arrayList = new ArrayList<>();
            LaunchOptions options = new LaunchOptionsBuilder().withArgs(arrayList).withHeadless(true).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("/Users/mac/BOOTCAMP/jayce/jvppeteer/test.png");
            page.screenshot(screenshotOptions);
        } catch(Exception e){
            e.printStackTrace();
        }
    }
}
相关推荐
无限的鲜花4 小时前
反射(原创推荐)
java·开发语言
IT二叔4 小时前
Java项目部署-03-teamcity-cicd-docker镜像流水线方式部署
java·ci/cd·持续部署
yongche_shi4 小时前
ragas官方文档中文版(五十)
开发语言·python·ai·ragas·如何评估和改进 rag 应用
一路向北he4 小时前
字节钢铁军团--“提供情境,而非控制”
java·开发语言·前端
超级数据查看器5 小时前
超级数据查看器 v10.0 发布
java·大数据·数据库·sqlite·安卓
AI行业学习5 小时前
Notepad++ 官方下载 + 完整安装 + 全套优化配置(2026最新)
开发语言·人工智能·python·前端框架·html·notepad++
折哥的程序人生 · 物流技术专研6 小时前
《Java 100 天进阶之路》第50篇:阻塞队列与并发容器(2026版)
java·面试题·java进阶·blockingqueue·并发容器·集合源码·java100天进阶
ai_coder_ai6 小时前
编写自动化脚本,在自己后端服务中使用Open Api进行设备相关操作
java·运维·自动化
大圣编程6 小时前
Python中continue语句的用法是什么?
开发语言·前端·python
硕风和炜6 小时前
【LeetCode: 2492. 两个城市间路径的最小分数 + DFS】
java·算法·leetcode·深度优先·dfs·bfs·并查集