在没有显示的 Linux 服务器上运行 Chrome WebDriver

Posted

技术标签:

【中文标题】在没有显示的 Linux 服务器上运行 Chrome WebDriver【英文标题】:Running Chrome WebDriver on a linux server with no display 【发布时间】:2011-10-24 20:01:52 【问题描述】:

我想在 linux 服务器上使用 selenium2 的 chrome webdriver 运行自动化测试。

我已经使用 Xvfb 将 firefox 设置为在服务器上运行(请参阅 http://www.semicomplete.com/blog/geekery/xvfb-firefox.html),并希望使用 chrome 做类似的事情。这可能吗?

【问题讨论】:

是的,应该可以的。你试过什么? 【参考方案1】:

我明白你想要做什么,但你可能只是运行 selenium grid。它是为自动化浏览器测试而设计的。在服务器上工作得很好。

https://www.selenium.dev/documentation/en/grid/

【讨论】:

【参考方案2】:

我无法像使用 FirefoxBinary 那样以编程方式为 ChromeDriver 执行此操作。

我已经提交了一个改进请求,其中附加了一个补丁来允许这样做。你可以在这里看到它:http://code.google.com/p/selenium/issues/detail?id=2673

编辑: 您可以在下面看到斯蒂芬关于如何使用它的回复,现在更改已被合并。:https://***.com/a/16619608/998442

【讨论】:

您的改进请求似乎被标记为已修复。你能改变你的答案来解释如何使用你的修复吗? 更新添加链接到斯蒂芬的以下响应,显示如何设置显示环境变量【参考方案3】:

我面临着同样的挑战,用 selenium + chromedriver 设置一个 linux 盒子, 这是我的笔记:

前置要求:

    安装 JRE 以运行 selenium jar

    安装 selenium 服务器

    从https://code.google.com/p/selenium/downloads/list获取jar文件)

    安装xvfb(这部分你好像已经完成了)

    为您的 linux 发行版安装 google-chrome

    下载 chrome 驱动程序 你可以从这里获取它:https://sites.google.com/a/chromium.org/chromedriver/downloads

    安装您可能需要的其他 selenium 依赖项(但以上是让 chromedriver 工作的最低要求)

运行:

    运行 xvfb

Xvfb :1 -screen 5 1024x768x8 &

export DISPLAY=:1.5

    使用 ChromeDriver 选项运行 selenium 服务器 jar。 它看起来像这样:

java -jar selenium-server-standalone-2.30.0.jar -Dwebdriver.chrome.bin=/path/to/google-chrome -Dwebdriver.chrome.driver=/path/to/chromedriver

    selenium 服务器日志应输出类似以下内容:

2013 年 3 月 19 日上午 10:07:27 org.openqa.grid.selenium.GridLauncher main 信息:启动独立服务器

将系统属性 webdriver.chrome.bin 设置为 location of google-chrome

将系统属性 webdriver.chrome.driver 设置为 location of chromedriver

10:07:34.258 INFO - RemoteWebDriver 实例应连接到:http://127.0.0.1:4444/wd/hub

10:07:34.259 信息 - 版本 Jetty/5.1.x 10:07:34.259 信息 - 启动 HttpContext[/selenium-server/driver,/selenium-server/driver] ...

参考: http://www.yann.com/en/use-xvfb-selenium-and-chrome-to-drive-a-web-browser-in-php-23/08/2012.html

干杯!

【讨论】:

【参考方案4】:

根据SetEnvironmentProperty to ChromeDriver programatically,您可以执行以下操作:

service = new ChromeDriverService.Builder()
    .usingChromeDriverExecutable(new File("/path/to/chromedriver"))
    .usingAnyFreePort()
    .withEnvironment(ImmutableMap.of("DISPLAY",":20"))
    .build();

这里是documentation for withEnvironment

【讨论】:

以上是关于在没有显示的 Linux 服务器上运行 Chrome WebDriver的主要内容,如果未能解决你的问题,请参考以下文章

Python 的selenium打包成程序后,电脑里没有安装chrom浏览器,如何运行?

浏览器层面优化前端性能:Chrom组件与进程/线程模型分析

如何无显卡运行linux

chrom浏览器-F12使用方法二

linux虚拟机开启的时候,显示内部错误,怎么解决?

Putty+Xming实现在Windows客户端显示Linux服务器端的图形化程序