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 运行时输出。
两者配合使用,就能同时掌握页面内外的完整信息。