[英]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.