如何构建像二进制文件一样的google-chrome包装器脚本?

时间:2015-12-08 18:19:58

标签: java bash selenium selenium-chromedriver xvfb

我使用selenium和chromedriver来控制debian linux下的一些chrome实例。我想让这些chrome实例无头,我也希望通过具有不同显示分辨率的Xvfb在不同的虚拟显示器上启动它们。

我的java / selenium代码直接使用chrome二进制文件完成perfekt(非无头)。严格来说,chrome二进制文件(/ usr / bin / google-chrome)也只是路径中的包装脚本。使用我自己制作的chrome包装器脚本(并在chromeOptions中将其设置为二进制文件,如此处所述:https://sites.google.com/a/chromium.org/chromedriver/capabilities)它不起作用,但失败的地方为:unknown error: Chrome failed to start: exited abnormally

我认为原因是我的包装脚本。有什么不对或我应该改进什么? 这是脚本:

#!/bin/bash
export DISPLAY=:1920
cd /usr/bin/
google-chrome "$@"

java-code,它通过chromeOptions将包装器脚本设置为chrome binary:

// set custom binary
ChromeOptions options = new ChromeOptions();
options.setBinary("/path/to/executable-wrapper-script");

请提醒Xvfb显示器正在运行,这不是问题所在。我用x11vnc测试了它们,我也开始使用chrome,直接在我的shell中调用包装脚本。

1 个答案:

答案 0 :(得分:1)

我解决了主要问题,因此不再需要问题中的解决方法了。正如这里已经描述的那样(https://groups.google.com/forum/#!topic/chromedriver-users/aFVdnfN0_HI)我现在可以为每个chrome实例设置DISPLAY变量来控制应该在哪个显示器上启动实例。

只需使用以下方法之一设置显示环境变量:

ChromeDriverService chromeDriverService = new ChromeDriverService.Builder()
                            .usingDriverExecutable(new File(ChromeUtils.getChromeDriverPath()))
                            .usingAnyFreePort()
                            .withEnvironment(ImmutableMap.of("DISPLAY",":1024"))
                            .build();

                    try {
                        chromeDriverService.start();
                        webDriver = new ChromeDriver(chromeDriverService, caps);
                    } ....

或使用chromeOptions的简单参数:

args.add("--display=:1024");
chromeOptions.addArguments(args);