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

How to build a google-chrome wrapper script which acts like the binary?

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

我的 java/selenium 代码直接使用 chrome 二进制文件(非无头)完美运行。严格来说 chrome 二进制文件 (/usr/bin/google-chrome) 也只是路径中的包装脚本。使用我自制的 chrome 包装器脚本(并在 chrome 选项中将其设置为二进制文件,如此处所述: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-通过chrome选项将包装脚本设置为chrome二进制代码:

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

请注意 Xvfb 显示是 运行,所以这不是问题所在。我用 x11vnc 测试了它们,我也开始使用它们 chrome,直接在我的 shell.

中调用包装器脚本

我解决了主要问题,因此不再需要问题中的解决方法。正如这里已经描述的那样 ( 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);
                    } ....

或者为chrome选项使用一个简单的参数:

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