首页 / DrissionPage 入门教程 / 获取控制台信息

DrissionPage 入门教程

获取控制台信息

本教程共 42 篇 · 第 30 篇 · 更新于 2026-07-29 · 约 5 分钟阅读

DrissionPageDrissionPage 入门教程控制台console日志ConsoleData

30. 获取控制台信息

本节目标:学会用 console 监听器捕获浏览器控制台的日志输出,能实时获取页面 JS 打印的信息用于调试和分析。

浏览器控制台里会输出各种信息:JS 的 console.log()、页面报错、网络警告。

DrissionPage 能监听这些输出,让你在 Python 里拿到控制台的内容。

这在调试自动化脚本时特别有用——页面里发生了什么,不用手动开 F12 就能知道。

基本用法

控制台监听器的用法和网络监听器几乎一样。

from DrissionPage import Chromium

tab = Chromium().latest_tab
tab.console.start()  # 启动监听

# 执行一段 JS,往控制台输出内容
tab.run_js('console.log("DrissionPage");')

# 等待一条控制台信息
data = tab.console.wait()
print(data.text)  # 输出:DrissionPage

只能捕获 console 方法

只有通过 console.log()console.error() 等方法输出的内容才能被捕获。页面自动产生的网络警告、CORS 错误不在监听范围内。

启动和停止

tab.console.start()  # 启动监听
tab.console.stop()   # 停止监听,清空已获取的列表

查看监听状态:

if tab.console.listening:
    print("监听中")

获取信息的三种方式

等待一条:console.wait()

阻塞等待下一条控制台信息。

tab.console.start()
tab.run_js('console.log("第一条");')
data = tab.console.wait()
print(data.text)  # 第一条

支持超时:

data = tab.console.wait(timeout=3)
if data is False:
    print("超时了,没有新信息")

实时遍历:console.steps()

用 for 循环持续获取信息。

tab.console.start()
tab.run_js('for(let i=0;i<5;i++) console.log("消息" + i);')

for msg in tab.console.steps():
    print(msg.text)
    if '消息4' in msg.text:
        break

批量获取:console.messages

一次性拿到所有已捕获的信息,取完清空列表。

tab.run_js('console.log("a"); console.log("b");')
# 稍等片刻让信息入队
import time
time.sleep(0.5)

messages = tab.console.messages  # 返回列表,清空内部缓存
for msg in messages:
    print(msg.text)

messages 是消费型读取

读取 console.messages 后,内部列表会被清空。下次读取只拿到新的信息。

ConsoleData 对象

每条控制台信息都是一个 ConsoleData 对象。

属性说明
text输出的文本内容
level日志级别 log/error/warn
body把 text 尝试 json 解析后的结果
url产生这条日志的页面网址
line行号
column列号
source来源
data = tab.console.wait()
print(data.text)   # 内容
print(data.level)  # log / error / warn
print(data.line)   # 行号

清空缓存

console.clear() 清空已获取但未返回的信息:

tab.console.clear()  # 丢弃所有缓存

实际场景:捕获页面报错

from DrissionPage import Chromium

tab = Chromium().latest_tab
tab.console.start()

tab.get('https://example.com')

# 执行可能出错的 JS
tab.run_js('nonExistentFunction();')

# 等待错误信息
import time
time.sleep(1)

for msg in tab.console.messages:
    if msg.level == 'error':
        print(f"页面报错: {msg.text}")
        print(f"位置: {msg.url}{msg.line}行")

小结

控制台监听器的 API 设计跟监听器很像:

  • start() / stop() 控制启停
  • wait() 等一条
  • steps() 持续遍历
  • messages 批量取

核心区别在于:网络监听抓的是 HTTP 请求响应,控制台监听抓的是 JS 运行时输出。

两者配合使用,就能同时掌握页面内外的完整信息。