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进程。