Selenium - java - 屏幕截图

文档地址

Selenium 浏览器自动化项目 | Selenium

安装

xml 复制代码
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>4.19.1</version>
        </dependency>

使用

创建WebDriver实例

以chrome为例, 创建

java 复制代码
ChromeOptions co = new ChromeOptions();
co.setCapability("webSocketUrl", true);  //BiDi功能需要添加这个配置
co.addArguments("--headless");           //无头浏览器
WebDriver driver = new ChromeDriver(chromeOptions);


/*********************************************
*            操作                            *
**********************************************/

driver.quit();

打开目标页面

java 复制代码
driver.get("https://www.selenium.dev/selenium/web/web-form.html");

捕捉截图

首先要开启bidi功能

截图可以选择截取一个页面的图, 也可以选择某一元素进行截图

先看一个截取某一页面的代码例子:

java 复制代码
// 首先创建一个BrowserContext对象
 BrowsingContext bc = new BrowsingContext(driver, driver.getWindowHandle());
String base64Str = bc.captureScreenshot();

截图返回的数据是一个图片的base64编码字符串

如果将截图文件保存到一个文件中, 可以参考如下代码

java 复制代码
        byte[] decode = Base64.getDecoder().decode(base64Str);

        try(FileOutputStream fos = new FileOutputStream(new File("test.png"))){
            fos.write(decode);
            fos.close();
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

这段代码会把截图文件保存为test.png文件中

如果想要截取某一个元素节点截图, 我们可以使用如下代码

java 复制代码
WebElement element = driver.findElement(new By.ByClassName("py-2"));
String base64Str = bc.captureElementScreenshot(((RemoteWebElement)element).getId());

这样, 我们就可以把左侧表单元素截图保存下来

相关推荐
李子园的李15 分钟前
Java函数式接口——渐进式学习
java
running up18 分钟前
Spring Bean生命周期- BeanDefinition 加载与 BeanFactoryPostProcessor BeanPostProcessor
java·后端·spring
222you27 分钟前
Java线程的三种创建方式
java·开发语言
脸大是真的好~34 分钟前
计算机408基础相关面试题-备用,不推荐
java
小费的部落34 分钟前
Excel 在Sheet3中 匹配Sheet1的A列和Sheet2的A列并处理空内容
java·前端·excel
咘噜biu35 分钟前
多租户动态数据源插件dynamic-datasource简介
java·mybatisplus·动态数据源·多租户
漫漫求37 分钟前
Java内存模型【JMM】、JVM内存模型
java·开发语言·jvm
原来是好奇心37 分钟前
深入Spring Boot源码(五):外部化配置与Profile机制深度解析
java·源码·springboot
IT界的奇葩38 分钟前
OAuth2 单点登录流程图
java·流程图·oauth2·单点登录·sso
ZHang......1 小时前
LeetCode 1114. 按序打印
java·开发语言·算法