错误消息:“'chromedriver'可执行文件必须在路径中可用”


171

我正在将硒与python结合使用,并已从以下站点下载了适用于Windows计算机的chromedriver:http ://chromedriver.storage.googleapis.com/index.html?path=2.15 /

下载zip文件后,我将zip文件解压缩到我的下载文件夹中。然后,我将可执行二进制文件(C:\ Users \ michael \ Downloads \ chromedriver_win32)的路径放入环境变量“路径”中。

但是,当我运行以下代码时:

  from selenium import webdriver

  driver = webdriver.Chrome()

...我不断收到以下错误消息:

WebDriverException: Message: 'chromedriver' executable needs to be available in the path. Please look at     http://docs.seleniumhq.org/download/#thirdPartyDrivers and read up at http://code.google.com/p/selenium/wiki/ChromeDriver

但是-如上所述-可执行文件在路径中是(!)...这里发生了什么?


19
尝试将其复制到chromedriver.exe与Python脚本相同的目录中。
Malik Brahimi 2015年

4
通过Chocolatey安装会将其添加到路径中choco install chromedriver
WhatIsHeDoing

对于用户在pycharm中遇到此问题,重新启动将解决该问题
Charles Chow

我同意ImNt的回答。尽管我想为那些使用virtualenv的用户添加它,但您应该使用以下示例格式以admin身份在venv文件中运行python:driver = webdriver.Chrome(r'C:/ Users / michael / Downloads / chromedriver_win32 /chromedriver.exe')–
Pineda,

@MalikBrahimi我一直在到处搜索此解决方案,直到找到您的评论之前,它们都没有真正起作用。非常感谢
user2720864

Answers:


177

您可以测试它是否确实在PATH中,如果您打开cmd并输入chromedriver(假设您的chromedriver可执行文件仍以此命名),然后按Enter。如果Starting ChromeDriver 2.15.322448显示,则PATH设置正确,并且还有其他问题。

另外,您可以像这样使用chromedriver的直接路径:

 driver = webdriver.Chrome('/path/to/chromedriver') 

因此,在您的特定情况下:

 driver = webdriver.Chrome("C:/Users/michael/Downloads/chromedriver_win32/chromedriver.exe")

3
感谢您的回答:确实出现了“正在启动ChromeDriver 2.15.322448”。“仅允许本地连接。” 也出现了。...但是我想这可以吗?....我想知道的一件事是:网站上只有chromedriver的32位版本可用....但这对我的64位Windows可以正常工作,不是吗?
stable_progress 2015年

@steady_progress是的,可以。这将适用于64位Windows。我自己用的。我怀疑硒版本可能会导致此问题?您安装了哪一个?您使用安装了它pip吗?
lmNt 2015年

如我在答案中提到的那样,在调用WebDriver时是否尝试使用驱动程序的直接路径?它是否因相同的错误而失败?
lmNt 2015年

4
将Webdriver添加到PATH时,无论使用哪种操作系统,都仅包括WebDriver的存储目录,而不包括可执行文件。示例:PATH = $ PATH:/ path / to / webdriver / folder,而不是PATH = $ PATH:/ path / to / webdriver / chromedriver。此外,使用PATH比将位置传递到webdriver.Chrome()调用更具可移植性,因为我们始终可以假设在运行代码的任何位置都正确设置了PATH,但我们不能假定它们的文件结构设置相同。
Aphid '18年

2
尝试使用相同的解决方案,但出现此错误:WebDriverException:消息:“ chromedriver.exe”可执行文件可能具有错误的权限。请访问sites.google.com/a/chromium.org/chromedriver/home
Yogesh,

149

我看到讨论仍在讨论通过下载二进制文件并手动配置路径来设置chromedriver的旧方法。

可以使用webdriver-manager自动完成

pip install webdriver-manager

现在,问题中的上述代码将可以在下面的更改中简单地工作,

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(ChromeDriverManager().install())

可以使用相同的方法来设置Firefox,Edge和二进制文件。


@Navarasu谨此致敬,当当前值为3.7时,为什么有人会遵循3.6的规定。下次明确表示它是3.6会很好
。...–

5
这太棒了,因为它也保持最新状态
Leslie Alldridge

1
该解决方案的优点在于,它比基于特定路径设置的其他解决方案具有更大的灵活性,就在多台计算机上使用脚本而言,我认为这是不切实际的。
IBRAHIM


13

在Linux(Ubuntu或Debian)上:

sudo apt install chromium-chromedriver

在macOS上安装https://brew.sh/然后执行

brew cask install chromedriver

然后使用:driver = webdriver.Chrome('/ usr / lib / chromium-browser / chromedriver')..不更改$ PATH
alchemy

@alchemy您确定需要这样做吗?我记得它对driver = webdriver.Chrome()我来说很好。
鲍里斯

鲍里斯,您好,是的,不确定为什么。我敢肯定正确设置路径会更好,但我只需要快速使用Chromedriver做一件事
alchemy

9

r对于原始字符串,我们必须添加路径字符串,以字符串之前的字母开头。我以这种方式进行了测试,并且有效。

driver = webdriver.Chrome(r"C:/Users/michael/Downloads/chromedriver_win32/chromedriver.exe")

3

一些额外的输入/说明,供以后使用该线程的读者使用,以避免修改PATH env。Windows级别的变量并重新启动Windows系统:(从https://stackoverflow.com/a/49851498/9083077复制我的答案,适用于Chrome):

(1)下载chromedriver(如本主题前面所述),然后将(解压缩的)chromedriver.exe放在X:\ Folder \ of \ your \ choice中

(2)Python代码示例:

import os;
os.environ["PATH"] += os.pathsep + r'X:\Folder\of\your\choice';

from selenium import webdriver;
browser = webdriver.Chrome();
browser.get('http://localhost:8000')
assert 'Django' in browser.title

注意:(1)示例代码(在引用的答案中)可能需要5秒钟打开Firefox浏览器以获取指定的URL。(2)如果尚无服务器在指定的url上运行或提供标题为字符串'Django'的页面,则python控制台将显示以下错误:在browser.title AssertionError中断言'Django'。


3

对于Linux和OSX

步骤1:下载chromedriver

# You can find more recent/older versions at http://chromedriver.storage.googleapis.com/
# Also make sure to pick the right driver, based on your Operating System
wget http://chromedriver.storage.googleapis.com/81.0.4044.69/chromedriver_mac64.zip

第2步:将chromedriver添加到 /usr/local/bin

unzip chromedriver_mac64.zip
cp chromedriver /usr/local/bin

您现在应该可以运行

from selenium import webdriver

browser = webdriver.Chrome()
browser.get('http://localhost:8000')

没有任何问题


明确指出他正在使用Windows,这是针对Linux的。
凌晨

1
@misantroop我已经更新了我的答案以使其更清楚。
Giorgos Myrianthous,

2

解压缩chromedriver时,请务必指定确切位置,以便以后进行跟踪。在下面,您将为您的操作系统找到合适的chromedriver,然后将其解压缩到一个确切的位置,稍后可以在代码中将其作为参数提供。

wget http://chromedriver.storage.googleapis.com/2.10/chromedriver_linux64.zip unzip chromedriver_linux64.zip -d /home/virtualenv/python2.7.9/


3
或要/usr/local/bin/全局安装。
杰普

2

如果您正在使用机器人框架RIDE。然后,您可以Chromedriver.exe从其官方网站下载并将此.exe文件保存在C:\Python27\Scripts目录中。现在将此路径作为环境变量提及。C:\Python27\Scripts\chromedriver.exe

重新启动计算机,然后再次运行相同的测试用例。您不会再遇到此问题。


2

根据说明,您需要在实例化webdriver时包括ChromeDriver的路径。Chrome例如:

driver = webdriver.Chrome('/path/to/chromedriver')

如果将这些说明向右滚动,则会出现一条注释,指出“可选参数,如果未指定,将搜索路径”。但是至少某些版本的webdriver似乎会检查他们在路径中找到的任何chromedriver,如果它对它不满意(错误的版本等),它将不会使用它(除非通过设置此参数被迫尝试尝试)。它会一直在寻找更好版本的路径,如果找不到它,则会抱怨。(“找不到合适的chromedriver”比“找不到合适的chromedriver”更好。)
Silas S. Brown

2

在将chromedriver添加到路径之前,请确保它与浏览器的版本相同。

如果不是,则需要匹配版本:更新/降级chrome,以及升级/降级webdriver。

我建议您尽可能多地更新Chrome版本,并匹配网络驱动程序。

要更新Chrome:

  • 在右上角,单击三个点。
  • 点击help->About Google Chrome
  • 更新版本并重新启动chrome

然后从此处下载兼容版本:http : //chromedriver.chromium.org/downloads

注意:最新的chromedriver并不总是与最新版本的chrome匹配!

现在,您可以将其添加到PATH中:

  1. 在您计算机的某个位置创建一个新文件夹,您将在其中放置Web驱动程序。我创建了一个命名的文件夹webdriversC:\Program Files

  2. 复制文件夹路径。就我而言C:\Program Files\webdrivers

  3. 右键单击this PC-> properties

在此处输入图片说明

  1. 在右键上 Advanced System settings
  2. 请点击 Environment Variables
  3. 在中System variables,单击,path然后单击edit
  4. 点击 new
  5. 粘贴之前复制的路径
  6. 在所有窗口上单击确定

而已!我使用了pycharm,不得不重新打开它。也许与其他IDE或终端相同。


1

如果您完全确定PATH设置正确,可以尝试重新启动计算机,如果它无法正常工作。

就Windows 7而言,我总是在WebDriverException上出现错误:消息:对于chromedriver,gecodriver,IEDriverServer。我很确定我有正确的路径。重启电脑,一切正常


0

就我而言,当我将chromedriver文件复制到c:\ Windows文件夹时,此错误消失了。这是因为Windows目录位于python脚本检查chromedriver可用性的路径中。


0

如果使用远程解释器,则还必须检查是否定义了其可执行文件PATH。在我的情况下,从远程Docker解释器切换到本地解释器解决了问题。


0

我遇到了与您相同的问题。我正在使用PyCharm编写程序,我认为问题出在PyCharm中而不是OS中。我解决了该问题,方法是进行脚本配置,然后手动编辑环境变量中的PATH。希望对您有所帮助!


另一个选择是将您的chromedriver直接移动到/ usr / local / bin,那么您根本不必为添加路径而烦恼
sia1998 '19


0

最好的方法可能是获取当前目录并将剩余地址附加到该目录。像这样的代码(Windows上的Word。在Linux上,您可以使用pwd行): webdriveraddress = str(os.popen("cd").read().replace("\n", ''))+'\path\to\webdriver'


0

当我下载chromedriver.exe时,我只是将其移动到PATH文件夹C:\ Windows \ System32 \ chromedriver.exe中,却遇到了完全相同的问题。

对我来说,解决方案是只更改PATH中的文件夹,因此我将其移到了PATH中也位于Pycharm Community bin文件夹中。例如:

  • C:\ Windows \ System32 \ chromedriver.exe->给我例外
  • C:\ Program Files \ JetBrains \ PyCharm Community Edition 2019.1.3 \ bin \ chromedriver.exe->运行正常

0

Mac Mojave运行机器人测试框架和Chrome 77时出现了此问题。这解决了问题。感谢@Navarasu将我指向正确的轨道。

$ pip install webdriver-manager --user # install webdriver-manager lib for python
$ python # open python prompt

接下来,在python提示符下:

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(ChromeDriverManager().install())

# ctrl+d to exit

这导致以下错误:

Checking for mac64 chromedriver:xx.x.xxxx.xx in cache
There is no cached driver. Downloading new one...
Trying to download new driver from http://chromedriver.storage.googleapis.com/xx.x.xxxx.xx/chromedriver_mac64.zip
...
TypeError: makedirs() got an unexpected keyword argument 'exist_ok'
  • 我现在得到了最新的下载链接
    • 将chromedriver下载并解压缩到所需位置
    • 例如: ~/chromedriver/chromedriver

~/.bash_profile用编辑器打开并添加:

export PATH="$HOME/chromedriver:$PATH"

打开新的终端窗口,ta-da🎉


0

我在Webdriver 3.8.0(Chrome 73.0.3683.103和ChromeDriver 73.0.3683.68)上遇到了此问题。我做完之后问题就消失了

pip install -U selenium

将Webdriver升级到3.14.1。


0

最好的确定方法是在这里:

下载并解压缩chromedriver并将chromedriver.exe放入C:\ Python27 \ Scripts中,然后您无需提供驱动程序的路径,只需

driver= webdriver.Chrome()

您无需添加路径或其他任何操作


0

检查您的Chrome驱动程序的路径,它可能无法从那里获取。只需复制即可将驱动程序位置粘贴到代码中。


-3

(对于Mac用户)我有同样的问题,但是我通过以下简单方法解决了:您必须将chromedriver.exe放在执行脚本的同一文件夹中,然后在pyhton中编写以下指令:

导入操作系统

os.environ [“ PATH”] + = os.pathsep + r'X:/您的/文件夹/脚本/'


2
您提出的解决方案与其他用户之一完全相同。发布前,请注意其他答案。
Nikita Kniazev '18年

@walid_data并不是说这可能是仅Windows的问题吗?
benc
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.