如何通过Selenium捕获网页中WebElement的屏幕截图,而不是整个屏幕或整个页面

时间:2018-08-25 08:52:27

标签: java selenium selenium-webdriver webdriver ashot

我必须捕获特定网站的图像的屏幕截图。也许这是整个屏幕的20%折扣,我在下面的代码中使用过,它正在捕获整个屏幕。这没有帮助我解决问题。

WebDriver driver = new FirefoxDriver();
driver.get("http://www.google.com/");
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File("c:\\tmp\\screenshot.png"));

Screenshot, what I want to do with selenium

3 个答案:

答案 0 :(得分:1)

你能试试吗

driver.get("https://stackoverflow.com/");
WebElement element = driver.findElement(By.xpath("//span[(text()='Stack Overflow') and @class='-img _glyph']"));
WrapsDriver wrapsDriver = (WrapsDriver) element;
File screenshot = ((TakesScreenshot) wrapsDriver.getWrappedDriver()).getScreenshotAs(OutputType.FILE);
Rectangle rectangle = new Rectangle(element.getSize().width, element.getSize().height, element.getSize().height, element.getSize().width);
Point location = element.getLocation();
BufferedImage bufferedImage = ImageIO.read(screenshot);
BufferedImage destImage = bufferedImage.getSubimage(location.x, location.y, rectangle.width, rectangle.height);
ImageIO.write(destImage, "png", screenshot);
File file = new File("C:\\123.png");
FileUtils.copyFile(screenshot, file);

答案 1 :(得分:0)

如果您的代码试用版getScreenshotAs()方法将获取整个页面的屏幕截图。

要捕获特定网页中 WebElement 的屏幕截图,可以使用 AShot() 方法导入 ashot-1.4.4.jar < / strong>,同时使用 Selenium Java Client v3.14.0 ChromeDriver v2.41 Chrome v 68.0

  

注意 ashot-1.4.4.jar 中的 AShot() 方法仅在启用jQuery的情况下有效< em> Web应用程序。

因此,由于未从 ashot-1.4.4.jar 中启用 jQuery 网站的 http://www.google.com/ 方法, >无法获取所需的屏幕截图。

作为示例,我们将从网站 AShot()拍摄快照。

  • 代码块:

    https://jquery.com/
  • 屏幕截图:

elementScreenshot.png

答案 2 :(得分:0)

我正在使用selenium-java-3.141.59和ChromeDriver 83.0.4103.39,下面的代码对我来说非常合适:

    WebDriver driver = new ChromeDriver();
   driver.get("https://www.google.com/");
  WebElement element = driver.findElement(By.id("hplogo"));
  Screenshot screenshotHeader = new AShot().coordsProvider(new WebDriverCoordsProvider()).shootingStrategy(ShootingStrategies.viewportPasting(100)).takeScreenshot(driver, element);
    try {
        ImageIO.write(screenshotHeader.getImage(),"jpg",new File("C:/TESTSELENIUM/Google.jpg"));
    } catch (IOException e) {
        e.printStackTrace();
    }