我正在使用 Selenium 和 Google Chrome 驱动程序以编程方式打开页面。在每个页面上都有一个我想下载的动态生成的图像。目前,我正在等待页面完成加载,然后获取图像 URL 并使用 System.Net.WebClient 下载它。
除了我下载图像两次外,一切正常 - 一次在浏览器中,一次使用 WebClient。问题是每张图片大约 15MB,下载两次加起来很快。
那么 - 是否可以直接从 Google Chrome 抓取图像?
最佳答案
一种方法是使用 webdriver 执行的 javascript 获取图像的 base64 字符串。然后就可以将图片的base64string保存到文件中了。
基本上,如果你的图片是
<img id='Img1' src='someurl'>
然后你可以像这样转换它
var base64string = driver.ExecuteScript(@"
var c = document.createElement('canvas');
var ctx = c.getContext('2d');
var img = document.getElementById('Img1');
c.height=img.naturalHeight;
c.width=img.naturalWidth;
ctx.drawImage(img, 0, 0,img.naturalWidth, img.naturalHeight);
var base64String = c.toDataURL();
return base64String;
") as string;
var base64 = base64string.Split(',').Last();
using (var stream = new MemoryStream(Convert.FromBase64String(base64)))
{
using (var bitmap = new Bitmap(stream))
{
var filepath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ImageName.png");
bitmap.Save(filepath, ImageFormat.Png);
}
}
关于c# - 使用 Selenium 保存页面中的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18424624/