如何使用Java在Selenium WebDriver中查找整个网站的损坏图像?

MSL*_*MSL 1 selenium image web-scraping

我想查找整个站点的损坏图像。我只能在一个页面上执行此操作,例如:主页。

我们如何在整个网站上做到这一点?

Jef*_*ffC 5

要检查图像是否损坏,您可以简单地检查naturalWidth元素的是否为0。您可以循环浏览页面上的图像,并对每个图像进行此检查。至于在整个站点上执行此操作,您将必须构建一个爬网程序,或者理想情况下,找到一个现有的爬网程序,这对于SO的问题是不可行的。

演示代码

driver.get("http://the-internet.herokuapp.com/broken_images");
for (WebElement image : driver.findElements(By.cssSelector("img")))
{
    isImageBroken(image);
}
Run Code Online (Sandbox Code Playgroud)

测试破损图像的功能

public void isImageBroken(WebElement image)
{
    if (image.getAttribute("naturalWidth").equals("0"))
    {
        System.out.println(image.getAttribute("outerHTML") + " is broken.");
    }
}
Run Code Online (Sandbox Code Playgroud)

运行时,输出

<img src="asdf.jpg"> is broken.
<img src="hjkl.jpg"> is broken.
Run Code Online (Sandbox Code Playgroud)

注意:上面的函数专门针对此问题。如果返回a boolean并在测试脚本中完成验证会更好,例如

public boolean imageExists(WebElement image)
{
    return !image.getAttribute("naturalWidth").equals("0");
}
Run Code Online (Sandbox Code Playgroud)