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
相关产品推荐
相关产品推荐

