Я пытаюсь сделать скриншот веб-страницы, к которой я обратился, с помощью веб-драйвера selenium.
Затем я хочу обрезать снимок экрана, чтобы вернуть только определенный элемент. Это происходит с изображением.
Я не могу получить файл изображения по расположению, так как повторный запрос того же SRC сгенерирует другой файл.
Я не могу указать высоту и ширину изображения, так как оно будет динамическим.
Используя следующий код, я могу успешно вернуть высоту и ширину изображения, однако сохраненный снимок экрана - это не изображение, а другая часть страницы с такими же размерами, что и изображение, что заставляет меня поверить местоположение должно быть неправильным?
Вот код:
IWebElement image = driver.FindElement(By.XPath("//*[@id='hipTemplateContainer']/div[1]/img"));
Console.WriteLine("{0} {1} {2} {3}",image.Location.X, image.Location.Y, image.Size.Width, image.Size.Height);
TakeScreenshot(driver, image);
private static void TakeScreenshot(IWebDriver driver, IWebElement element)
{
try
{
string fileName = DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss") + ".jpg";
Byte[] byteArray = ((ITakesScreenshot)driver).GetScreenshot().AsByteArray;
System.Drawing.Bitmap screenshot = new System.Drawing.Bitmap(new System.IO.MemoryStream(byteArray));
System.Drawing.Rectangle croppedImage = new System.Drawing.Rectangle(element.Location.X, element.Location.Y, element.Size.Width, element.Size.Height);
screenshot = screenshot.Clone(croppedImage, screenshot.PixelFormat);
screenshot.Save(String.Format(@"C:\Users\Sam\Desktop\Images\" + fileName, System.Drawing.Imaging.ImageFormat.Jpeg));
}
catch (Exception e)
{
Console.WriteLine(e.StackTrace + ' ' + e.Message);
}
Я пытался дождаться окончания загрузки страницы, без разницы.
Я пытался получить родительский элемент, но это также вернуло неправильный размер.