首页 > Python资料 博客日记
【学习心得】Python好库推荐——DrissionPage
2024-06-03 15:00:04Python资料围观365次
事情的起因是这样,我在复习selenium来进行自动化爬虫任务的时候,发现了一个基于selenium封装的库,他其中的有一个功能(监听网络数据)特别让我兴奋!心想这也太吊了吧!所以我一定要写一篇文章记录下来,同时分享给大家。
一、DrissionPage的介绍
网页自动化的形式通常有两种,它们各有优劣:
- 直接向服务器发送数据包,获取需要的数据
- 控制浏览器跟网页进行交互
前者轻量级,速度快,便于多线程、分布式部署,如 requests 库。但当数据包构成复杂,甚至加入加密技术时,开发过程烧脑程度直线上升。鉴于此,DrissionPage 以页面为单位将两者整合,对 Chromium 协议 和 requests 进行了重新封装,实现两种模式的互通,并加入常用的页面和元素控制功能,可大幅降低开发难度和代码量。用于操作浏览器的对象叫 Driver,requests 用于管理连接的对象叫 Session,Drission 就是它们两者的合体。Page 表示以 POM 模式封装。 在旧版本,本库是通过对 selenium 和 requests 的重新封装实现的。从 3.0 版开始,作者另起炉灶,用 chromium 协议自行实现了 selenium 全部功能,从而摆脱了对 selenium 的依赖,功能更多更强,运行效率更高,开发更灵活。
详细的介绍大家可以去看开发者的个人网页。
DirssionPage使用文档https://g1879.gitee.io/drissionpagedocs/get_start/installation
二、基本使用
(1)安装
pip install DrissionPage
(2)使用逻辑
无论是控制浏览器,还是收发数据包,其操作逻辑是一致的。即先创建页面对象,然后从页面对象中获取元素对象,通过对元素对象的读取或操作,实现数据的获取或页面的控制。因此,最主要的对象就是两种:页面对象,及其生成的元素对象。
主页面对象有 3 种,它们通常是程序的入口:
ChromiumPage
:单纯用于操作浏览器的页面对象
# 如果只要控制浏览器
from DrissionPage import ChromiumPage
WebPage
:整合浏览器控制和收发数据包于一体的页面对象
# WebPage是功能最全面的页面类,既可控制浏览器,也可收发数据包。
from DrissionPage import WebPage
SessionPage
:单纯用于收发数据包的页面对象
# 如果只要收发数据包
from DrissionPage import SessionPage
(3)快速上手
① 操控浏览器(类似selenium库的功能)
from DrissionPage import ChromiumPage
# 创建页面对象,并启动或接管浏览器
page = ChromiumPage()
# 跳转到登录页面
page.get('https://gitee.com/login')
# 定位到账号文本框,获取文本框元素
ele = page.ele('#user_login')
# 输入对文本框输入账号
ele.input('您的账号')
# 定位到密码文本框并输入密码
page.ele('#user_password').input('您的密码')
# 点击登录按钮
page.ele('@value=登 录').click()
② 收发数据包(类似requests库功能)
from DrissionPage import SessionPage
# 创建页面对象
page = SessionPage()
# 爬取3页
for i in range(1, 4):
# 访问某一页的网页
page.get(f'https://gitee.com/explore/all?page={i}')
# 获取所有开源库<a>元素列表
links = page.eles('.title project-namespace-path')
# 遍历所有<a>元素
for link in links:
# 打印链接信息
print(link.text, link.link)
三、重点讲一个我喜欢的功能
(1)监听网络数据
from DrissionPage import ChromiumPage
page = ChromiumPage()
page.get('https://gitee.com/explore/all') # 访问网址,这行产生的数据包不监听
page.listen.start('gitee.com/explore') # 开始监听,指定获取包含该文本的数据包
for _ in range(5):
page('@rel=next').click() # 点击下一页
res = page.listen.wait() # 等待并获取一个数据包
print(res.url) # 打印数据包url
监听数据的功能,可以让我们拦截一个请求,并将请求这个数据包所需的请求参数给截获,这样我们就不需要自己去构造加密的请求参数啦,逆向也就省了!是不是很棒!~
标签:
相关文章
最新发布
- 光流法结合深度学习神经网络的原理及应用(完整代码都有Python opencv)
- Python 图像处理进阶:特征提取与图像分类
- 大数据可视化分析-基于python的电影数据分析及可视化系统_9532dr50
- 【Python】入门(运算、输出、数据类型)
- 【Python】第一弹---解锁编程新世界:深入理解计算机基础与Python入门指南
- 华为OD机试E卷 --第k个排列 --24年OD统一考试(Java & JS & Python & C & C++)
- Python已安装包在import时报错未找到的解决方法
- 【Python】自动化神器PyAutoGUI —告别手动操作,一键模拟鼠标键盘,玩转微信及各种软件自动化
- Pycharm连接SQL Sever(详细教程)
- Python编程练习题及解析(49题)
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Anaconda版本和Python版本对应关系(持续更新...)
- Python与PyTorch的版本对应
- Windows上安装 Python 环境并配置环境变量 (超详细教程)
- Python pyinstaller打包exe最完整教程