kavensyw 发表于 2014-7-4 22:46:19

Selenium WebDriver如何实现区部截图(JAVA语言)

我需要进行验证码识别(JAVA语言):

1、截取登录页面的验证码图片;
2、使用tesseract-OCR进行识别

其中第2步我已经单独测试成功,但如何截取验证码区域的图片呢?

这个语句用于整个页面的截图。 局部截图如何处理??
File screenShotFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE );

kavensyw 发表于 2014-7-5 10:53:34

本帖最后由 kavensyw 于 2014-7-5 11:18 编辑

自己搞定:

//import org.openqa.selenium.JavascriptExecutor;
   JavascriptExecutor jse = (JavascriptExecutor)driver;

   //获取验证码的绝对坐标、宽度、高度
   Long xValue = (Long)jse.executeScript("oRect = document.getElementById(\"validateCode\").getBoundingClientRect();" +
   "return oRect.left+window.screenLeft + document.documentElement.scrollLeft - document.documentElement.clientLeft;");
   Long yValue = (Long)jse.executeScript("oRect = document.getElementById(\"validateCode\").getBoundingClientRect();" +
   "return oRect.top+ window.screenTop + document.documentElement.scrollTop - document.documentElement.clientTop;");
   Double width = (Double)jse.executeScript("oRect = document.getElementById(\"validateCode\").getBoundingClientRect();return oRect.width;");
   Double height = (Double)jse.executeScript("oRect = document.getElementById(\"validateCode\").getBoundingClientRect();return oRect.height;");            
   
   Thread.sleep(3000);
   //使用Robot截图
   BtiCommon.captureScreen("Test111"
   ,Integer.parseInt(String.valueOf(xValue))
   ,Integer.parseInt(String.valueOf(yValue))
   ,Integer.parseInt(new java.text.DecimalFormat("0").format(width))
   ,Integer.parseInt(new java.text.DecimalFormat("0").format(height))
   );   
                              

import java.awt.image.BufferedImage;
import java.awt.Robot;
import java.awt.Rectangle;
import java.io.FileOutputStream;
import com.sun.image.codec.jpeg.*;

public static void captureScreen(String screenName, int x, int y,
   int width, int height) {
try {
   BufferedImage capture = null;
   Rectangle area = new Rectangle(x, y, width, height);
   Robot robot = new Robot();
   capture = robot.createScreenCapture(area);
   String fn = "E:\\" + screenName + ".jpg";
   FileOutputStream out = new FileOutputStream(fn);
   JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
   encoder.encode(capture);
   out.flush();
   out.close();
} catch (Exception e) {
   e.printStackTrace();
}
}

ripple_wang 发表于 2014-7-11 11:08:11

不错,标记下

黑羽祭 发表于 2014-7-12 17:18:29

yrenyi0603 发表于 2014-7-19 08:54:35

这样做浏览器不能最小化吧?

hcface 发表于 2014-8-1 09:30:24

看来用SE做自动化确实比较复杂啊。。

hcface 发表于 2014-8-1 09:30:38

脚本后期怎么维护呢。。。

yiran163 发表于 2018-5-8 17:25:18

为什么我截取验证码的位置老是出错呢
页: [1]
查看完整版本: Selenium WebDriver如何实现区部截图(JAVA语言)