Selenium:chrome驱动程序使屏幕截图成为页面的可见部分

Selenium:chrome驱动程序使屏幕截图成为页面的可见部分,selenium,selenium-webdriver,selenium-chromedriver,Selenium,Selenium Webdriver,Selenium Chromedriver,我需要用chrome驱动程序做整个页面的屏幕截图,但它部分地做到了 File screenshotFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE); 屏幕截图看起来是一个可见的矩形,下面有正确的信息和大的黑色区域。这是一个已知的错误:(仅适用于Chrome驱动程序,firefox驱动程序工作正常)您需要使用 加载html2canvas.js var script = document.createElement

我需要用chrome驱动程序做整个页面的屏幕截图,但它部分地做到了

File screenshotFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
屏幕截图看起来是一个可见的矩形,下面有正确的信息和大的黑色区域。

这是一个已知的错误:(仅适用于Chrome驱动程序,firefox驱动程序工作正常)

您需要使用

加载html2canvas.js

var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'https://github.com/niklasvh/html2canvas/releases/download/0.5.0-alpha1/html2canvas.js';
document.head.appendChild(script);
通过此命令下载完整页面屏幕截图的命令

html2canvas(document.body).then(function(canvas) {
    var a = document.createElement('a');
        // toDataURL defaults to png, so we need to request a jpeg, then convert for file download.
        a.href = canvas.toDataURL("image/jpeg").replace("image/jpeg", "image/octet-stream");
        a.download = 'somefilename.jpg';
        a.click();
})
您可以使用javascriptexecutor调用此脚本并获得所需的结果,因为图像下载将自动启动到默认下载位置,并且您可以使用selenium的javascriptexecutor命令的输入参数更改文件名


希望这有帮助

可能值得尝试使用此库:

要制作完整页面的屏幕截图,请执行以下操作:

Shutterbug.shootPage(driver, ScrollStrategy.BOTH_DIRECTIONS).save();
(它使用滚动和缝合方法)

github上的源代码

提供在Windows和OS X上测试的Chrome和其他一些扩展功能中制作全页屏幕截图的能力


在我当前的项目中成功使用。

我知道这是一个旧线程,但我想展示Selenium的ITakesScreenshot的使用

using OpenQA.Selenium;
using System.Drawing.Imaging;

((ITakesScreenshot)driver).GetScreenshot().SaveAsFile(@"YourImageNameHere.png", ImageFormat.Png);

对于手头的工作来说,这是一个很棒的实用程序。卷轴和缝合很好,但是粘贴标题会破坏它。在截图之前,您可以尝试将相对位置设置为粘贴标题。类似于:((JavascriptExecutor)webDriver.executeScript(“参数[0].style.position='relative',stickyHeaderEl”);已经三年半了,看不到修复的迹象。IE、Edge和Opera也模仿了chromes的窃听行为,直到2016年11月,最后一次抵制的是firefox。现在,最新的firefox驱动程序删除了完整的页面截图,以模拟这种行为。因此,在被标记为chrome bug 3年后,它现在已经成为一项功能。此外,需要注意的是,屏幕截图只能显示在可视的查看端口上。Chrome驱动程序的行为符合规范。这是一个很有希望的想法,但质量不是很好,很多网站都实施了跨域脚本预防措施:(