优点(目前发现的):
- 不用配合selenium
- 不用下载对应浏览器的webdriver,不用对应浏览器版本
- 不用设置webdriver路径之类的设置
- 目前没看到有出现像webdriver类似的浏览器被控制的提示,使用过程中好像也没被检测出来。
- 每次不会重新打开一个浏览器,不会关闭。
- 控制滚动条更方便,不用像webdriver写js去执行,效果还不好。
- 可以监控网络请求,比webdriver方便多了。
chromiumPage介绍:
DrissionPage 是一个基于 python 的网页自动化工具。它既能控制浏览器,也能收发数据包,还能把两者合而为一。可兼顾浏览器自动化的便利性和 requests 的高效率。它功能强大,内置无数人性化设计和便捷功能。它的语法简洁而优雅,代码量少,对新手友好。
- 支持系统:Windows、Linux、Mac;
- python 版本:3.6 及以上;
- 支持应用:Chromium 内核浏览器(如 Chrome、Edge),electron 应用;
本库采用全自研的内核,内置了无数实用功能,对常用功能作了整合和优化,对比 selenium,有以下优点:
- 无 webdriver 特征;
- 无需为不同版本的浏览器下载不同的驱动;
- 运行速度更快;
- 可以跨 iframe 查找元素,无需切入切出;
- 把 iframe 看作普通元素,获取后可直接在其中查找元素,逻辑更清晰;
- 可以同时操作浏览器中的多个标签页,即使标签页为非激活状态,无需切换;
- 可以直接读取浏览器缓存来保存图片,无需用 GUI 点击另存;
- 可以对整个网页截图,包括视口外的部分(90 以上版本浏览器支持);
- 可处理非 open 状态的 shadow-root。
ChromiumPage 依赖
安装 drissionPage
pip3 install drissionPage
ChromiumPage windows报错
刚开始执行的时候,直接报错:
for filename in filenames:
TypeError: 'WindowsPath' object is not iterable
百度、Google无果。
最后自己调试解决的。
报错:
解决:
打开报错的类,编辑代码。
思路,看代码是循环的时候出现报错,filenames对象是一个WindowsPath类型。循环的时候报错。看代码是循环文件,便在前面加了一个类型判断。
ChromiumPage 使用
以下为一个小示例
from DrissionPage import ChromiumPage
driver = ChromiumPage()
# 监听指定的url
driver.listen.start('aweme/v1/web/comment/list/')
# 访问链接
driver.get('https://www.douyin.com/video/7382814024410336552')
#滚动滚动条到底部,获取监听结果
for page in range(3):
print(f'正在采集第{page + 1}页的数据内容')
driver.scroll.to_bottom()
resp = driver.listen.wait()
json_data = resp.response.body
# 保存文件(可以注释)
save_comments_to_csv(json_data.get('comments', []), csv_writer)
# 获取元素
moreButton = driver.eles("tag:button@class=jlqd8usT comment-reply-expand-btn")
# moreButton = driver.eles("tag:button@class=bgz8RRCZ")
# 增加新的监听
driver.listen.start('aweme/v1/web/comment/list/reply/')
for more in moreButton:
# 执行元素动作
more.click()
# 等待结果
resp = driver.listen.wait()
# 获取结果
json_data = resp.response.body
print(json_data)
参考链接:
元素定位&操作
自动化测试框架:DrissionPage_chromiumpage-CSDN博客x
相关使用
爬虫基础之自动化工具 DrissionPage 的使用_浏览器_功能_httpsg
更多使用
一个神奇的自动化爬虫利器 - DrissionPagae_drissionpage设置代理-CSDN博客
https://www.drissionpage.cn/ChromiumPage/screen/