playwright+java完成访问url截图功能
使用Playwright+Java实现网页截图功能教程
我搭建的api(供您测试):curl https://screenshot.rui10038.top/screenshot?url=https://baidu.com > baidu.png
简介
Playwright是一个由Microsoft开发的现代化自动化测试工具,支持跨浏览器自动化操作。本教程将介绍如何使用Playwright配合Java实现网页访问和截图功能。
官网地址: https://playwright.dev/
环境准备
- Java JDK 8或更高版本
- Maven/gradle
- IDE(推荐IntelliJ IDEA)
项目依赖配置
最新版本查看路径: Installation | Playwright Java
在Maven的pom.xml文件中添加以下依赖:
1 | <dependency> |
gradle添加
1 | implementation("com.microsoft.playwright:playwright:1.51.0") |
系统版本要求
- Java 8 or higher.
- Windows 10+, Windows Server 2016+ or Windows Subsystem for Linux (WSL).
- macOS 14 Ventura, or later.
- Debian 12, Ubuntu 22.04, Ubuntu 24.04, on x86-64 and arm64 architecture.
最新要求查看: Installation | Playwright Java
基础实现步骤
- 创建Playwright实例
- 启动浏览器
- 创建新页面
- 访问目标URL
- 进行截图操作
- 关闭浏览器
代码示例
1 | import com.microsoft.playwright.*; |
截图配置选项
Playwright提供了多种截图配置选项:
- fullPage:是否截取整个页面
- path:截图保存路径
- quality:图片质量(仅适用于JPEG格式)
- clip:指定截图区域
注意事项
- 首次运行时,Playwright会自动下载所需的浏览器,请确认服务器能连接外网
- 建议使用try-with-resources语句来确保资源正确关闭
- 对于动态加载的页面,建议添加适当的等待机制
- 可以根据需要选择不同的浏览器引擎(Chromium、Firefox、WebKit)
常见问题排查
浏览器启动失败
检查是否正确安装了浏览器驱动
确认系统环境变量设置
检查防火墙设置
截图白屏
等待页面渲染完成page.waitForLoadState(LoadState.DOMCONTENTLOADED)
确认页面网络请求发送情况
1 | page.onResponse(response -> { |
检查控制台是否有报错
1 | // Listen for console messages |
自动下载浏览器超时
参考下面的问题,安装node环境,然后用node下载npx playwright install
(手动下载应该也行)
会下载到以下目录:
%USERPROFILE%\AppData\Local\ms-playwright
on Windows~/Library/Caches/ms-playwright
on macOS~/.cache/ms-playwright
on Linux
手动下载解压到这个目录也可以
然后配置环境变量PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1
跳过下载.
如果跳过下载提示报错未找到文件,则按照报错的文件名重命名现有的目录(chromium-1024 -> chromium-1000)即可
运行报错Failed to create driver
Playwright-java需要GLIBcxx 3.4.20等依赖 但不会下载需要的依赖,而是会报错Failed to create driver,这个时候需要安装node,运行官方命令
PS:因为有些环境,报错不影响截图,所以没写在必经流程里面.
npx playwright install-deps
来完成依赖安装.具体如下:
1 | # 安装node环境 注意要版本号要>=18 |
截图完后中文显示方框
是因为服务器没中文字体sudo apt-get install -y fonts-wqy-microhei fonts-wqy-zenhei
安装即可
提示:为了获得更好的性能,建议在非UI测试场景下使用无头模式(Headless Mode)运行浏览器。