如何使用Xvfb和Selenium拍摄Retina屏幕截图

Jan*_*ing 7 selenium screenshot retina-display xvfb selenium-chromedriver

我想为我的混合应用程序拍摄一些屏幕截图,以便自动连接.我正在运行Ubuntu 14.04.chromedriver 2.15.322448

使用Selenium和Xvfb可以轻松截取屏幕截图.但是获取视网膜截图并不容易.

我用更高的dpi开始了我的Xvfb:

/usr/bin/Xvfb :99 -screen 0 2000x2000x24 -dpi 200
Run Code Online (Sandbox Code Playgroud)

当我检查显示信息时,一切似乎都是正确的:

xdpyinfo -display :99

...
screen #0:
  dimensions:    2000x2000 pixels (254x254 millimeters)
  resolution:    200x200 dots per inch
  depths (6):    24, 1, 4, 8, 16, 32
...
Run Code Online (Sandbox Code Playgroud)

然后我就像这样开始我的chromedriver

private WebDriver getChromeDriver ( Phone phone )
{
    Map<String, Object> deviceMetrics = new HashMap<String, Object>();
    deviceMetrics.put("width", 320);
    deviceMetrics.put("height", 460);
    deviceMetrics.put("pixelRatio", 2);
    Map<String, Object> mobileEmulation = new HashMap<String, Object>();
    mobileEmulation.put("deviceMetrics", deviceMetrics);
    mobileEmulation.put("userAgent", "iphone4");

    ChromeDriverService cds = new ChromeDriverService.Builder().withEnvironment(ImmutableMap.of("DISPLAY", ":99")).build();

    Map<String, Object> chromeOptions = new HashMap<String, Object>();
    chromeOptions.put("mobileEmulation", mobileEmulation);
    DesiredCapabilities capabilities = DesiredCapabilities.chrome();
    capabilities.setCapability(ChromeOptions.CAPABILITY, chromeOptions);
    WebDriver driver = new ChromeDriver(cds, capabilities);
    return driver;
}
Run Code Online (Sandbox Code Playgroud)

在其他一些无聊的代码之后,我会截取屏幕截图:

 File srcFile = ( (TakesScreenshot) driver ).getScreenshotAs(OutputType.FILE);
Run Code Online (Sandbox Code Playgroud)

这不起作用.屏幕截图是常规dpi.所以捕获的网站图像只有320x460而不是640x960.

我在截取屏幕截图之前设置了一个断点,然后像这样转储帧缓冲:

export DISPLAY=:99 
xwd -root -silent | xwdtopnm |pnmtojpeg > screen.jpg
Run Code Online (Sandbox Code Playgroud)

xwd转储虚拟帧缓冲区内容的结果

正如您所看到的,标题栏是针对较高的dpi呈现的,但浏览器窗口的其余部分则没有.

那么我怎样才能运行一个带有更多dpi的chromedriver来拍摄视网膜截图?可能吗?

Jan*_*ing 6

如果您只想获取一些屏幕主机,您可以使用 google chrome headless 工具。例如,获取 Retina 屏幕截图就像

$ google-chrome --headless --hide-scrollbars --disable-gpu \
                --screenshot --force-device-scale-factor=2 \
                --window-size=750,1334 https://www.kicktipp.de/
Run Code Online (Sandbox Code Playgroud)