You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Selenium无法获取控制台日志问题求助

解决Selenium BiDi无法捕获站点原生控制台日志的问题

问题根源

你遇到的情况核心原因是监听启动时机晚于站点日志输出时机,再加上代码里的几个细节疏漏:

  • 页面加载完成后才启动监听,站点初始化阶段的控制台日志已经输出完毕,无法被捕获
  • 定义了chrome_options但未传递给ChromeDriver实例
  • 没有预留站点日志输出的时间窗口,仅执行自定义console.log就结束监听

修正后的代码

import trio
from selenium import webdriver
from selenium.webdriver.common.bidi.console import Console
from selenium.webdriver.common.bidi.log import Log

async def printConsoleLogs():
    # 配置ChromeOptions,确保BiDi特性正常启用
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument("--enable-bidi")
    chrome_options.add_argument("--no-sandbox")  # 可选,规避部分环境权限问题

    # 初始化Driver并传入配置
    driver = webdriver.Chrome(options=chrome_options)

    # 先建立BiDi连接并启动监听,再加载页面
    async with driver.bidi_connection() as session:
        log = Log(driver, session)
        async with log.add_listener(Console.ALL) as messages:
            # 启动监听后再加载页面,确保捕获页面全流程日志
            driver.get("http://localhost:9091")
            # 等待页面完成初始化(时长根据实际页面调整)
            await trio.sleep(3)
            # 测试自定义日志捕获
            driver.execute_script("console.log('New message')")
        
        # 逐条打印捕获到的日志
        for msg in messages:
            print(f"[{msg.type}] {msg.text}")

trio.run(printConsoleLogs)

关键调整点

  • 提前启动监听:在driver.get前建立BiDi连接并启动监听,覆盖页面加载全流程的日志输出
  • 传递配置参数:将配置好的chrome_options传入ChromeDriver,保证BiDi功能正常启用
  • 添加等待逻辑:页面加载后预留足够时间,让站点JavaScript代码执行完毕并输出日志
  • 优化日志输出:遍历日志条目,打印完整的日志类型和内容,替代直接打印对象

额外注意事项

  • 确保Chrome浏览器版本≥103、Selenium版本≥4.10.0,这两个版本是BiDi功能稳定支持的最低要求
  • 若站点日志是异步触发(如接口请求完成后输出),可改用页面元素等待替代固定时长的sleep
  • 可指定具体监听类型(如Console.LOG、Console.ERROR),替代Console.ALL过滤无关日志

内容的提问来源于stack exchange,提问作者20MikeMike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 00:15:29