在Chrome中运行Selenium WebDriver的Python绑定

154
我在使用Selenium时遇到了一个问题。对于我的项目,我必须使用Chrome浏览器。然而,在使用Selenium启动Chrome后,我无法连接到该浏览器。
由于某种原因,Selenium无法自动找到Chrome。当我尝试启动没有包含路径的Chrome时,就会出现以下情况:
Traceback (most recent call last):
  File "./obp_pb_get_csv.py", line 73, in <module>
    browser = webdriver.Chrome() # Get local session of chrome
  File "/usr/lib64/python2.7/site-packages/selenium/webdriver/chrome/webdriver.py", line 46, in __init__
    self.service.start()
  File "/usr/lib64/python2.7/site-packages/selenium/webdriver/chrome/service.py", line 58, in start
    and read up at http://code.google.com/p/selenium/wiki/ChromeDriver")
selenium.common.exceptions.WebDriverException: Message: 'ChromeDriver executable needs to be available in the path.                 Please download from http://code.google.com/p/selenium/downloads/list                and read up at http://code.google.com/p/selenium/wiki/ChromeDriver'

为了解决这个问题,我在启动Chrome的代码中加入了Chromium的路径。然而,解释器无法找到一个可连接的套接字:
Traceback (most recent call last):
  File "./obp_pb_get_csv.py", line 73, in <module>
    browser = webdriver.Chrome('/usr/bin/chromium') # Get local session of chrome
  File "/usr/lib64/python2.7/site-packages/selenium/webdriver/chrome/webdriver.py", line 46, in __init__
    self.service.start()
  File "/usr/lib64/python2.7/site-packages/selenium/webdriver/chrome/service.py", line 64, in start
    raise WebDriverException("Can not connect to the ChromeDriver")
selenium.common.exceptions.WebDriverException: Message: 'Can not connect to the ChromeDriver'

我也尝试通过启动Chrome来解决这个问题:
chromium --remote-shell-port=9222

然而,这也没有起作用。
附注:这是关于我的系统的一些信息:
www-client: chromium 15.0.874.121
dev-lang:   python 2.7.2-r3 Selenium 2.11.1
OS:         GNU/Linux Gentoo Kernel 3.1.0-gentoo-r1

我只是想让您知道,“--remote-shell-port”不是一个有效的命令行选项。请参见:http://peter.sh/experiments/chromium-command-line-switches/ (正确的选项是“--remote-debugging-port”。请注意,在使用该选项之前,您需要关闭所有的Chromium实例。即在现有浏览器会话中创建新窗口是无效的)。 - dpat
9个回答

137

您需要确保独立的ChromeDriver二进制文件(与Chrome浏览器二进制文件不同)要么在您的路径中,要么在webdriver.chrome.driver环境变量中可用。

请参阅http://code.google.com/p/selenium/wiki/ChromeDriver获取有关如何连接所有内容的完整信息。

编辑:

好的,似乎Python绑定程序存在一个错误,无法从路径或环境变量中读取chromedriver二进制文件。如果chromedriver不在您的路径中,则似乎必须将其作为参数传递给构造函数。

import os
from selenium import webdriver

chromedriver = "/Users/adam/Downloads/chromedriver"
os.environ["webdriver.chrome.driver"] = chromedriver
driver = webdriver.Chrome(chromedriver)
driver.get("http://stackoverflow.com")
driver.quit()

抱歉忘了提。我有这个链接。 - Akendo
2
尝试使用Chromedriver而不是Firefox Webdriver,性能提升了近三倍。 - UberNeo
4
另外,只想提一下传递给构造函数的参数是_ChromeDriver二进制文件_的路径,而不是_包含ChromeDriver二进制文件的目录_(浪费了过去半个小时来找出问题所在)。 - TheRookierLearner

115

针对Linux系统

  1. 检查您是否安装了最新版本的Chrome浏览器-> chromium-browser -version

  2. 如果没有安装,请安装最新版本的Chrome浏览器sudo apt-get install chromium-browser

  3. 这里获取适当版本的Chrome驱动程序

  4. 解压缩chromedriver.zip文件

  5. 将文件移动到/usr/bin目录中sudo mv chromedriver /usr/bin

  6. 进入/usr/bin目录cd /usr/bin

  7. 现在,您需要运行类似sudo chmod a+x chromedriver的命令来标记它可执行。

  8. 最后,您可以执行代码。

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://www.google.com")
print driver.page_source.encode('utf-8')
driver.quit()

1
非常好!有一点需要注意的是,我只能使用32位的chromedriver才能在64位的linux上运行。 - Imran
在Ubuntu(14.04)上,您可以安装chromium-chromdriver软件包(例如使用apt-get),并将chromedriver文件的路径添加到PATH shell变量PATH =“ $ {PATH}”:/ usr / lib / chromium-browser /。如果您将此添加到.bashrc中,则每次要使用selenium进行测试时都不需要设置它。 - Arpad Horvath -- Слава Україні
1
实际上这个答案应该有更多的点赞。基本上这是每个驱动程序都应该采用的方式,就像geckodriver一样。 - holzkohlengrill
我的chromium-browser版本显示为(Chromium 67.0.3396.99 构建于Ubuntu,运行于Ubuntu 16.04),但链接中只有2.0-2.9版本。需要一些帮助。 - Vaibhav Maheshwari
1
请移除 display.stop() @Vicky,那个不起作用并且会出错。顺便说一下,谢谢。愿上帝保佑你。 - Aniket Malik

94

仅适用于Mac OS X

更简单的方式(假设您已经安装了Homebrew,如果尚未安装,请先安装Homebrew并让其让您的生活更轻松)是只需运行以下命令:

brew install chromedriver

那应该将chromedriver放置在您的路径中,然后您就可以开始了。


无法在Mac上运行。selenium.common.exceptions.WebDriverException: Message: 'chromedriver'可执行文件需要在PATH中。 - wyx
2
@wyx 你的环境可能没有正确设置。尝试运行 brew doctor 命令,看看是否有任何问题。 - Jachin
4
这是那种温馨而愉悦的时刻,当你发现拥有一台Mac电脑是多么容易。太方便了。 - User
1
HEART!我喜欢啤酒 - RHSMan

54

适用于Windows

此直接链接下载ChromeDriver,或者此页面获取最新版本。

chromedriver.exe文件粘贴到C:\Python27\Scripts文件夹中。

现在应该可以正常工作了:

from selenium import webdriver
driver = webdriver.Chrome()

23

对于Windows系统,请将chromedriver.exe放置在 <安装目录>/Python27/Scripts/下。


еңЁUbuntuдёӯеә”иҜҘжҠҠintж”ҫеңЁ/usr/lib/иҝҳжҳҜе…¶д»–ең°ж–№пјҹ - Gaurav Jain
将文件放在 PATH 中还不够,将其放到 /Scripts/ 目录下与 ride.py 同级才行。 - Qwerty
请在Linux环境下给我建议。谢谢! - phancuongviet

1
在Ubuntu上,您只需执行以下操作:
sudo apt install chromium-chromedriver

并且它应该可以正常工作。


1

有两种方法可以在Google Chrome中运行Selenium Python测试。我考虑的是Windows(在我的情况下是Windows 10):

先决条件:从以下链接下载最新的Chrome驱动程序:Downloads - ChromeDriver - WebDriver for Chrome

方法1:

i)将已下载的ZIP文件提取到您选择的目录/位置中
ii)在您的代码中设置可执行路径,如下所示:

self.driver = webdriver.Chrome(executable_path='D:\Selenium_RiponAlWasim\Drivers\chromedriver_win32\chromedriver.exe')

方法2:

i)将chromedriver.exe文件粘贴到<安装目录>/Python/Scripts/下(在我的情况下,文件夹为:C:\Python36\Scripts
ii)现在按照以下简单代码进行编写:

self.driver = webdriver.Chrome()

下载站点上有以下提示:“请注意,我们已迁移到新的ChromeDriver网站。当前网站将很快被弃用。” - Peter Mortensen

0

对于 Windows 的 IDE:

如果你的路径不起作用,可以尝试将 chromedriver.exe 添加到你的项目中,就像这个项目结构一样。

chromedriver.exe

然后你应该在你的主文件中加载 chromedriver.exe。至于我,我在 driver.py 中加载了 driver.exe

def get_chrome_driver():
return webdriver.Chrome("..\\content\\engine\\chromedriver.exe",
                            chrome_options='--no-startup-window')

.. 表示 driver.py 的上级目录

. 表示 driver.py 所在的目录


0
自从Selenium 4.6.0版本以后,你不需要像下面展示的那样手动安装Selenium Manager(webdriver-manager),因为根据博客的说法,它已经包含在Selenium中了。
pip install webdriver-manager

自从Selenium 4.11.0版本以后,下面的代码就足够了,因为Selenium Manager可以自动发现您计算机上安装的浏览器版本,然后根据博客自动下载适合该版本的驱动程序。
from selenium import webdriver

driver = webdriver.Chrome()

*我的回答用如何使用Chrome,Seleniumpytest-djangoDjango来测试Django Admin进行了解释。

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