Bootstrap

seleniun 自动化程序,python编程 我监控 chrome debug数据后 ,怎么获取控制台的信息呢

python

好的,使用 Python 来监控 Chrome 的调试数据并获取控制台信息,可以使用 websocket-client 库来连接 Chrome 的 WebSocket 接口。以下是一个详细的示例:

1. 安装必要的库

首先,你需要安装 websocket-client 库。可以使用以下命令进行安装:

sh复制

pip install websocket-client

2. 启动 Chrome 并启用远程调试

打开命令行工具,运行以下命令启动 Chrome 并启用远程调试:

sh复制

chrome.exe --remote-debugging-port=9222

3. 连接到 Chrome 实例并获取控制台信息

以下是一个 Python 脚本,用于连接到 Chrome 实例并获取控制台信息:

Python复制

import websocket
import json

# 连接到 Chrome 的 WebSocket 接口
ws = websocket.create_connection('ws://127.0.0.1:9222/devtools/browser/02fd130b-6cce-498d-bf53-7dda22f9f35a')

# 发送命令启用 Runtime 域
ws.send(json.dumps({
    'id': 1,
    'method': 'Runtime.enable',
    'params': {}
}))

# 发送命令启用 Console 域
ws.send(json.dumps({
    'id': 2,
    'method': 'Console.enable',
    'params': {}
}))

# 监听消息
def on_message(ws, message):
    data = json.loads(message)
    if 'method' in data and data['method'] == 'Console.messageAdded':
        print('Console message:', data['params']['message']['text'])

# 保持连接,持续监听消息
while True:
    message = ws.recv()
    on_message(ws, message)

# 关闭连接
ws.close()

4. 详细说明

  • 连接到 WebSocket:使用 websocket.create_connection 方法连接到 Chrome 的 WebSocket 接口。

  • 启用 Runtime 和 Console 域:发送 JSON 命令启用 RuntimeConsole 域,以便接收控制台消息。

  • 监听消息:定义 on_message 函数来处理接收到的消息。如果消息是 Console.messageAdded,则打印控制台消息。

  • 保持连接:使用 while True 循环持续监听消息。

  • 关闭连接:在适当的时候关闭 WebSocket 连接。

5. 运行脚本

运行上述脚本后,打开一个 Chrome 标签页并访问任意网站,你将看到控制台输出的信息。

6. 注意事项

  • 确保 Chrome 已经启动并启用了远程调试。

  • WebSocket 连接的 URL 可能会根据你的 Chrome 实例而有所不同,确保使用正确的 URL。

  • 你可以通过访问 http://127.0.0.1:9222/json 来获取当前所有打开的标签页信息,从而获取正确的 WebSocket URL。

希望这个示例对你有帮助!如果你有其他问题或需要进一步的帮助,请随时告诉我。

notejs

1. 确保 Chrome 浏览器正确启动并监听调试端口

首先,确保 Chrome 浏览器已经正确启动并监听了指定的调试端口(在你的代码中是9999端口)。可以通过以下命令在命令行中启动 Chrome 并开启调试模式:

bash复制

chrome.exe --remote-debugging-port=9999 --remote-allow-origins=* --start-maximized

确保 Chrome 路径正确,或者将 Chrome 路径添加到系统环境变量中。

2. 检查端口是否被占用

使用以下命令检查9999端口是否被其他进程占用:

bash复制

netstat -ano | findstr "9999"

如果端口被占用,可以选择其他端口或结束占用该端口的进程。

3. 确保 Selenium 配置正确

在你的代码中,确保 webdriver.ChromeOptions 配置正确,并且 debugger_address 设置为 localhost:9999。你的代码看起来是正确的,但可以尝试以下步骤确保没有遗漏:

Python复制

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

# 启动 Chrome 浏览器并开启调试模式
EXEC_DIR_PATH = r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'
command = f'{EXEC_DIR_PATH} --remote-debugging-port=9999 --remote-allow-origins=* --start-maximized'
subprocess.Popen(command, shell=True)
time.sleep(1)  # 等待浏览器启动

# 浏览器配置对象
options = Options()
options.debugger_address = 'localhost:9999'
driver = webdriver.Chrome(options=options)

# 打开一个网页进行测试
driver.get('https://www.example.com')

4. 检查 ChromeDriver 版本

确保你使用的 ChromeDriver 版本与 Chrome 浏览器版本兼容。不兼容的版本可能导致连接失败或其他问题。可以通过以下命令查看 ChromeDriver 版本:

bash复制

chromedriver --version

如果版本不兼容,可以下载并安装与你的 Chrome 浏览器版本匹配的 ChromeDriver。

5. 检查防火墙和网络设置

确保防火墙没有阻止 Chrome 浏览器监听9999端口。可以暂时关闭防火墙进行测试,或者添加规则允许 Chrome 使用该端口。

6. 使用其他调试命令

如果 Emulation.setEmitTouchEventsForMouse 命令仍然失败,可以尝试使用其他调试命令来模拟触摸事件,例如 Emulation.setTouchEmulationEnabled

Python复制

driver.execute_cdp_cmd('Emulation.setTouchEmulationEnabled', {'enabled': True, 'configuration': 'mobile'})

通过以上步骤,你应该能够解决 Emulation.setEmitTouchEventsForMouse 命令失败的问题。如果问题仍然存在,建议进一步检查 Chrome 和 Selenium 的日志,查找更详细的错误信息。

;