首页 > 解决方案 > C# Selenium Web Driver 抓取了错误的元素位置,但获得了正确的高度和宽度?

问题描述

我正在尝试截取使用 selenium web 驱动程序访问的网页的屏幕截图。

然后我想裁剪屏幕截图以仅返回特定元素。这恰好是一个图像。

我无法按位置抓取图像文件,因为重新请求相同的 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);
        }

我试图等待页面完成加载,这没有任何区别。

我试图获取父元素,但这也返回了错误的大小。

标签: c#cssselenium-webdriverxpathsystem.drawing

解决方案


推荐阅读