InvalidArgumentException:消息:使用 GeckoDriver Firefox Selenium 和 Python 时,二进制文件不是 Firefox 可执行文件

问题描述 投票:0回答:5

我遇到了与 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)

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

python selenium selenium-webdriver firefox geckodriver
5个回答
5
投票

这个错误信息...

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

...意味着您作为参数传递给 FirefoxBinary()

binary
文件不是有效的 可执行文件。

您似乎已将

geckodriver.exe
的绝对路径作为参数传递给
FirefoxBinary()
,这导致了错误。


解决方案

您需要传递

geckodriver.exe
 的绝对路径,而不是 
firefox.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)

参考文献

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


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)

2
投票

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

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

这个问题出现在我身上之后这里描述的问题: 在 PATH 中找不到 Firefox 二进制文件。确保已安装 Firefox 因此,它们不是同一个问题 - 正如一些堆栈评论中所提出的。

祝你好运!


0
投票

我遇到了同样的问题,这是因为 geckodriver 版本与我的 Firefox 浏览器和 selenium 不兼容。您可以在此处查看支持的版本:

https://firefox-source-docs.mozilla.org/testing/geckodriver/Support.html

我将selenium从4降级到3.11,并将我的firefox升级到版本120。我的geckodriver是0.33


-1
投票

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

“/”(斜杠)是类 UNIX 系统中经常使用的表示目录结构的东西。

窗口使用反斜杠。

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

© www.soinside.com 2019 - 2024. All rights reserved.