小能豆

在 selenium python 中运行 Firefox 配置文件不起作用

py

这是我的代码:

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.firefox.options import Options

print("Openning Browser")
fp = webdriver.FirefoxProfile("C:/Users/myname/AppData/Roaming/Mozilla/Firefox/Profiles/qljcimja.whatsapp_riddle_bot")
fo = Options()
fo.add_argument("-profile")
fo.add_argument("C:/Users/myname/AppData/Roaming/Mozilla/Firefox/Profiles/qljcimja.whatsapp_riddle_bot")
firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
main_win = webdriver.Firefox(fp, executable_path='C:/Drivers/geckodriver-v0.29.1-win64/geckodriver.exe', capabilities=firefox_capabilities, firefox_options=fo)
print("Done Openning Browser\nStarting Website")
main_win.get('https://web.whatsapp.com')
...

这里面还有很多代码,但我很确定错误来自上面的代码块。因此,当我运行代码时,它会Openning Browser像往常一样在终端中打印,但窗口打开后,在等待大约 30 秒后,它仍然无法打开 URL,它会弹出如下所示的错误

(.venv) PS E:\Nayan,s file\PythonProjects\whatsapp riddle bot> python launcher.py
Openning Browser
Traceback (most recent call last):
  File "E:\Nayan,s file\PythonProjects\whatsapp riddle bot\launcher.py", line 3, in <module>
    main.main()
  File "E:\Nayan,s file\PythonProjects\whatsapp riddle bot\main.py", line 75, in main
    main_win = webdriver.Firefox(fp, executable_path='C:/Drivers/geckodriver-v0.29.1-win64/geckodriver.exe', capabilities=firefox_capabilities, firefox_options=fo)
  File "E:\Nayan,s file\PythonProjects\whatsapp riddle bot\.venv\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 170, in __init__        
    RemoteWebDriver.__init__(
  File "E:\Nayan,s file\PythonProjects\whatsapp riddle bot\.venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 157, in __init__
    self.start_session(capabilities, browser_profile)
  File "E:\Nayan,s file\PythonProjects\whatsapp riddle bot\.venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 252, in start_session    
    response = self.execute(Command.NEW_SESSION, parameters)
  File "E:\Nayan,s file\PythonProjects\whatsapp riddle bot\.venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "E:\Nayan,s file\PythonProjects\whatsapp riddle bot\.venv\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: No connection could be made because the target machine actively refused it. (os error 10061)

是的,这是我为朋友制作的谜语机器人,它忽略了所有文件夹名称

所以我很好奇fo,删除了fpfirefox_capabilities变量,然后仅使用 driver_path 变量运行驱动程序,它就运行了。

但是我希望加载配置文件,因为我总是必须用我的手机扫描代码才能运行 whatsapp 网页,想象一下,每次测试时我都必须一次又一次地扫描。

简而言之,我想知道为什么会发生这种情况(比如它是 selenium 中的一个错误还是其他什么)以及有没有办法解决?


阅读 23

收藏
2025-01-06

共1个答案

小能豆

根据您的描述和错误日志,问题可能出在不兼容的代码参数或错误的配置文件路径导致 Selenium 无法正确初始化浏览器实例。


问题的来源

  1. 废弃的参数:
  2. firefox_options 参数已经被废弃,应该改为使用 options
  3. 使用废弃的参数可能导致 Selenium 无法正确解析或传递配置,进而抛出错误。

  4. 配置文件路径问题:

  5. 您传递了 fpfo 两个配置,但路径和加载可能有冲突。
  6. FirefoxProfileOptions 不应该同时指定 -profile,因为它们会重复配置。

  7. 端口连接问题:

  8. 错误日志中的 No connection could be made 可能表明 GeckoDriver 或 Firefox 未能成功启动 WebDriver 服务,可能与参数冲突或 GeckoDriver 的版本有关。

解决方案

修复代码

将废弃的参数替换为正确的用法,并确保配置文件路径的唯一性:

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.firefox.options import Options

# 配置文件路径
profile_path = "C:/Users/myname/AppData/Roaming/Mozilla/Firefox/Profiles/qljcimja.whatsapp_riddle_bot"

# 配置选项
print("Opening Browser")
firefox_options = Options()
firefox_options.add_argument(f"-profile")
firefox_options.add_argument(profile_path)

# 启动浏览器
driver = webdriver.Firefox(
    executable_path='C:/Drivers/geckodriver-v0.29.1-win64/geckodriver.exe',
    options=firefox_options
)

# 打开网址
print("Starting Website")
driver.get('https://web.whatsapp.com')

关键改动说明

  1. 删除了 FirefoxProfile
  2. FirefoxProfileOptions 是两种不同的配置方式,二者不应混用。
  3. 使用 Options 提供的 add_argument('-profile') 更简单且推荐。

  4. 替换废弃参数:

  5. options 替换 firefox_options,避免使用废弃的参数。

  6. 路径检查:

  7. 确保配置文件路径正确,且 Firefox 可以使用该配置文件正常启动。

  8. 减少不必要的变量:

  9. 移除了不必要的 firefox_capabilities,GeckoDriver 默认会启用 marionette

检查 GeckoDriver 和 Firefox 版本兼容性

  • 确保您的 GeckoDriver 和 Firefox 版本兼容。
  • 如果 Firefox 更新到新版本,GeckoDriver 可能需要同步更新。

测试建议

  1. 验证配置文件是否有效:
  2. 打开命令提示符,手动启动 Firefox,并传递 -profile 参数检查:
    bash firefox -profile "C:/Users/myname/AppData/Roaming/Mozilla/Firefox/Profiles/qljcimja.whatsapp_riddle_bot"
  3. 如果正常启动,则配置文件路径无误。

  4. 调试输出:

  5. 添加调试日志以捕获更多信息:
    python import logging from selenium.webdriver.remote.remote_connection import LOGGER LOGGER.setLevel(logging.DEBUG)

总结

问题的根本原因可能是废弃参数和重复的配置路径引起的冲突。通过正确使用 Options 并简化配置,可以解决问题。此外,确保 GeckoDriver 和 Firefox 版本兼容。

2025-01-06