2015-09-05 4 views
0

Я видел массу примеров, как сохранить изображение на основе сохранения снимка экрана.C# selenium webdriver - Как сохранить определенное изображение независимо от местоположения

У этого есть фундаментальный недостаток. Снимок экрана берет только то, что видно на странице в то время. Поэтому, если у меня есть изображение в нижней части страницы, и я хочу сохранить его в зависимости от местоположения найденных элементов, возникает одна или две проблемы.

Если я сохраню скриншот, а затем попытаюсь сохранить его по местоположению, снимок экрана заканчивается в точке 1200, но изображение находится на отметке 3000. Если я сосредоточусь на изображении, а затем сделаю снимок экрана, изображение будет однако на снимке экрана местоположение не работает. Это не работает, потому что у меня все еще есть изображение высотой 1200 пикселей с расположением 3000.

Как я могу просто сказать, у меня есть изображение на 3000x 3014y, и я просто хочу его сохранить?

+1

Пожалуйста, разместите код, который вы используете. Раньше я снимал скриншоты и не имел этой проблемы. – JeffC

+0

Как говорит Джефф, добавьте более подробную информацию о плюшевых поставках, какой драйвер вы используете. – Saifur

ответ

0

Я разрешил это. Chrome против IE против Firefox делает скриншоты разными способами. Firefox скроет скриншот вместе, хром только берет то, что видно, и IE будет сжимать все, чтобы попытаться поместиться на одной странице.

Если вам нужно сделать скриншот чего-то, что не на базовой странице я хотел бы предложить Firefox

0

Вы можете в основном получить 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); 
    } 
} 
Смежные вопросы