在MAC上使用Selenium,提示信息为“chromedriver”可执行文件权限可能不正确。

17
我只是试图在我的 Mac 上使用 Selenium 做一些非常基本的事情,但我甚至无法打开一个网页。我收到了以下错误信息:

Traceback (most recent call last):
  File "/Users/godsinred/Desktop/InstagramLiker/GmailAccountGenerator.py", line 10, in <module>
    driver = webdriver.Chrome()
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/selenium/webdriver/chrome/webdriver.py", line 68, in __init__
    self.service.start()
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/selenium/webdriver/common/service.py", line 88, in start
    os.path.basename(self.path), self.start_error_message)
selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable may have wrong permissions. Please see https://sites.google.com/a/chromium.org/chromedriver/home

以下是我的代码:

from selenium import webdriver
import time

link = "https://accounts.google.com"
driver = webdriver.Chrome()
driver.get(link)
time.sleep(5)

driver.quit()
6个回答

20

大部分的回答都建议将文件移动到/usr/bin,如果你只是本地正常运行chromedriver,那么这个方法也许有效。然而,如果你使用类似cx_freeze的编译器将Python脚本编译成可执行文件,且程序始终使用相对路径链接chromedriver,那么你可能无法承受这种奢侈。

正如错误信息所提示的那样,你编译的程序没有权限操作chromedriver。为了在Mac上使用相对路径链接chromedriver,你可以在Python脚本中编程更改chromedriver的权限:

import os
os.chmod('/path/to/chromedriver', 0755) # e.g. os.chmod('/Users/user/Documents/my_project/chromedriver', 0755)

您可以按照以下步骤进行测试:

  1. cd 到您的工作目录

  2. $ chmod 755 chromedriver 以允许程序对其进行操作

P.S. 755usr/bin 中文件的默认数字权限。 664 是其他普通文件夹(可能是您的工作目录)中文件的默认数字权限。 因此,当 chromedriver 抱怨它没有正确的权限时,您需要授予它等于或大于 755 的数字权限。


4
Python3需要"0o755"。 - Jeff Pang
我发现这也可以用于允许Chromedriver在临时目录中运行。当运行测试时非常有用。 - Drew Mares

6
错误已经说得很清楚了:
selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable may have wrong permissions. Please see https://sites.google.com/a/chromium.org/chromedriver/home

错误明确指出检测到的chromedriver权限不正确。

解决方案

  • Download the latest chromedriver binary from ChromeDriver - WebDriver for Chrome and save it in your system.
  • Ensure that chromedriver binary have the required permissions.
  • While initiating the WebDriver and WebClient pass the argument executable_path along with the absolute path of the chromedriver binary as follows :

    from selenium import webdriver
    
    link = "https://accounts.google.com"
    driver = webdriver.Chrome(executable_path='/path/to/chromedriver')
    driver.get(link)
    

参考资料

您可以在以下链接中找到有关此问题的详细讨论:


1
非常感谢,它起作用了。我还忘记将其添加到我的路径中。 在终端中执行sudo paths /etc/paths/并将Chrome驱动程序添加到路径目录中。 - Jonathan Ishii

1
如果您使用的是Windows系统,请提供包括文件名在内的路径。例如,'./chromedriver/chromedriver.exe' 我的代码行如下。
service = webdriver.chrome.service.Service('./chromedriver/chromedriver.exe')

0
在Windows中,对我有用的方法是将驱动程序的位置添加到Windows本地PATH变量中,重新启动我的Python环境,以便在运行以下命令后显示驱动程序的路径:
import os;path = os.getenv('PATH'); print(path);

然后我在加载驱动程序时没有指定路径:

from selenium import webdriver
driver =  webdriver.Chrome()

如果我尝试在Chrome()调用中放置路径,会导致权限错误。将其添加到本地环境路径就足够了。


0

1
欢迎来到Stack Overflow!虽然链接是分享知识的好方法,但如果它们在未来失效了,它们就不会真正回答问题。在您的答案中添加回答问题的链接的基本内容。如果内容太复杂或太大而无法适应此处,请描述所提出解决方案的一般思路。请记住始终保留对原始解决方案网站的链接引用。请参见:如何撰写良好的答案? - sɐunıɔןɐqɐp

0

请查看以下主题:

1- 如果您正在使用Linux,请访问包含文件Chromedriver.exe的文件夹,将其设置为755

2- 检查代码中Chromedriver.exe文件的正确路径

3- 如果您正在使用Windows服务器,请检查当前用户是否可以访问Chromedriver.exe文件(不仅管理员可以访问Chromedriver.exe-请在c://users...中查看)


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