簡體   English   中英

C#Selenium Webdriver-如何保存特定圖像,而不管位置

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM