在 Mac 上使用 selenium 和 chromedriver

Posted

技术标签:

【中文标题】在 Mac 上使用 selenium 和 chromedriver【英文标题】:Use selenium with chromedriver on Mac 【发布时间】:2017-01-18 13:50:22 【问题描述】:

我想,但我遇到了一些麻烦。

    我从ChromeDriver - WebDriver for Chrome下载chromedriver 但我不想把它放到 PATH 中。所以我这样做了。

import os

from selenium import webdriver

PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
DRIVER_BIN = os.path.join(PROJECT_ROOT, "bin/chromedriver_for_mac")
print DRIVER_BIN
browser = webdriver.Chrome(DRIVER_BIN)
browser.get('http://www.baidu.com/')

但我无法得到我想要的结果。

Traceback (most recent call last):
  File "/Users/wyx/project/python-scraping/se/test.py", line 15, in <module>
    browser = webdriver.Chrome(DRIVER_BIN)
  File "/Users/wyx/project/python-scraping/.env/lib/python2.7/site-packages/selenium/webdriver/chrome/webdriver.py", line 62, in __init__
    self.service.start()
  File "/Users/wyx/project/python-scraping/.env/lib/python2.7/site-packages/selenium/webdriver/common/service.py", line 71, in start
    os.path.basename(self.path), self.start_error_message)
selenium.common.exceptions.WebDriverException: Message: 'chromedriver_for_mac' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home

Exception AttributeError: "'Service' object has no attribute 'process'" in <bound method Service.__del__ of <selenium.webdriver.chrome.service.Service object at 0x107f96150>> ignored

    然后我运行brew cask install chromedriver。我只运行这个 没有驱动程序路径。

    browser = webdriver.Chrome()
    browser.get('http://www.baidu.com/')
    

但它也不能工作。

Traceback (most recent call last):
  File "/Users/wyx/project/python-scraping/se/test.py", line 16, in <module>
    browser = webdriver.Chrome()
  File "/Users/wyx/project/python-scraping/.env/lib/python2.7/site-packages/selenium/webdriver/chrome/webdriver.py", line 62, in __init__
    self.service.start()
  File "/Users/wyx/project/python-scraping/.env/lib/python2.7/site-packages/selenium/webdriver/common/service.py", line 71, in start
    os.path.basename(self.path), self.start_error_message)
selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home

Exception AttributeError: "'Service' object has no attribute 'process'" in <bound method Service.__del__ of <selenium.webdriver.chrome.service.Service object at 0x105c08150>> ignored

Process finished with exit code 1

最后我尝试把它放到 /usr/bin

➜  Downloads sudo cp chromedriver /usr/bin
Password:
cp: /usr/bin/chromedriver: Operation not permitted

我尝试在 .zshrc 中使用 export PATH=$PATH:/Users/wyx/project/python-scraping/se/bin/chromedriver_for_mac。但是

selenium.common.exceptions.WebDriverException:消息:“chromedriver”可执行文件需要在 PATH 中。

那么如何解决呢,我想用驱动路径不在PATH中,这样我就可以轻松部署我的项目了。

解决方案:

    brew cask install chromedriver which chromedriver获取驱动路径 然后像这样使用它webdriver.Chrome("/usr/local/bin/chromedriver")

但我不知道为什么使用 selenium 这么复杂。

【问题讨论】:

【参考方案1】:

selenium.common.exceptions.WebDriverException:消息:“chromedriver”可执行文件需要在 PATH 中。

To launch chrome browser using ChromeDriver 您需要将带有可执行文件本身的executable chromedriver 位置传递给executable_path

你应该尝试如下:-

import os
from selenium import webdriver

PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
DRIVER_BIN = os.path.join(PROJECT_ROOT, "bin/chromedriver_for_mac")

browser = webdriver.Chrome(executable_path = DRIVER_BIN)
browser.get('http://www.baidu.com/')

或者将PATH变量using command with executable设置为:-

export PATH=$PATH:/Users/wyx/project/python-scraping/se/bin/chromedriver_for_mac

然后尝试将ChromeDriver初始化为:-

from selenium import webdriver

browser = webdriver.Chrome()
browser.get('http://www.baidu.com/')

【讨论】:

这两种方法我都试过了。它向我显示了我上面所说的同样的错误@Saurabh Gaur 我知道你已经尝试过了,但你没有通过可执行的 chromedriver 本身的位置,这就是你遇到麻烦的原因 午餐ChromeDriver你需要传递可执行目录和可执行文件,不仅是目录,请注意 @wyx 您必须将可执行的 chromedriver 路径传递给 executable_path 变量,请仔细查看提供的答案.. 实际上您正在将 chromedriver 的名称修改为 chromedriver_for_mac 这就是为什么 @wyx 在您通过 brew 安装时找不到它,而这种情况下您只需初始化为 webdriver.Chrome() 它本身就会找到 chromedriver bin 文件夹中的可执行文件,但应将其命名为 chromedriver..:)【参考方案2】:

为简单起见:

从此link 下载 chrome webdriver。 复制python脚本文件夹中的“chromedriver”。

from selenium import webdriver
import os

url = 'http://www.webscrapingfordatascience.com/complexjavascript/'

PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
DRIVER_BIN = os.path.join(PROJECT_ROOT, "chromedriver")

driver = webdriver.Chrome(executable_path = DRIVER_BIN)

driver.get(url)

input('Press ENTER to close the automated browser')

driver.quit()

【讨论】:

【参考方案3】:

对我来说,这样工作并不复杂

    从官方link下载chromedriver(Chrome浏览器通知版) 解压 *.zip 文件并将文件 chromedriver 复制到位置 usr/local/bin/ 删除您放入文件的所有路径,然后使用 driver = webdriver.Chrome() 如果探针仍然存在,请尝试重新打开 PyCharm,因为有时需要重新打开才能正常工作

【讨论】:

【参考方案4】:

对我来说,通过 homebrew 安装 chromedriver 在 MacOS 11 上就像一个魅力。

brew install chromedriver && brew update 

【讨论】:

这对我也有用。另外,请记住苹果可能会阻止此应用启动,请记住从安全和隐私中取消阻止它。

以上是关于在 Mac 上使用 selenium 和 chromedriver的主要内容,如果未能解决你的问题,请参考以下文章

“未知错误”,“消息”:“连接被拒绝”,“堆栈跟踪”,同时尝试在 Mac OS X 上通过 GeckoDriver 和 Selenium 使用 firefoxprofile

在 mac 上使用 Python / Crontab / Selenium / Time 自动截图

有人可以解释为啥 Selenium 简单程序不起作用吗? (在 Mac 上使用 Maven-Java)

selenium+python在mac环境上的搭建

使用 selenium 将 python 从 mac 迁移到 pc

无法在 Mac 上设置 ruby​​-selenium Webdriver