Java 使用selenium 后台截图

1.环境准备
服务器需要安装
google-chrome-stable

yum install google-chrome-stable

2.下载对应版本的chromedriver 浏览器驱动

http://npm.taobao.org/mirrors/chromedriver/

3.java添加依赖(需要对应版本)

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.141.59</version>
        </dependency>

4.测试代码

package com.zdw.selenium_demo.runner;

import lombok.extern.slf4j.Slf4j;

import org.apache.commons.io.FileUtils;

import org.openqa.selenium.*;

import org.openqa.selenium.chrome.ChromeDriver;

import org.openqa.selenium.chrome.ChromeOptions;

import org.springframework.boot.CommandLineRunner;

import org.springframework.stereotype.Component;

import javax.imageio.ImageIO;

import java.awt.image.BufferedImage;

import java.io.File;

/**
* Created by fengshuo
*/



@Slf4j

public class TestRunner {



 public static void main(String[] args) throws Exception{

//驱动地址

System.setProperty("webdriver.chrome.driver","/chromedriver");

WebDriver webDriver = null;

String url = "测试网页";

ChromeOptions options=new ChromeOptions();

//设置 chrome 的无头模式

options.addArguments("--headless");

options.addArguments("--disable-gpu");

options.addArguments("--no-sandbox");

options.addArguments("--disable-dev-shm-usage");

options.addArguments("--start-maximized");

//设置截图窗口大小

options.addArguments("--window-size=1280,4300");

//启动一个 chrome 实例

webDriver = new ChromeDriver(options);

//页面最大化

// webDriver.manage().window().maximize();

// Thread.sleep(2000);
//全局等待
// webDriver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

//访问网址

webDriver.get(url);
//等待加载渲染页面,避免页面未加载完就截图,页面复杂可以加大
Thread.sleep(2000);

// WebDriverWait webDriverWait=new WebDriverWait(webDriver,5);

//执行javascript 可以直接设置localstroage,cookie等方式。不过拼字符串实在太麻烦

// String token = "localStorage.setItem('cloud.token','{\"val\":\"5d31f455-8ed5-4ebe-80d1-760665df452c\",\"expires\":1584531900299}')";

// ((JavascriptExecutor)webDriver).executeScript(token);

//如果需要模拟点击操作,例如账号密码,按钮 ,直接模拟登录操作就简单了,

webDriver.findElement(By.id("account")).sendKeys("admin");

webDriver.findElement(By.id("pwd")).sendKeys("admin");

webDriver.findElement(By.id("login")).click();

Thread.sleep(2000);

//获取需要截图的页面

webDriver.get("需要截图的页面");

Thread.sleep(5000);

//定位section标签元素的位置

WebElement element = webDriver.findElement(By.tagName("section"));

Point p = element.getLocation();

int width = element.getSize().getWidth();

int height = element.getSize().getHeight();

Rectangle rec = new Rectangle(p.getX(),p.getY(),height,width);

//截取全屏

File scrFile = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);

//在全屏图片下裁剪处理

BufferedImage img = ImageIO.read(scrFile);

BufferedImage dest = img.getSubimage(p.getX(), p.getY(),rec.getWidth(),rec.getHeight());

ImageIO.write(dest, "png", scrFile);

//拷贝文件

FileUtils.copyFile(scrFile , new File("a.png"));

log.info("截图完成");

//退出

webDriver.quit();

}

}

注意事项:
调用浏览器会导致内存飙升,即使调用退出,关闭的方法依然会有进程残留。如果没有释放的话会导致服务器崩溃。
当前的解决方案是调用完成后,kill掉chrome进程。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容