如何构建一个像二进制文件一样的 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);
我正在使用 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);