新一代自动化利器-DrissionPage
熟悉的小伙伴知道我的工作有相当一部分是自动化,在探索相关的技术上一直没停下脚步,我痛恨selenium、playwright的非标准内核机制,也曾对clicknium引进了新的问题无语,以及接口爬取数据时踩不完的坑,无论是b端还是c端还是接口的探索到了瓶颈仿佛山穷水尽,直到我遇到了它——DrissionPage
DrissionPage亮点
drissionpage的亮点在其代码库里介绍了一大堆,有喜欢的朋友可以自行查看:https://toscode.gitee.com/g1879/DrissionPage。
下面我只谈谈我喜欢的亮点。
- 注释全中文,很详细。有很多国人的包开发完写的英文,对于通篇中文注释的我反手就是一个赞。
- 无需 chromedriver。你知道这意味着什么吗,再也不用担心针对driver的反爬了,真的开心。
- 兼顾浏览器自动化的便利性和 requests 的高效率。是的,它整合了requests。
- 语法便利。真的厌倦了对selenium的各种罗里吧嗦的封装,而它可以跨
<iframe>查找元素,无需切入切出。可同时操作多个tab标签页,无需切换。 - 更快的运行速度。
安装配置
- 安装
- pip 安装即可
pip install DrissionPage
- pip 安装即可
- 配置
- 在命令行调出python,输入如下代码即可,记得浏览器路径设置为自己的。
from DrissionPage.easy_set import set_paths
set_paths(browser_path=r'C:\Program Files\Google\Chrome\Application\chrome.exe')
- 在命令行调出python,输入如下代码即可,记得浏览器路径设置为自己的。
- 运行时关闭当前浏览器
UI自动化脚本举例
登录vivo创作者中心。
import time
from DrissionPage import ChromiumPage # from DrissionPage.easy_set import set_paths # set_paths(browser_path=r'C:\Program Files\Google\Chrome\Application\chrome.exe') page = ChromiumPage()
page.get('https://designer.vivo.com.cn/#/login')
ele = page.ele("@placeholder=支持邮箱/用户名登录").input('yourname')
page.ele('@placeholder=请输入密码').input("yourpassword")
page.ele("登录").click()
time.sleep(1000)
收发数据包,比如爬取某个网站的信息,结果获取到了。

混合模式。百度搜索例子演示两种模式切换。
from DrissionPage import WebPage # d: 操作浏览器模式
page = WebPage('d')
page.get('http://www.baidu.com')
page.ele('#kw').input('DrissionPage')
page.ele('@value=百度一下').click(wait_loading=True) # 切换到s模式: 收发包模式
page.change_mode()
results = page.eles('tag:h3')
for result in results:
print(result.text)
更多例子和 API 请阅读官方文档,在此就不再演示。
总结
这个库设计初衷,是将web和api合而为一。
绕过了很多的爬虫中遇到的坑。
自研内核。
无数人性化设计。
喜欢的朋友可以看看作者的仓库,真的是干货满满:https://toscode.gitee.com/g1879/DrissionPage
新一代自动化利器-DrissionPage的更多相关文章
- 数据量越发庞大怎么办?新一代数据处理利器Greenplum来助攻
作者:李树桓 个推数据研发工程师 前言:近年来,互联网的快速发展积累了海量大数据,而在这些大数据的处理上,不同技术栈所具备的性能也有所不同,如何快速有效地处理这些庞大的数据仓,成为很多运营者为之苦恼的 ...
- 云原生之旅 - 7)部署Terrform基础设施代码的自动化利器 Atlantis
前言 前面有几篇文章讲述了如何使用Terraform创建资源 (基础设施即代码 Terraform 快速入门, 使用 Terraform 创建 Kubernetes) 以及 Kubernetes时代的 ...
- 自动化利器-RPM自定义打包
1.Rpm打包程序 1.1为什么要使用rpm打包 1.编译安装软件,优点是可以定制化安装目录.按需开启功能等,缺点是需要查找并实验出适合的编译参数,诸如MySQL之类的软件编译耗时过长. 2.yum安 ...
- 自动化利器-Zabbix
1.1为何需要监控系统 在一个IT环境中会存在各种各样的设备,例如:硬件设备.软件设备.其系统的构成也是非常复杂的. 多种应用构成负载的IT业务系统,保证这些资源的正常运转,是一个公司IT部门的职责. ...
- FAutoTest-微信小程序 / 公众号H5 自动化利器
X5内核H5自动化背景 近来有很多童靴咨询如何做微信小程序/公众号等H5页面来做自动化,之前写了一篇文章微信小程序自动化测试实践 https://www.cnblogs.com/yyoba/p/945 ...
- 自动化利器 Ansible - 从了解到应用
本文说明 本系列使用 ansible 2.9.27 版本来说明和汇总相关信息. # cat /etc/system-release Red Hat Enterprise Linux Server re ...
- 自动化利器-YUM仓库搭建实战
本地YUM仓库搭建实战 YUM主要用于自动安装.升级rpm软件包,它能自动查找并解决rpm包之间的依赖关系.要成功的使用YUM工具安装更新软件或系统,就需要有一个包含各种rpm软件包的reposito ...
- json的好处-新一代数据传输利器
JSON是一种轻量级的数据交换格式!和xml一样. 为什么不XML XML的冗余太大,不过XML阅读起来比较方面,所以并没有被json完全取代,很多时候都是并存.比如sina微博的开发平台有一个JSO ...
- Gulp构建前端自动化项目
类似于Grunt,gulp是另一个同样功能很强大的前端项目自动化利器. 下面是项目的效果:
- Visual Studio 2015官方汇总包括下载和视频
7月20日 23:30 Visual Studio 2015正式版正式发布,作为微软新一代开发利器,在全地球乃至全宇宙乃至全太阳系中最强大 且没有之一的IDE(上述描述来自微博用户评论)跨平台支持成 ...
随机推荐
- 云数据库FinOps实战复盘
历时三个多月的HBase成本优化项目按照预期交付了,HBase云数据库月度成本下降了32.5%,超出预期达成目标. 我们对本次HBase成本优化项目进行深度复盘,并进一步尝试总结云数据库的FinOps ...
- Golang Gorm 封装 分页查询 Where Order 查询
说说为什么写Gorm,因为公司新项目需要,研究了下Go下的gorm.对于一个项目首先考虑的问题,就是封装一些常用的工具方法,例如多参数查询 where or Like 还有order by Limit ...
- python-docx操作word文档详解
案例 官网地址: https://python-docx.readthedocs.io/en/latest/ pip install python-docx from docx import Docu ...
- Jmeter之随机变量元件与用户自定义变量元件区别及使用
用随机变量(random variable)与用户自定义变量(User defined variables)的区别: 随机变量:在同个线程或者不同线程时,每个次循环执行时值都会重新生成 用户自定义变量 ...
- 大数据 - DWS层 业务实现
统计主题 需求指标[ADS] 输出方式 计算来源 来源层级 访客[DWS] pv 可视化大屏 page_log 直接可求 dwd UV(DAU) 可视化大屏 需要用 page_log 过滤去重 dwm ...
- kali之pip和pip3安装
安装pip 首先安装setuptools,setuptools是 Python Enterprise Application Kit(PEAK)的一个副项目,它 是一组Python的 distutil ...
- 为什么 java 容器推荐使用 ExitOnOutOfMemoryError 而非 HeapDumpOnOutOfMemoryError ?
前言 好久没写文章了, 今天之所以突然心血来潮, 是因为昨天出现了这样一个情况: 我们公司的某个手机APP后端的用户(customer)微服务出现内存泄露, 导致OutOfMemoryError, 但 ...
- ArcObjects SDK开发 一些可直接调用的对话框
在ArcMap中,一些对话框是很复杂的,例如设置点线面样式的对话框,选择空间参考的对话框等,但这些对话框有些在ArcObjects SDK中是可以直接调用的. 1.空间参考选择设置对话框 弹出空间参考 ...
- [C#]关于override和new在重写方法时的区别
规则: 在"运行时"遇到虚方法时,对象会调用虚成员派生得最远的.重写的实现. 如果是用new修饰符实现的方法,它会在基类面前隐藏派生类重新声明的成员,这时候会找到使用new修饰符的 ...
- 线段树套线性基——题解P4839 P哥的桶
文章历史 2022-08-03: 文章初稿,由于对算法介绍过于少而被管理员打回重造. 2020-08-06:将算法介绍进行扩写,并删除了一些可有可无的内容或玩梗内容. 管理员审核题解辛苦了. 简要题意 ...
