熟悉的小伙伴知道我的工作有相当一部分是自动化,在探索相关的技术上一直没停下脚步,我痛恨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
  • 配置

    • 在命令行调出python,输入如下代码即可,记得浏览器路径设置为自己的。  

      from DrissionPage.easy_set import set_paths
      set_paths(browser_path=r'C:\Program Files\Google\Chrome\Application\chrome.exe')
  • 运行时关闭当前浏览器

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的更多相关文章

  1. 数据量越发庞大怎么办?新一代数据处理利器Greenplum来助攻

    作者:李树桓 个推数据研发工程师 前言:近年来,互联网的快速发展积累了海量大数据,而在这些大数据的处理上,不同技术栈所具备的性能也有所不同,如何快速有效地处理这些庞大的数据仓,成为很多运营者为之苦恼的 ...

  2. 云原生之旅 - 7)部署Terrform基础设施代码的自动化利器 Atlantis

    前言 前面有几篇文章讲述了如何使用Terraform创建资源 (基础设施即代码 Terraform 快速入门, 使用 Terraform 创建 Kubernetes) 以及 Kubernetes时代的 ...

  3. 自动化利器-RPM自定义打包

    1.Rpm打包程序 1.1为什么要使用rpm打包 1.编译安装软件,优点是可以定制化安装目录.按需开启功能等,缺点是需要查找并实验出适合的编译参数,诸如MySQL之类的软件编译耗时过长. 2.yum安 ...

  4. 自动化利器-Zabbix

    1.1为何需要监控系统 在一个IT环境中会存在各种各样的设备,例如:硬件设备.软件设备.其系统的构成也是非常复杂的. 多种应用构成负载的IT业务系统,保证这些资源的正常运转,是一个公司IT部门的职责. ...

  5. FAutoTest-微信小程序 / 公众号H5 自动化利器

    X5内核H5自动化背景 近来有很多童靴咨询如何做微信小程序/公众号等H5页面来做自动化,之前写了一篇文章微信小程序自动化测试实践 https://www.cnblogs.com/yyoba/p/945 ...

  6. 自动化利器 Ansible - 从了解到应用

    本文说明 本系列使用 ansible 2.9.27 版本来说明和汇总相关信息. # cat /etc/system-release Red Hat Enterprise Linux Server re ...

  7. 自动化利器-YUM仓库搭建实战

    本地YUM仓库搭建实战 YUM主要用于自动安装.升级rpm软件包,它能自动查找并解决rpm包之间的依赖关系.要成功的使用YUM工具安装更新软件或系统,就需要有一个包含各种rpm软件包的reposito ...

  8. json的好处-新一代数据传输利器

    JSON是一种轻量级的数据交换格式!和xml一样. 为什么不XML XML的冗余太大,不过XML阅读起来比较方面,所以并没有被json完全取代,很多时候都是并存.比如sina微博的开发平台有一个JSO ...

  9. Gulp构建前端自动化项目

    类似于Grunt,gulp是另一个同样功能很强大的前端项目自动化利器. 下面是项目的效果:

  10. Visual Studio 2015官方汇总包括下载和视频

     7月20日 23:30 Visual Studio 2015正式版正式发布,作为微软新一代开发利器,在全地球乃至全宇宙乃至全太阳系中最强大 且没有之一的IDE(上述描述来自微博用户评论)跨平台支持成 ...

随机推荐

  1. 基于.net C# Socket WinForm MQTT 客户端开发

    1.什么是MQTT? MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的&quo ...

  2. MIT6.828 Lab 1: C, Assembly, Tools, and Bootstrapping

    前置准备 实现机器为VMWare的虚拟机,操作系统为 Debian-11(无桌面版本),内核版本为 5.10.0,指令集为 AMD64(i7 9700K),编译器为 GCC-10 QEMU 虚拟化支持 ...

  3. Java学习中实现的功能trick

    1.注册时,不用确认就可以知道用户名是否存在 技术:json+ajax 章节:javaweb->day22json&ajax 2.不常变化的导航栏.城市等信息存入数据库,通过redis做 ...

  4. 【每日一题】【队列的实现类】【每层元素个数】2022年1月11日-NC15 求二叉树的层序遍历

    描述给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)例如:给定的二叉树是{3,9,20,#,#,15,7}, 注意:每一层上元素的个数 解答: import java.util ...

  5. SVNAdmin2 - 基于web的SVN管理系统

    1. 介绍 SVNAdmin2 是一款通过图形界面管理服务端SVN的web程序. 正常情况下配置SVN仓库的人员权限需要登录到服务器手动修改 authz 和 passwd 两个文件,当仓库结构和人员权 ...

  6. input、print、字符串格式化输出

    1.使用input(), print()进行用户交互 """ 以前银行取钱只能拿着存折去柜台跟小姐姐交流才可以 你想干嘛 我想取钱 请输入密码 滴滴滴密码 想取多少钱 我 ...

  7. Django中ORM多对多三种创建方式(全自动-纯手动-半自动)

    一:多对多三种创建方式 1.全自动: 利用orm自动帮我们创建第三张关系表 class Book(models.Model): name = models.CharField(max_length=3 ...

  8. VUE项目无法启动NODE版本与NODE-SASS、SASS-LOADER版本不兼容解决方案

    一.错误分析 在VUE项目开发中,我们经常会遇到报错: Node Sass version 7.0.1 is incompatible with ^4.0.0. 网上解决方案也千奇百怪,最终操作下来, ...

  9. 手动解析word Table模块内容

    最近来了一个需求, 需要手动解析word ( 好处就是不需要安装office 以及不会有office解析的线程残留),然后就是可以自定义解析规则,比较方便 比如解析这个word里面的内容: 标题,表格 ...

  10. 如何优雅地升级一个Creator 2.x 项目到 3.6.2 ?

    最近,我将之前用 Cocos Creator 2.x 写的一个微信小游戏<球球要回家>移植到了 Cocos Creator 3.6.2 上. 编程语言也从 JavaScript 迁移到了 ...