这是我的代码:
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,它会弹出如下所示的错误
Openning Browser
(.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,删除了fp和firefox_capabilities变量,然后仅使用 driver_path 变量运行驱动程序,它就运行了。
fo
fp
firefox_capabilities
但是我希望加载配置文件,因为我总是必须用我的手机扫描代码才能运行 whatsapp 网页,想象一下,每次测试时我都必须一次又一次地扫描。
简而言之,我想知道为什么会发生这种情况(比如它是 selenium 中的一个错误还是其他什么)以及有没有办法解决?
根据您的描述和错误日志,问题可能出在不兼容的代码参数或错误的配置文件路径导致 Selenium 无法正确初始化浏览器实例。
firefox_options
options
使用废弃的参数可能导致 Selenium 无法正确解析或传递配置,进而抛出错误。
配置文件路径问题:
FirefoxProfile 和 Options 不应该同时指定 -profile,因为它们会重复配置。
FirefoxProfile
Options
-profile
端口连接问题:
No connection could be made
将废弃的参数替换为正确的用法,并确保配置文件路径的唯一性:
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')
使用 Options 提供的 add_argument('-profile') 更简单且推荐。
add_argument('-profile')
替换废弃参数:
用 options 替换 firefox_options,避免使用废弃的参数。
路径检查:
确保配置文件路径正确,且 Firefox 可以使用该配置文件正常启动。
减少不必要的变量:
marionette
bash firefox -profile "C:/Users/myname/AppData/Roaming/Mozilla/Firefox/Profiles/qljcimja.whatsapp_riddle_bot"
如果正常启动,则配置文件路径无误。
调试输出:
python import logging from selenium.webdriver.remote.remote_connection import LOGGER LOGGER.setLevel(logging.DEBUG)
问题的根本原因可能是废弃参数和重复的配置路径引起的冲突。通过正确使用 Options 并简化配置,可以解决问题。此外,确保 GeckoDriver 和 Firefox 版本兼容。