在 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)