51Testing软件测试论坛

标题: Selenium WebDriver如何实现区部截图(JAVA语言) [打印本页]

作者: kavensyw    时间: 2014-7-4 22:46
标题: Selenium WebDriver如何实现区部截图(JAVA语言)
我需要进行验证码识别(JAVA语言):

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

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

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

[attach]90946[/attach]
作者: kavensyw    时间: 2014-7-5 10:53
本帖最后由 kavensyw 于 2014-7-5 11:18 编辑

自己搞定:

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

  3.    //获取验证码的绝对坐标、宽度、高度
  4.    Long xValue = (Long)jse.executeScript("oRect = document.getElementById(\"validateCode\").getBoundingClientRect();  " +
  5.      "return oRect.left+window.screenLeft + document.documentElement.scrollLeft - document.documentElement.clientLeft;");
  6.    Long yValue = (Long)jse.executeScript("oRect = document.getElementById(\"validateCode\").getBoundingClientRect();  " +
  7.      "return oRect.top+ window.screenTop + document.documentElement.scrollTop - document.documentElement.clientTop;");
  8.    Double width = (Double)jse.executeScript("oRect = document.getElementById(\"validateCode\").getBoundingClientRect();  return oRect.width;");
  9.    Double height = (Double)jse.executeScript("oRect = document.getElementById(\"validateCode\").getBoundingClientRect();  return oRect.height;");              
  10.    
  11.    Thread.sleep(3000);
  12.    //使用Robot截图
  13.    BtiCommon.captureScreen("Test111"
  14.      ,Integer.parseInt(String.valueOf(xValue))
  15.      ,Integer.parseInt(String.valueOf(yValue))
  16.      ,Integer.parseInt(new java.text.DecimalFormat("0").format(width))  
  17.      ,Integer.parseInt(new java.text.DecimalFormat("0").format(height))
  18.      );   
  19.                               
复制代码

  1. import java.awt.image.BufferedImage;
  2. import java.awt.Robot;
  3. import java.awt.Rectangle;
  4. import java.io.FileOutputStream;
  5. import com.sun.image.codec.jpeg.*;

  6.   public static void captureScreen(String screenName, int x, int y,
  7.    int width, int height) {
  8.   try {
  9.    BufferedImage capture = null;
  10.    Rectangle area = new Rectangle(x, y, width, height);
  11.    Robot robot = new Robot();
  12.    capture = robot.createScreenCapture(area);
  13.    String fn = "E:\\" + screenName + ".jpg";
  14.    FileOutputStream out = new FileOutputStream(fn);
  15.    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
  16.    encoder.encode(capture);
  17.    out.flush();
  18.    out.close();
  19.   } catch (Exception e) {
  20.    e.printStackTrace();
  21.   }
  22. }
复制代码

作者: ripple_wang    时间: 2014-7-11 11:08
不错,标记下
作者: 黑羽祭    时间: 2014-7-12 17:18

作者: yrenyi0603    时间: 2014-7-19 08:54
这样做浏览器不能最小化吧?
作者: hcface    时间: 2014-8-1 09:30
看来用SE做自动化确实比较复杂啊。。
作者: hcface    时间: 2014-8-1 09:30
脚本后期怎么维护呢。。。
作者: yiran163    时间: 2018-5-8 17:25
为什么我截取验证码的位置老是出错呢




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2