零基础Java使用Playwright获取网站截图教程

Handsome
2025-02-10
点 赞
1
热 度
72
评 论
0

前言

最近在搞获取网页截图,因为之前都是使用js来实现特别简单,但是因为halo插件的问题必须要用到java开发,所以浅浅的学习记录一下

Playwright简介     

Playwright 是由Microsoft开发的跨浏览器自动化测试工具,支持:

  • Chromium/Chrome  

  • Firefox  

  • WebKit(Safari)  

  • 多语言支持(Java/Python/C#/JS)

核心优势

  • 自动等待元素加载

  • 网络请求拦截

  • 文件下载管理

  • 设备模拟功能

最佳实践

我开发环境为JDK17+Spring Webflux+mysql+redis,如下简单介绍如何获取网站截图

如何获取到数据库和redis缓存暂时不讲,我思路如下,以二进制存到数据库后记录url和二进制文件和时间,存入reids二进制文件和url和时间,redis默认6小时过期,6小时后调用从新生成并且更新到redis和数据库

引入maven依赖

<dependency>
    <groupId>com.microsoft.playwright</groupId> 
    <artifactId>playwright</artifactId>
    <version>1.40.0</version>
</dependency>

浏览器驱动安装

// 自动下载所需浏览器 
Playwright playwright = Playwright.create(); 
Browser browser = playwright.chromium().launch(); 

基础截图示例

import com.microsoft.playwright.*; 
 
public class ScreenshotDemo {
    public static void main(String[] args) {
        try (Playwright playwright = Playwright.create())  {
            Browser browser = playwright.chromium().launch(); 
            Page page = browser.newPage(); 
            
            // 访问目标网站 
            page.navigate("https://www.lik.cc"); 
            
            // 等待页面加载完成 
            page.waitForLoadState(LoadState.NETWORKIDLE); 
            
            // 截图保存 
            page.screenshot(new  Page.ScreenshotOptions()
                .setPath(Paths.get("screenshot.png")) 
                .setFullPage(true));
            
            browser.close(); 
        }
    }
}
  1. 使用 Playwright.create() 创建实例进行初始化。

  2. 通过 chromium().launch() 启动 Chromium 浏览器。

  3. 调用 newPage() 方法创建新的浏览器标签页。

  4. 利用 waitForLoadState() 确保页面已完全加载完毕。

  5. 利用 screenshot() 方法并设置相应的保存路径和截图参数来保存页面截图。

高级参数解释

page.screenshot(new  Page.ScreenshotOptions()
    .setPath(Paths.get("partial.png")) 
    .setClip(50, 50, 400, 300)  // 截取指定区域 
    .setQuality(85)             // JPEG质量 
    .setOmitBackground(true)    // 透明背景 
    .setType(PNG));             // 文件格式

多浏览器支持

// Firefox 
Browser firefox = playwright.firefox().launch(); 
 
// WebKit 
Browser webkit = playwright.webkit().launch( 
    new BrowserType.LaunchOptions().setHeadless(false));

异步API

page.onceLoadFinished(p  -> {
    p.screenshot(/*  options */);
});
page.navigate("https://www.lik.cc"); 

扩展学习建议

  1. 官方文档:

    https://playwright.dev/java

  2. 设备模拟: page.emulateDevice()

  3. 网络拦截: page.route()

  4. 视频录制: browserContext.startRecording()


心若有所向往,何惧道阻且长

Handsome

infp 调停者

站长

具有版权性

请您在转载、复制时注明本文 作者、链接及内容来源信息。 若涉及转载第三方内容,还需一同注明。

具有时效性

目录

欢迎来到Handsome的站点,为您导航全站动态

17 文章数
4 分类数
21 评论数
17标签数

访问统计