[英]C# selenium webdriver - How to save a specific image regardless of location
我已经看到了很多示例,这些示例基于保存屏幕截图来保存图像。
这有一个根本的缺陷。 拍摄屏幕快照仅显示当时页面上显示的内容。 因此,如果我在页面底部有一个图像,并且想根据找到的元素的位置保存它,则可能会发生一两个问题。
如果我保存屏幕截图,然后尝试按位置保存,则屏幕快照在点1200处结束,但是图像位于3000点。如果我将焦点放在图像上然后进行屏幕截图,则图像现在在屏幕上拍摄,但是位置不起作用。 它不起作用,因为我仍然有一个1200px高度的图像,位置为3000。
我怎样简单地说,我有一个3000x 3014y的图像,我只想保存它?
我已经解决了 Chrome vs IE vs Firefox以不同的方式拍摄屏幕快照。 Firefox会将屏幕截图拼接在一起,Chrome仅显示可见内容,而IE会缩小所有内容以使其适合一页。
如果您需要对基本页面上没有的内容进行屏幕截图,建议您使用Firefox
您基本上可以获取图像的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);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.