Selenium:Chrome驱动程序只对页面的可见部分进行截屏

时间:2013-07-26 15:19:15

标签: selenium selenium-webdriver selenium-chromedriver

我需要使用chrome驱动程序来制作整页的屏幕截图,但它部分地制作了它。

File screenshotFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);

屏幕截图看起来像可见的矩形,信息正确,下方有大黑区。

4 个答案:

答案 0 :(得分:8)

这是一个众所周知的错误:https://code.google.com/p/chromedriver/issues/detail?id=294(仅适用于Chrome驱动程序,firefox驱动程序正常运行)

答案 1 :(得分:2)

可能值得尝试使用此库:

https://www.assertthat.com/posts/selenium_shutterbug_make_custom_screenshots_with_selenium_webdriver

制作整页截图:

Shutterbug.shootPage(driver, ScrollStrategy.BOTH_DIRECTIONS).save();

(它使用滚动和拼接方法)

github上的来源https://github.com/assertthat/selenium-shutterbug

提供在Chrome和其他一些扩展功能中进行全页截图的功能,这些功能在Windows和OS X上进行了测试。

成功使用我当前的项目。

答案 2 :(得分:1)

你需要使用

加载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命令的输入参数更改文件名。

希望这有帮助!

答案 3 :(得分:0)

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

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

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