在 C# 中使用 Selenium 下载图像

Download Images Using Selenium in C#

我想从 google 图片的以下代码中指定的 Url 下载前 10 张图片。我尝试了很多方法但无法下载图片,因为我得到了错误的冗长 url,这似乎是垃圾数据。

这是我使用 C# 时的代码,

var driver = new ChromeDriver();

driver.Navigate().GoToUrl("https://www.google.com/search?q=wallpapers+pics&tbm=isch&ved=2ahUKEwizlL6W6sLxAhUE_4UKHS_YBDEQ2-cCegQIABAA&oq=wallpapers+pics&gs_lcp=CgNpbWcQAzICCAAyAggAMgIIADICCAAyAggAMgIIADICCAAyAggAMgIIADICCAA6BwgAELEDEEM6BAgAEENQ3I8FWJ6YBWDsnQVoAHAAeACAAasCiAHYCZIBAzItNZgBAKABAaoBC2d3cy13aXotaW1nwAEB&sclient=img&ei=bjXeYLOlJ4T-lwSvsJOIAw&bih=802&biw=1707");



// These are commented three ways to select the list of images

//IList<IWebElement> Imghref = driver.FindElements(By.XPath("//img[@jsname]"));

//IList<IWebElement> Imghref = driver.FindElements(By.ClassName("rg_i"));

//IList<IWebElement> Imghref = driver.FindElements(By.TagName("img"));

IList<IWebElement> Imghref = driver.FindElements(By.ClassName("rg_i"));

//BcuVif - n3VNCb     --- ClassNames which i have observed

foreach (IWebElement eachLink in Imghref)
{
    eachLink.Click();

    IWebElement Images = driver.FindElement(By.TagName("img"));
    //Console.WriteLine(Images.GetAttribute("class"));
    String ImageUrl = Images.GetAttribute("src");
    string ImageName = Images.GetAttribute("alt");
    Console.WriteLine("Image URL : " + ImageUrl);
    WebClient downloader = new WebClient();
    downloader.DownloadFile(ImageUrl, "D:\VisualStudio Workspace\Download-Images\images\" + ImageName + ".jpg");

}
img标签的

src属性并不总是URL图片,图片内容本身可能放在src属性中。例如,当 jpg 图像直接存储在 src 中时,请考虑以下示例:

<img src="data:image/jpeg;base64,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" width="284" height="178">

你应该检查src属性值是否以data:开头(这意味着直接存储图像内容而不是url),然后你可以解析内容。格式如下: src="; , ".在本示例中,jpg 图像存储为 base64 字符串。你可以像这样转换 base64 字符串并将其保存到文件中:

var bytes = Convert.FromBase64String(base64String);
File.WriteAllBytes("image.jpg", bytes);

当然你需要检查图像格式(jpg、png 等),并将解码后的内容保存在相应文件扩展名的文件中。

在您的第一个 post 中,您提到了一个 Google 图像 URL,然后获取了 class 名称“rg_i”的所有元素。 正如 Georgi 所说,至少有一些具有此 class 名称的图像(如果不是全部)将其内容公开为 base-64。 但是格式是gif,不是jpeg或者png,比如<img src="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="

因此您需要仔细解析 src 属性的字符串值的开头,然后使用 selenium 下载它,如果它是 URL(并确保文件名是有效)或将其解码为 base 64 数据并将返回的数据保存到具有 WriteAllBytes 或 StreamWriter 的文件中...

U 可以在大多数浏览器中使用 Ctrl+U 检查 HTML 标记。然后你看看img src数据是怎么样的

因此,将此代码放入我的原始代码后,一切正常! 谢谢大家!

字符串转换= base64String.Replace("data:image/jpeg;base64,", string.Empty); byte[] bytes = Convert.FromBase64String(转换); File.WriteAllBytes("D:\VisualStudio Workspace\Download-Images\images\image.jpg", bytes);