Javascript Selenium:捕获DOM元素图像
我有一个API来捕获DOM中特定元素的图像并返回它们。为此,我有一个需要捕获到单个网页中的WebElements列表。同样,我已经找到了一个解决方案,如果一个元素在屏幕上是可见的(无需向下滚动即可看到),那么它可以很好地工作 但是我需要向下滚动查看Javascript Selenium:捕获DOM元素图像,javascript,java,selenium,spring-boot,raster,Javascript,Java,Selenium,Spring Boot,Raster,我有一个API来捕获DOM中特定元素的图像并返回它们。为此,我有一个需要捕获到单个网页中的WebElements列表。同样,我已经找到了一个解决方案,如果一个元素在屏幕上是可见的(无需向下滚动即可看到),那么它可以很好地工作 但是我需要向下滚动查看java.awt.image.RasterFormatException中的元素结果的情况是:(y+height)在光栅之外。所以我加了这个 我试过的 问题是在需要滚动某些元素的地方,如何捕获特定元素的图像。请注意,对于多个源,我有多个元素具有the
java.awt.image.RasterFormatException中的元素结果的情况是:(y+height)在光栅之外。所以我加了这个
我试过的
问题是在需要滚动某些元素的地方,如何捕获特定元素的图像。请注意,对于多个源,我有多个元素具有there By.id、By.name、By.xpath,因此我无法通过y+100
设置fullImg.getSubimage(x、y、w、h)
。任何帮助都将不胜感激
System.setProperty("webdriver.chrome.driver", "F:\\chromedriver");
WebDriver driver = new ChromeDriver();
driver.get("https://www.testing-whiz.com/demoscripts/basic-element.html");
WebElement ele = getElement();
// Get entire page screenshot
File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
BufferedImage fullImg = ImageIO.read(screenshot);
// Get the location of element on the page
Point point = ele.getLocation();
// Get width and height of the element
int eleWidth = ele.getSize().getWidth();
int eleHeight = ele.getSize().getHeight();
// Crop the entire page screenshot to get only element screenshot
try {
BufferedImage eleScreenshot= fullImg.getSubimage(point.getX(), point.getY(), eleWidth, eleHeight);
ImageIO.write(eleScreenshot, "png", screenshot);
}catch (Exception e) {
js.executeScript("window.scrollBy(0,450)");
//point.getY() = 732 //From console y = 492.8000183105469 after scroll https://stackoverflow.com/a/38767558/10961238
//raster.getHeight() = 613
BufferedImage eleScreenshot= fullImg.getSubimage(point.getX(), point.getY(), eleWidth, eleHeight);
ImageIO.write(eleScreenshot, "png", screenshot);
}
// Copy the element screenshot to disk
File screenshotLocation = new File("F:\\Images\\1.png");
FileUtils.copyFile(screenshot, screenshotLocation);
- 后端:Spring引导(Java11)
- 前端:角度
WebElement
扩展了TakesScreenshot
,这意味着您可以直接在WebElement
上使用getScreenshotAs
。你可以
public void takeElementScreenshot(WebElement element) {
driver.executeScript("arguments[0].scrollIntoView();", element);
File screenshot = ele.getScreenshotAs(OutputType.FILE);
//...
}
你可以在滚动之前,但我不认为这是必要的,只是每次滚动
System.setProperty("webdriver.chrome.driver", "F:\\chromedriver");
WebDriver driver = new ChromeDriver();
driver.get("https://www.testing-whiz.com/demoscripts/basic-element.html");
WebElement ele = getElement();
// Get entire page screenshot
File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
BufferedImage fullImg = ImageIO.read(screenshot);
// Get the location of element on the page
Point point = ele.getLocation();
// Get width and height of the element
int eleWidth = ele.getSize().getWidth();
int eleHeight = ele.getSize().getHeight();
// Crop the entire page screenshot to get only element screenshot
try {
BufferedImage eleScreenshot= fullImg.getSubimage(point.getX(), point.getY(), eleWidth, eleHeight);
ImageIO.write(eleScreenshot, "png", screenshot);
}catch (Exception e) {
js.executeScript("window.scrollBy(0,450)");
//point.getY() = 732 //From console y = 492.8000183105469 after scroll https://stackoverflow.com/a/38767558/10961238
//raster.getHeight() = 613
BufferedImage eleScreenshot= fullImg.getSubimage(point.getX(), point.getY(), eleWidth, eleHeight);
ImageIO.write(eleScreenshot, "png", screenshot);
}
// Copy the element screenshot to disk
File screenshotLocation = new File("F:\\Images\\1.png");
FileUtils.copyFile(screenshot, screenshotLocation);
public void takeElementScreenshot(WebElement element) {
driver.executeScript("arguments[0].scrollIntoView();", element);
File screenshot = ele.getScreenshotAs(OutputType.FILE);
//...
}