如何在Linux平台上使用Selenium实现ChromeDriver

22

有人能告诉我如何在Linux平台上使用Selenium中的Chrome驱动程序吗?

我把我的Chrome驱动程序放在用户名/家目录/chromedriver位置。

我的代码是:

System.setProperty("webdriver.chrome.driver", "/home/username/ChromeDriver/chrome‌​driver");
driver = new ChromeDriver();
driver.get("facebook.com");

我收到的错误信息是:

org.openqa.selenium.WebDriverException:无法启动或连接Chrome。 请检查ChromeDriver是否为最新版本。

使用的Chrome二进制文件位于:/opt/google/chrome/google-chrome

(警告:服务器未提供任何堆栈跟踪信息)


你的Chrome驱动程序位置(username/home/chromedriver)和配置(/home/username/ChromeDriver/chrome‌​driver)不匹配。请确保在每个位置使用正确的路径。除此之外,一切都应该没问题,这也是我初始化Chrome的方式。尝试重新下载所有部分。别忘了解压缩chromedriver包。 - Petr Janeček
6个回答

26

根据官方文档

要求

ChromeDriver使用Chrome的自动化代理框架来控制浏览器。

服务器希望您在每个系统的默认位置安装了Chrome:

OS          Expected Location of Chrome
-------------------------------------
Linux          /usr/bin/google-chrome
Mac            /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome
Windows XP     %HOMEPATH%\Local Settings\Application Data\Google\Chrome\Application\chrome.exe
Windows Vista  C:\Users\%USERNAME%\AppData\Local\Google\Chrome\Application\chrome.exe

对于 Linux 系统,ChromeDriver 期望 /usr/bin/google-chrome 是指向实际 Chrome 可执行文件的符号链接。另请参阅覆盖 Chrome 可执行文件位置一节。

入门

要开始设置,请首先下载适当的预构建服务器。确保服务器可以在 PATH 中找到或通过 webdriver.chrome.driver 系统属性指定其位置。最后,您只需要创建一个新的 ChromeDriver 实例:

WebDriver driver = new ChromeDriver();
driver.get("http://www.google.com");
因此,下载所需版本的chromedriver,将其解压缩到您的PATH中的某个位置(或通过系统属性指定路径),然后运行驱动程序。

嗨,我的Chrome驱动程序位置在“用户名/主页/ chromedriver”。 因此,我的代码… - user2732362
System.setProperty("webdriver.chrome.driver","/home/username/ChromeDriver/chromedriver");driver = new ChromeDriver(); driver.get("http://www.facebook.com");我遇到的错误是,org.openqa.selenium.WebDriverException: 无法启动或连接到Chrome。请检查ChromeDriver是否为最新版本。使用的Chrome二进制文件位于:/opt/google/chrome/google-chrome(警告:服务器未提供任何堆栈跟踪信息) - user2732362
它链接到的文档页面没有包含任何信息。 - Timo Huovinen
“Getting Started” 部分的 下载 链接已经失效。 - Aaron Lelevier
@AaronLelevier 谢谢,我修复了链接。 - Petr Janeček

13

我们已经成功安装

sudo apt-get install unzip
wget -N http://chromedriver.storage.googleapis.com/2.10/chromedriver_linux64.zip -P ~/Downloads
unzip ~/Downloads/chromedriver_linux64.zip -d ~/Downloads
chmod +x ~/Downloads/chromedriver
sudo mv -f ~/Downloads/chromedriver /usr/local/share/chromedriver
Change the directory to /usr/bin/chromedriver
sudo ln -s /usr/local/share/chromedriver /usr/local/bin/chromedriver
sudo ln -s /usr/local/share/chromedriver /usr/bin/chromedriver
现在运行脚本并在环境文件中添加以下内容。
Capybara.register_driver :chrome do |app| client = Selenium::WebDriver::Remote::Http::Default.new Capybara::Selenium::Driver.new(app, :browser => :chrome, :http_client => client) end

Capybara.javascript_driver = :chrome

注意:根据您的操作系统类型(如32位或64位),更改Chrome驱动程序版本。


执行完“chmod -x ...”命令后,您只需执行以下命令即可:“sudo mv -f ~/Downloads/chromedriver /usr/local/bin”。 - ivangtorre
这些指令现在已经相当老了,而且 Chrome 驱动程序版本已经多次更改。请确保您的 Chrome 浏览器版本与驱动程序版本匹配。 - Martlark

5
以下是一个完整的Linux 18.04脚本,用于安装Google Chrome和Chrome驱动程序。 它应该会自动调整以收集适用于浏览器的正确Chrome驱动程序。
#!/usr/bin/env bash
# install the latest version of Chrome and the Chrome Driver
apt-get update && apt-get install -y libnss3-dev
version=$(curl http://chromedriver.storage.googleapis.com/LATEST_RELEASE)
wget -N http://chromedriver.storage.googleapis.com/${version}/chromedriver_linux64.zip
unzip chromedriver_linux64.zip -d /usr/local/bin
chmod +x /usr/local/bin/chromedriver
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
dpkg -i google-chrome-stable_current_amd64.deb; apt-get -fy install

在执行最后一个语句时,它会显示“无法获取dpkg前端锁(/var/lib/dpkg/lock-frontend),您是否为root用户?”即使我已经授予sudo权限。 - Devarshi Goswami
我怀疑这是因为您已经在其他地方运行了dpkg或apt。 - Martlark
1
不是的。我已经重新检查过了。我在这行代码之后得到了那个错误Processing triggers for man-db (2.8.3-2ubuntu0.1) ... E: Could not open lock file /var/lib/dpkg/lock-frontend - open (13: Permission denied) E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root? - Devarshi Goswami

4

以下是对这些命令的翻译:

  1. 解压文件 -> unzip -q chromedriver_linux64.zip
  2. 将文件强制复制到目录“usr/bin” -> sudo mv -f chromedriver /usr/bin

Selenium 代码大概是这样的。


System.setProperty("webdriver.chrome.driver","/usr/bin/chromedriver");

WebDriver driver = new ChromeDriver();

driver.get("https://mvnrepository.com");

driver.close();

1
谢谢您提供这个简单而直接的解决方案。我通过这种方式成功解决了“chromedriver需要在路径中”的错误。 - Akshay Gaur

0

您可以查看this example中的小例子。

对于Linux,我下载了Chrome驱动程序,并将其保存为系统路径变量(或放在现有路径文件夹中)。然后,我使用以下方式(添加属性并使用Chrome驱动程序的路径进行初始化)。

System.setProperty("webdriver.chrome.driver", "/usr/local/bin/chromedriver");
ChromeDriverService service = new ChromeDriverService.Builder()
                .usingDriverExecutable(new File("/usr/local/bin/chromedriver"))
                .usingAnyFreePort()
                .build();
        try {
            service.start();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return new RemoteWebDriver(service.getUrl(), DesiredCapabilities.chrome());

0
这个shell脚本将帮助你在Linux系统中下载并安装最新版本的Chrome驱动和Google Chrome浏览器。
#!/bin/sh
#get latest version
version=`curl http://chromedriver.storage.googleapis.com/LATEST_RELEASE)`;
echo 'Currently LATEST_RELEASE:' $version;
#download the latest version chrome driver available as per the above line
wget -N http://chromedriver.storage.googleapis.com/${version}/chromedriver_linux64.zip
unzip chromedriver_linux64.zip -d /usr/local/bin
chmod a+x /usr/local/bin/chromedriver
#install latest google chrome 
yum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
google_version=`google-chrome --version`;
echo 'Google Chrome Version:' $google_version;
echo 'End of the script'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接