c# - 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);
}
我试图等待页面完成加载,这没有任何区别。
我试图获取父元素,但这也返回了错误的大小。
解决方案
推荐阅读
- unix - 每连续两行合并
- windows - 使 cmd / powershell / windows 使用单独的 tesseract 安装,而不是来自 Chocolatey 的安装
- c++ - 无法使用 isdigit() 检测字符串中的数字
- python - 通过递归就地修改
- go - DynamoDB、STS 和 golang
- c# - UWP 使用 NamedPipes 向 Windows 服务发送消息
- wordpress - 使用 Gutenberg 作为编辑器时无法访问 WooCommerce 中的产品评论
- javascript - 在 jQuery 中寻找 Touchstart / Touchend 的解决方法
- javascript - 如何将 koa-session 数据传递给 NextJS 中的页面组件?
- r - 绘图时,如何过滤掉ggplot2中总和<10的值?