通过Selenium
从网页中提取子图像没有问题。我首先检索整个页面的屏幕截图,然后使用元素坐标提取子图像。
Dimension elementDimension = webElement.getSize();
Point elementPoint = webElement.getLocation();
BufferedImage bufferedImageScreenshot = takeScreenshotByAShotRtrnBufferedImage(driver);
BufferedImage bufferedSubImage = bufferedImageScreenshot.getSubimage(elementPoint.x, elementPoint.y,
elementDimension.width, elementDimension.height);
每次都很有效 - 除了我注意到某些网站在您查看(或向下滚动)网页时会有一些与您一起滚动的元素。发生这种情况时,我想要的元素会被滚动时与您一起移动的元素所覆盖。
例如,如果您转到https://www.amazon.com/gp/product/B00V7T1YRQ并尝试从网页中提取子元素:.//*[@id='aplus']
,结果为:
http://imagizer.imageshack.us/a/img922/7974/VYFPUU.png
而不是预期的结果:
http://imageshack.com/a/img922/9517/AB8O2Q.png
如何在不被红色元素模糊的情况下获得预期的图像?
答案 0 :(得分:0)
您可以删除该浮动元素。它有一个id = miniATF_feature_div。如果你执行下面的javascript,它应该从页面中删除它,直到你重新加载。
document.getElementById('miniATF_feature_div').remove()
如果您不知道如何做到这一点,那么有很多关于SO的教程和问题以及一些示例代码。
旁注:
当您只是查找ID时,没有理由使用XPath,例如.//*[@id='aplus']
。只需使用By.id("aplus")
...它就更容易阅读,理解,支持更好,速度更快。