💥 4.0 功能介绍
3.x 是自主研发底层的初步尝试,很多地方摸着石头过河,存在一些不太成熟的地方。
经过一段时间的使用,积累一些经验之后,4.0 在 3.x 的基础上对底层进行了大幅重构,新增大量功能,改善运行效率和稳定性,优化项目结构,解决很多存在的问题。对比旧版本有质的提高。
但同时不少 api 发生了变化,不能完全兼容旧版本。
api 的变化有些是功能优化必需的改变,有些则是本人对命名简洁的执念,趁着大版本的更新顺便把长期不太满意的命名给改了。
给使用者造成一定不便感到抱歉,但长痛不如短痛,趁着项目用的人不多,干脆舍弃历史包袱果断改掉。
有些原来的写法在 4.0.0 中还能正常使用,但 IDE 会提示无效,将在以后的版本中完全删除。推荐尽快更新为新写法。
本节仅简述功能变化,具体使用方法详见各对应章节。
✅️ 新的抓包功能
3.2 中 ,抓包功能主要由 FlowViewer 和wait.data_packets()
提供。
FlowViewer 是本人的一个练手作品,写得比较随意,技术也还没到家。存在漏抓、信息不全、api 不够合理的问题。
4.0 中,每个页面对象都内置了监听器,能力全面升级,api 也更合理。
📌 旧 api 变化
- 弃用 FlowViewer,以后也不会再升级
- 删除
wait.set_targets()
- 删除
wait.stop_listening()
方法 - 删除
wait.data_packets()
方法 DrissionPage.common
路径删除FlowViewer
📌 新 api
- 每个标签页对象(包括
ChromiumFrame
)新增listen
属性,内置监听功能 - 用
listen.start()
和listen.stop()
启动和停止监听 - 用
listen.wait()
阻塞等待数据包 - 用
listen.steps()
同步获取监听结果 - 增加
listen.wait_silent()
等待所有请求完成(包含 targets 以外的) - 监听结果结构优化,request 和 response 数据分开存放
📌 示例
下面示例可直接运行查看结果。这个示例会计时,用于与下个示例对比。
from DrissionPage import ChromiumPage
from TimePinner import Pinner
from pprint import pprint
page = ChromiumPage()
page.listen.start('api/getkeydata') # 指定监听目标并启动监听
pinner = Pinner(True, False)
page.get('http://www.hao123.com/') # 访问网站
packet = page.listen.wait() # 等待数据包
pprint(packet.response.body) # 打印数据包正文
pinner.pin('用时', True)
输出:
{'hao123.new.shishi.bangdan.recom': [{'index': '1',
'pure_title': '以色列和哈马斯移交首批被扣押人员'},
{'index': '2',
'pure_title': '听到免签政策法国外长笑了'},
......
用时:3.3114853000151925