手机网站尺寸大小,门户网站的盈利模式,用群晖做网站,单页面企业网站chromedriver是谷歌浏览器驱动,用来模拟谷歌运行操作的一个工具#xff0c;此处主要讲解Java后端利用此插件进行网页截图#xff0c;并且适配Linux部署。
环境准备 Wondows服务器或电脑 本机需安装Chrome谷歌浏览器#xff0c;根据本机浏览器版本#xff0c;下载对应的chr…chromedriver是谷歌浏览器驱动,用来模拟谷歌运行操作的一个工具此处主要讲解Java后端利用此插件进行网页截图并且适配Linux部署。
环境准备 Wondows服务器或电脑 本机需安装Chrome谷歌浏览器根据本机浏览器版本下载对应的chromedriver版本chromedrive插件下载地址 谷歌chromeDriver插件地址下载后解压即可。PS网上看到许多需要配置环境变量的实测根本不需要。 注意插件版本和本机浏览器版本一定要对应
Linux服务器 安装Chrome
yum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm查看版本
google-chrome --version根据版本下载插件chromedrive插件下载地址https://registry.npmmirror.com/binary.html?pathchromedriver/选择Linux版上传到服务器后解压上面默认安装最新版本。
// 解压
unzip chromedriver_linux64.zip
// 赋权
chmod 777 chromedriver
// 安装浏览器中文字体
yum -y groupinstall FontsJava代码部分
引入maven !-- 浏览器截图jar包 --dependencygroupIdorg.seleniumhq.selenium/groupIdartifactIdselenium-java/artifactIdversion3.141.59/version/dependencydependencygroupIdcom.google.guava/groupIdartifactIdguava/artifactIdversion27.0-jre/version/dependency截图工具方法类
代码里面用到的是ChromeDriverService启动还有一种是 ChromeDriver driver new ChromeDriver(options); System.setProperty(“webdriver.chrome.driver”, “/data/server/legal-document-library-task/chromedriver”); 这种在高并发频繁截图时会遇到ChromeDriver插件未正常关闭的情况会占用端口或内存。推荐使用ChromeDriverService方式。
public String imgUntil(String url){ChromeDriver driver null;FileInputStream inputFile null;ChromeDriverService service null;try {//(推荐)利用ChromeDriverService启动//这里/data/server/legal/chromedriver是下载的驱动路径Windows对应chromedriver.exe Linux对应chromedriver具体路径看你把驱动放在哪service new ChromeDriverService.Builder().usingDriverExecutable(new File(/data/server/legal/chromedriver)).usingAnyFreePort().build();service.start();ChromeOptions options new ChromeOptions();//ssl证书支持options.setCapability(acceptSslCerts, true);//截屏支持options.setCapability(takesScreenshot, true);//css搜索支持options.setCapability(cssSelectorsEnabled, true);//设置浏览器参数options.addArguments(--headless);options.addArguments(--no-sandbox);options.addArguments(--disable-gpu);options.addArguments(--disable-dev-shm-usage);options.setHeadless(true);driver new ChromeDriver(service,options);//设置超时避免有些内容加载过慢导致截不到图driver.manage().timeouts().pageLoadTimeout(1, TimeUnit.MINUTES);driver.manage().timeouts().implicitlyWait(1, TimeUnit.MINUTES);driver.manage().timeouts().setScriptTimeout(1, TimeUnit.MINUTES);//设置需要访问的地址driver.get(url);Thread.sleep(2000);//获取高度和宽度一定要在设置URL之后不然会导致获取不到页面真实的宽高Long width (Long)driver.executeScript(return document.documentElement.scrollWidth);Long height (Long) driver.executeScript(return document.body.parentNode.scrollHeight);System.out.println(高度height);/*//这里按照网页需求有些是滑动的时候才加在的如ajax的异步加载long temp_height 0;while (true) {//每次滚动500个像素因为懒加载所以每次等待2S 具体时间可以根据具体业务场景去设置driver.executeScript(window.scrollBy(0,500));temp_height 500;if(temp_heightheight){break;}}*///设置窗口宽高设置后才能截全driver.manage().window().setSize(new Dimension(width.intValue(), height.intValue()));File srcFile driver.getScreenshotAs(OutputType.FILE);// 这里的需求是将图片转为Base64码后换回实际按需求控制inputFile new FileInputStream(srcFile);byte[] buffer new byte[(int)srcFile.length()];inputFile.read(buffer);String content new BASE64Encoder().encode(buffer);return content;//设置截图文件保存的路径//String screenshotPath C:\\wenjian\\YA\\imgGG1.png;//FileUtils.copyFile(srcFile, new File(screenshotPath));}catch (Exception e){e.printStackTrace();log.error(截图失败:e);return null;}finally {try{if (inputFile ! null){inputFile.close();}}catch (Exception ee){}if (driver! null){driver.quit();service.stop();}}}工具2
全面截屏//配置本地的chromediver.exe谷歌的内核System.setProperty(webdriver.gecko.driver, C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe);//设置ChromeOptions打开方式设置headless不弹出浏览器//设置好使用ChromeDriver使用ChromeDriver driver new ChromeDriver(); driver.get(https://www.jianshu.com/u/a2b05c68b03b);//设置浏览器弹窗页面的大小driver.manage().window().maximize();//使用getScreenshotAs进行截取屏幕File srcFile driver.getScreenshotAs(OutputType.FILE); FileUtils.copyFile(srcFile, new File(G:\\pyChar\\jj.png)); 长截屏//配置本地的chromediver.exe谷歌的内核System.setProperty(webdriver.gecko.driver, C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe);//设置ChromeOptions打开方式设置headless不弹出浏览器ChromeOptions options new ChromeOptions();options.addArguments(headless);//设置好使用ChromeDriver使用ChromeDriver driver new ChromeDriver(options); //获取要截图的地址注需要先获取地址哦不然下方获取的宽度高度就会是弹窗的高和宽而不是页面内容的高宽driver.get(https://www.jianshu.com/u/a2b05c68b03b);//获取页面高宽使用return document.documentElement.scrollWidth//Long width (Long)driver.executeScript(return document.documentElement.scrollWidth);// Long height (Long) driver.executeScript(return document.documentElement.scrollHeight);Long width (Long) ((JavascriptExecutor)driver).executeScript(return document.documentElement.scrollWidth);Long height (Long) ((JavascriptExecutor)driver).executeScript(return document.documentElement.scrollHeight);//设置浏览器弹窗页面的大小driver.manage().window().setSize(new Dimension(width.intValue(), height.intValue()));//使用getScreenshotAs进行截取屏幕File srcFile driver.getScreenshotAs(OutputType.FILE); FileUtils.copyFile(srcFile, new File(G:\\pyChar\\jj.png)); 元素截图使用方法WebElement findElementByXPath ToolDriver.findElement(By.xpath(//*[id\s_lg_img\]));File screenshotAs findElementByXPath.getScreenshotAs(OutputType.FILE);String prName src/main/resources/ Toolimg .png;try {FileUtils.copyFile(screenshotAs, new File(prName));} catch (IOException e) {e.printStackTrace();}
--全面截图再截图
File src ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
WebElement element driver.findElement(By.xpath(//div[classmsn]));Rectangle rect element.getRect();
BufferedImage subImage ImageIO.read(src).getSubimage(rect.x, rect.y, rect.getWidth(), rect.height);
ImageIO.write(subImage, png, src);