使用 Selenium 和 Chrome 远程调试时遇到 WebSocket 连接被远程主机强制关闭的问题

大家好,

我在使用 Selenium 和 Chrome 远程调试功能时遇到了一个问题。我的目标是在 Chrome 浏览器会话中拦截网络请求,但我遇到了一个持续出现的错误。

环境:

  • Python 版本:[2023.2.4]
  • Selenium 版本4.15.2]
  • Chrome 版本:[119.0.6045.160]
  • ChromeDriver 版本:[你的 ChromeDriver 版本]
  • 操作系统:[wing11]

问题描述: 当我尝试打开一个到 Chrome DevTools 协议的 WebSocket 连接时,连接成功建立,但随即被远程主机关闭,并出现以下错误消息:[WinError 10054] 远程主机强迫关闭了一个现有的连接

以下是我的代码片段:

python 复制代码
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import websocket
import json
import threading
import time
import requests

def on_message(ws, message):
    data = json.loads(message)
    if "method" in data and data["method"] == "Network.requestWillBeSent":
        print("Request URL:", data["params"]["request"]["url"])

def on_error(ws, error):
    print("WebSocket error occurred:", error)

def on_close(ws, status_code, msg):
    print("### WebSocket Closed ###")
    print("Status Code:", status_code)
    print("Message:", msg)

def on_open(ws):
    print("WebSocket connection opened")
    ws.send(json.dumps({"id": 1, "method": "Network.enable"}))

def start_websocket(url):
    ws = websocket.WebSocketApp(url,
                                on_message=on_message,
                                on_error=on_error,
                                on_close=on_close)
    ws.on_open = on_open
    threading.Thread(target=ws.run_forever).start()

chrome_options = Options()
chrome_options.add_argument("--remote-debugging-port=9222")
# 允许来自所有来源的 WebSocket 连接
chrome_options.add_argument("--remote-allow-origins=*")
driver = webdriver.Chrome(options=chrome_options)

driver.get("https://www.baidu.com")  # 修改为你想访问的网址

# 发送HTTP请求到Chrome的远程调试端口
response = requests.get("http://localhost:9222/json")
# 解析响应,获取WebSocket调试器URL
debugger_urls = response.json()
web_socket_url = None
for url in debugger_urls:
    if 'webSocketDebuggerUrl' in url:
        web_socket_url = url['webSocketDebuggerUrl']
        break

if web_socket_url:
    # 使用WebSocket URL开始WebSocket连接
    start_websocket(web_socket_url)
else:
    print("没有找到有效的WebSocketDebuggerUrl")

time.sleep(10)  # 等待 10 秒

driver.quit()  # 关闭浏览器

我已经尝试了以下解决方法,但问题依然存在:

  • 确保没有其他实例占用9222端口
  • 更新了 Chrome 和 ChromeDriver
  • 检查了防火墙和安全软件设置
  • 尝试了不同的网络环境

请问有谁遇到过类似的问题,或者有什么建议吗?非常感谢!

相关推荐
晨米酱18 小时前
JavaScript 中"对象即函数"设计模式
前端·设计模式
数据智能老司机1 天前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机1 天前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机1 天前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机1 天前
精通 Python 设计模式——性能模式
python·设计模式·架构
使一颗心免于哀伤1 天前
《设计模式之禅》笔记摘录 - 21.状态模式
笔记·设计模式
数据智能老司机2 天前
精通 Python 设计模式——创建型设计模式
python·设计模式·架构
数据智能老司机2 天前
精通 Python 设计模式——SOLID 原则
python·设计模式·架构
烛阴2 天前
【TS 设计模式完全指南】懒加载、缓存与权限控制:代理模式在 TypeScript 中的三大妙用
javascript·设计模式·typescript
李广坤2 天前
工厂模式
设计模式