c# selenium webdriver -如何保存一个特定的图像,而不管位置

本文关键字:图像 位置 不管 一个 webdriver selenium 何保存 保存 | 更新日期: 2023-09-27 18:11:32

我已经见过很多基于保存截图来保存图片的例子。

这有一个根本性的缺陷。截图只截取当时页面上可见的内容。因此,如果我在页面底部有一张图像,并且我想根据我找到的元素的位置来保存它,那么就会出现一个或两个问题。

如果我保存截图,然后尝试按位置保存,屏幕截图在1200点结束,但图像位于3000点。如果我把焦点放在图像上,然后拍一张屏幕截图,图像现在是在屏幕截图上,但是,位置不起作用。它不能工作,因为我仍然有一个高度为1200px,位置为3000的图像。

我怎么能简单地说,我有一个3000x 3014y的图像,我只想保存它?

c# selenium webdriver -如何保存一个特定的图像,而不管位置

你基本上可以获得图像的base64字符串并将其保存到文件。

var base64string = driver.ExecuteScript(@"
    var c = document.createElement('canvas');
    var ctx = c.getContext('2d');
    var img = document.getElementsByTagName('img')[0];
    c.height=img.height;
    c.width=img.width;
    ctx.drawImage(img, 0, 0,img.width, img.height);
    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, $"{Guid.NewGuid()}.jpg");
        bitmap.Save(filepath, ImageFormat.Jpeg);
    }
}

我已经解决了。Chrome、IE和Firefox以不同的方式截图。Firefox会将截图拼接在一起,chrome只截取可见的内容,IE会缩小所有内容以适应一个页面。

如果你需要做一个没有在基本页面上的东西的截图,我建议firefox