我正在尝试编写一个程序,该程序将自动进行google-pictures-search并下载给定String的第一张图片。
我正在使用Google的Selenium Webdriver来完成所有操作,但是我可以更改它。我试图过滤结果,但唯一与我不同的是“ data-atf”属性。我想下载第一个,所以应该下载为零,但是之后如何搜索?此外,由于给定的字符串不同,其他属性也会始终更改。
String = "German Shepherd"
ChromeDriver driver = new ChromeDriver();
driver.get("https:/google.com/search?q=" + String +
"&source=lnms&tbm=isch&sa=X&ved=0ahUKEw
iXlMO0nq_jAhUEzaQKHVVXC50Q_AUIEygE&biw
=834&bih=770");
//and then I've got something like this
//wont work because cssSelector is always different
WebElement img = driver.findElement(By.cssSelector("#selector"));
BufferedImage buffer = ImageIO.read(new URL(img.getAttribute("src")));
ImageIO.write(buffer, "png", new File("image.png"));
} catch (Exception e) {
e.printStackTrace();
} finally {
driver.close();
}
第二部分的信用:Save/copy to clipboard image from page by chrome console
最重要的是,我需要帮助来过滤结果,此后,非常感谢您帮助下载。
答案 0 :(得分:1)
如果要将图像过滤为仅具有data-atf
属性的图像,最简单的方法是通过XPath selector
//img[@data-atf]
或者,如果您只希望“搜索结果”的子级:
//h2[text()='Search Results']/parent::*/descendant::img[@data-atf]
当然,您也可以使用Stream.filter()函数
过滤Java代码中的图像List<WebElement> allImages = driver.findElements(By.tagName("img"));
System.out.println("All images #: " + allImages.size());
List<WebElement> imagesWithDataAtf = allImages
.stream()
.filter(image -> image.getAttribute("data-atf") != null)
.collect(Collectors.toList());
System.out.println("Images with data-atf attribute #: " + imagesWithDataAtf.size());