【问题标题】:InvalidArgumentException: Message: binary is not a Firefox executable error using GeckoDriver Firefox Selenium and PythonInvalidArgumentException:消息:二进制不是使用 GeckoDriver Firefox Selenium 和 Python 的 Firefox 可执行文件错误
【发布时间】:2021-01-10 01:29:49
【问题描述】:

我遇到了与 FireFox 二进制文件相关的 selenium 错误。

我使用反斜杠将 C:/Users/Mack/AppData/Local/Programs/Python/ 添加到 PATH 并重新启动。我在这里下载了我认为正确的文件https://github.com/mozilla/geckodriver/releases 我把文件放在PATH连接的目录下。

要解决这个问题:我尝试使用两个反斜杠

binary = FirefoxBinary("C:\\Users\Mack\AppData\Local\Programs\Python\Python38-32\geckodriver-v0.27.0-win64\geckodriver.exe")

同样的错误

我尝试使用一个反斜杠

binary = FirefoxBinary("C:\Users\Mack\AppData\Local\Programs\Python\Python38-32\geckodriver-v0.27.0-win64\geckodriver.exe")

抛出:

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
Traceback (most recent call last):
  File "C:\Users\Mack\Desktop\hacker-stories\Trends.py", line 32, in <module>
    browser = webdriver.Firefox(**firefox_binary=binary**)
  File "C:\Users\Mack\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 170, in __init__
    RemoteWebDriver.__init__(
  File "C:\Users\Mack\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 157, in __init__
    self.start_session(capabilities, browser_profile)
  File "C:\Users\Mack\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 252, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "C:\Users\Mack\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\Users\Mack\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.InvalidArgumentException: Message: binary is not a Firefox executable

代码测试.py

from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary

binary = FirefoxBinary("C:/Users/Mack/AppData/Local/Programs/Python/Python38-32/geckodriver-v0.27.0-win64/geckodriver.exe")
print(binary)
browser = webdriver.Firefox(firefox_binary=binary)

options = Options()
options.set_preference("browser.download.folderList",2)
options.set_preference("browser.download.manager.showWhenStarting", False)
options.set_preference("browser.download.dir","/Data")
options.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream,application/vnd.ms-excel")
driver = webdriver.Firefox(firefox_options=options)

非常感谢任何理解此错误的帮助。

【问题讨论】:

  • 你确定这是firefox二进制文件吗?
  • 正如@arundeepchohan 提到的,您对FirefoxBinary 的论点看起来不对。那不应该是firefox.exe 的路径而不是壁虎驱动程序的路径吗?
  • stackoverflow.com/questions/57528718/… 这是一个正确方法的示例。

标签: python selenium selenium-webdriver firefox geckodriver


【解决方案1】:

您的 exe 路径看起来不正确。

“/”(斜杠)在类 Unix 系统中经常用于表示目录结构。

窗口使用反斜杠。

将字符串更改为使用 两个 反斜杠而不是正斜杠。

【讨论】:

  • 这不起作用... binary = FirefoxBinary("C:\\Users\Mack\AppData\Local\Programs\Python\Python38-32\geckodriver-v0.27.0-win64\geckodriver. exe")
【解决方案2】:

将二进制文件更改为您获得的任何 firefox.exe 以及您的 geckodriver 的可执行路径。

options = Options()
binary = r'C:\Program Files\Mozilla Firefox\firefox.exe'
options.set_preference("browser.download.folderList",2)
options.set_preference("browser.download.manager.showWhenStarting", False)
options.set_preference("browser.download.dir","/Data")
options.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream,application/vnd.ms-excel")
options.binary = binary
driver = webdriver.Firefox(r'C:/Users/Mack/AppData/Local/Programs/Python/Python38-32/geckodriver-v0.27.0-win64/geckodriver.exe',options=options)

【讨论】:

    【解决方案3】:

    此错误消息...

    selenium.common.exceptions.InvalidArgumentException: Message: binary is not a Firefox executable
    

    ...暗示您作为参数传递给FirefoxBinary()binary 文件不是有效的 可执行文件。

    您似乎已将 geckodriver.exe 的绝对路径作为参数传递给 FirefoxBinary(),这会导致错误。


    解决方案

    您需要传递 firefox.exe 的绝对路径,而不是 geckodriver.exe。此外,firefox_options 现在已弃用,您必须使用 options,您可以使用以下解决方案:

    from selenium import webdriver
    from selenium.webdriver.firefox.options import Options
    from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
    
    options = Options()
    options.binary = FirefoxBinary(r'C:\Program Files\Mozilla Firefox\firefox.exe')
    options.set_preference("browser.download.folderList",2)
    options.set_preference("browser.download.manager.showWhenStarting", False)
    options.set_preference("browser.download.dir","/Data")
    options.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream,application/vnd.ms-excel")
    driver = webdriver.Firefox(executable_path=r'C:/Users/Mack/AppData/Local/Programs/Python/Python38-32/geckodriver-v0.27.0-win64/geckodriver.exe', options=options)
    

    参考

    您可以在以下位置找到一些相关的详细讨论:

    【讨论】:

      【解决方案4】:

      似乎在使用 Firefox Portable 时,无法识别 FirefoxPortable.exe 文件,而是在创建二进制路径时,指向“FirefoxPortable\App\firefox64”下的 firefox.exe 文件(在我的情况下)。如果您的 Gecko 驱动程序工作,上述内容是有效的 - 所以前几行输出(在异常之前)看起来像这样:

      [RemoteTestNG] detected TestNG version 7.3.0
      1611580278948   geckodriver INFO    Listening on 127.0.0.1:18391
      

      这个问题出现在我这里描述的问题之后: Cannot find firefox binary in PATH. Make sure firefox is installed 因此,它们不是同一个问题 - 正如某些堆栈 cmets 中所呈现的那样。

      祝你好运!

      【讨论】:

        猜你喜欢
        • 2018-03-22
        • 2019-06-13
        • 2018-07-11
        • 2021-04-15
        • 2017-08-30
        • 2018-09-27
        • 2018-03-31
        • 1970-01-01
        • 2017-08-03
        相关资源
        最近更新 更多