【问题标题】:TOR Selenium Python with binary path given THROWS ERROR geckodriver executable needs to be in PATH具有给定 THROWS ERROR geckodriver 可执行文件的二进制路径的 TOR Selenium Python 需要在 PATH 中
【发布时间】: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


【解决方案1】:

看来你已经够近了。使用 通过Selenium 驱动GeckoDriver 启动Mozilla Firefox 浏览上下文,您必须下载最新的GeckoDriver v0.26.0 并将其存储在您的系统中并提及绝对路径 同时启动 Web 浏览器 会话,如下所示:

browser = webdriver.Firefox(firefox_binary=binary, executable_path='/usr/local/bin/geckodriver')

您可以在How to connect to Tor browser using Python找到详细讨论


参考文献

您可以在 WebDriverException: 'geckodriver' executable needs to be in PATH 中找到一些相关讨论:

【讨论】:

    【解决方案2】:

    这对我有用

    from webdriver_manager.firefox import GeckoDriverManager
    from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
    from selenium.webdriver.firefox.firefox_profile import FirefoxProfile 
        
    driver = webdriver.Firefox(
                    executable_path=GeckoDriverManager().install(),
                    firefox_profile= FirefoxProfile(R"C:\Users\Usuario\Desktop\TorBrowser\Browser\TorBrowser\Data\Browser\profile.default"),
                    firefox_binary=FirefoxBinary(R'C:\Users\Usuario\Desktop\TorBrowser\Browser\firefox.exe')
                )
    driver.get("https://google.com")
    

    我必须使用二进制文件,配置 GeckoDriverManager 库

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-05
      • 2017-05-17
      • 2018-07-11
      • 2018-03-25
      • 2017-11-21
      相关资源
      最近更新 更多