Ashir Ali
Ashir Ali

Reputation: 13

Download Images Using Selenium in C#

I want to download first 10 images from the given Url stated in the following code of google images. I have tried soo much ways but not able to download images because i got the wrong lengthy urls which seems to be junk data.

Here is my code as i am using 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");

}

Upvotes: 1

Views: 1347

Answers (3)

Muhammad Ashir Ali
Muhammad Ashir Ali

Reputation: 65

So after putting this code in my original code everything is working fine for me! Thanks everyone!

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

Upvotes: 0

lidqy
lidqy

Reputation: 2453

In your 1st post you mentioned a Google Images URL and then fetched all elements of class name "rg_i". At least some of the images with this class name (if not all), expose their content as base-64, just as Georgi said. But the format is gif, not jpeg or png, like <img src="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="

So you need to carefully parse the beginning of the string value of the src attribute and then either download it using selenium, if it is an URL (and making sure that the filename is valid) or Decoding it as base 64 data and saving the the returned data to a file with a WriteAllBytes or a StreamWriter...

U can check the HTML markup with Ctrl+U in most browsers. Then you see what the img src data is like.

Upvotes: 0

Giorgi Chkhikvadze
Giorgi Chkhikvadze

Reputation: 684

src attribute of img tag is not always URL to image, image content itself may be placed in src attribute. for example consider following example when jpg image is stored directly in src:

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

you should check if src attribute value starts with data: (which means that directly image content is stored instead of url), and then you can parse content. format is following: src="; , ". in this example case there is jpg image stored as base64 string. you can Convert base64 sting and save it to file like that:

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

Of course you will need to check image format (jpg, png, etc..) and save decoded content in file with corresponding file extension.

Upvotes: 1

Related Questions