如何使用selenium(python)连接到现有的firefox实例

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

有没有办法打开 Firefox 浏览器,然后使用 selenium 连接到它?我知道这可以在 chrome 上通过在命令行中启动它并使用

--remote-debugging-port
参数来实现,如下所示:

import subprocess
from selenium import webdriver
from selenium.webdriver.chrome.options import Options


subprocess.Popen('"C:/Program Files (x86)/Google/Chrome/Application/chrome.exe" --remote-debugging-port=9222', shell=True)
        
options = Options()
options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
driver = webdriver.Chrome(executable_path=PATH, options=options)

这可以在 Firefox 中完成吗?我已经搜索和检查与此相关的问题有一段时间了,但没有运气。
我发现的唯一线索是 geckodriver 有一个

--connect-existing
参数,但我不知道如何使用它。如何将参数传递给 geckodriver 并在 selenium 中使用它?

如有任何帮助,我们将不胜感激。如果无法完成,请告诉我。谢谢你

编辑: 好吧,我已经取得了一些进展,我知道如何将 geckodriver args 传递给 selenium:

driver = webdriver.Firefox(service=Service(PATH, service_args=['--marionette-port', '9394', '--connect-existing']))

现在的问题是,即使我使用这样的调试器服务器启动 Firefox:

firefox.exe -marionette -start-debugger-server <PORT>

当我运行代码时,它会引发此错误消息:

Traceback (most recent call last):
  File "c:\Users\maxis\Desktop\Python\Freelance\Application for Opening Web Browsers\browsers\firefox.py", line 107, in <module>
    driver = webdriver.Firefox(service=Service(PATH, service_args=['--marionette-port', '9394', '--connect-existing']))
  File "C:\Users\maxis\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 180, in __init__
    RemoteWebDriver.__init__(
  File "C:\Users\maxis\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 275, in __init__
    self.start_session(capabilities, browser_profile)
  File "C:\Users\maxis\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 365, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "C:\Users\maxis\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 430, in execute
    self.error_handler.check_response(response)
  File "C:\Users\maxis\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 247, 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)

或者我收到多个弹出窗口,告诉我有一个发往 Firefox 的传入请求。即使我点击“确定”,似乎也没有发生任何事情。

python selenium-webdriver firefox geckodriver
3个回答
4
投票

命令:

C:\Program Files\Mozilla Firefox\

firefox.exe -marionette -start-debugger-server 2828 //only use 2828

Python 脚本:

from selenium import webdriver

driver = webdriver.Firefox(executable_path = "YOUR GECKODRIVER PATH", service_args = ['--marionette-port', '2828', '--connect-existing'] )

pageSource = driver.page_source
print(pageSource)

2
投票

第一步:

打开CMD并执行:firefox.exe --marionette

此命令将打开一个 marionette-port=2828(默认)的 Firefox 实例

(在firefox实例的地址栏中写入about:config,按回车键然后搜索:marionette.port)


然后:

from selenium import webdriver
from selenium.webdriver.firefox.service import Service

firefox_services = Service(executable_path='firefoxdriver', port=3000, service_args=['--marionette-port', '2828', '--connect-existing'])
driver = webdriver.Firefox(service=firefox_services)
driver.get('https://youtube.com')
driver.execute_script('alert(\'your favorite music is here\')')

executable_path='firefoxdriver'
我的 geckodriver.exe 在 firefoxdriver 文件夹中

Screenshot my VSCode

端口=3000
我想通过端口 3000 发送我的“geckodriver 订单”

service_args=['--marionette-port', '2828', '--connect-existing']
我想控制一个打开的 firefox 实例,其 marionette-port=2828


建议:
在您知道如何连接到打开的 Firefox 实例之前,请删除在 %temp% 中创建的所有 Firefox 配置文件文件夹

Delete these folders in %temp%


1
投票

我遇到了同样的错误,但当我使用默认的 Marionette 端口 2828 时它起作用了。转到 Firefox 中的

about:config
并查找
marionette.port
,并确保它与网络驱动程序中的
service_args 端口相同
。然后,只需使用
-marionette
选项启动 Firefox 实例,但不使用
-start-debugger-server
选项。

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