c# - 使用 Selenium 保存页面中的图像

标签 c# selenium download selenium-chromedriver

我正在使用 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/

相关文章:

python - python 3.3 的 urllib.request 无法下载文件

ios - 如何使用异步请求下载文件?

c# - 是否有对对象中的每个属性进行二进制序列化的快捷方式?

c# - C++中字符串的L前缀

selenium - 升级到 Selenium Grid 4.0.0 后,Chrome Node 未注册到 Selenium Hub

javascript - 如何将 jQuery 附加到 Selenium 的 PhantomJS 驱动程序(Python 绑定(bind))

php - 使用带标题的 php 下载在 IE8 上不起作用

c# - Entity Framework 和 ASP.NET Identity

c# - VS2017 .NetCore 2.0 API - 无法加载文件或程序集 Microsoft.AspNetCore.Hosting.Abstractions

Python,Selenium用类查找元素并等待类更改