【发布时间】:2020-10-18 09:13:49
【问题描述】:
我正在查看 this excellent answer 并复制了 MacOS 的代码(答案的顶部,为方便起见也在下面复制)。
import os # Code from answer linked above
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium import webdriver
# path to the firefox binary inside the Tor package
binary = '/Applications/TorBrowser.app/Contents/MacOS/firefox'
if os.path.exists(binary) is False:
raise ValueError("The binary path to Tor firefox does not exist.")
firefox_binary = FirefoxBinary(binary)
browser = None
def get_browser(binary=None):
global browser
# only one instance of a browser opens, remove global for multiple instances
if not browser:
browser = webdriver.Firefox(firefox_binary=binary)
return browser
if __name__ == "__main__":
browser = get_browser(binary=firefox_binary)
urls = (
('tor browser check', 'https://check.torproject.org/'),
('ip checker', 'http://icanhazip.com')
)
for url_name, url in urls:
print "getting", url_name, "at", url
browser.get(url)
我不断收到以下错误。
Traceback (most recent call last):
File "torselenium.py", line 22, in <module>
browser = get_browser(binary=firefox_binary)
File "torselenium.py", line 18, in get_browser
browser = webdriver.Firefox(firefox_binary=binary)
File "/Users/user/Library/Python/2.7/lib/python/site-packages/selenium/webdriver/firefox/webdriver.py", line 164, in __init__
self.service.start()
File "/Users/user/Library/Python/2.7/lib/python/site-packages/selenium/webdriver/common/service.py", line 83, in start
os.path.basename(self.path), self.start_error_message)
selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.
这个错误和this question中描述的错误非常相似,这里建议设置一个firefox_binary路径。然而我已经完成了这项工作并验证了(下面的验证证明)在该路径上有一个 firefox 二进制文件。
$ ls /Applications/TorBrowser.app/Contents/MacOS/firefox
/Applications/TorBrowser.app/Contents/MacOS/firefox
事实上,如果我将二进制路径(第 7 行)设置为'~/Applications/TorBrowser.app/Contents/MacOS/firefox',它会给我ValueError,所以那里肯定有一个二进制文件。
我也是checked if I have execute permissions,我这样做了,我尝试将browser从全局变量更改为局部变量,但没有帮助。
我该如何解决这个错误?
【问题讨论】:
-
firefox和geckodriver是两个不同的可执行文件。command -v geckodriver返回什么?如果没有安装,brew install geckodriver -
@hoefling
brew install geckodriver解决了我的问题。不知道为什么,因为我过去使用过 selenium,但我认为我没有使用 brew 安装它 - 只是从 Mozilla 下载了可执行文件 -
你可以随心所欲地安装它,从geckodriver releases下载可执行文件也可以,只要确保文件在PATH中。
标签: python macos selenium geckodriver tor