我使用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中调用包装脚本。
答案 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);