推荐一款新的自动化测试框架:DrissionPage

news2025/7/14 3:38:19

今天给大家推荐一款基于Python的网页自动化工具:DrissionPage。这款工具既能控制浏览器,也能收发数据包,甚至能把两者合而为一,简单来说:集合了WEB浏览器自动化的便利性和 requests 的高效率。

一、DrissionPage产生背景

实现网页自动化,会有两类形式:

  • 直接向服务器发送请求数据包,获取需要的数据
  • 模拟真实用户操作行为,控制浏览器跟网页进行交互

前者轻量级,速度快,例如requests 库。但requests面对需要登录的网站时,往往还要应付验证码、JS 混淆、签名参数等反爬手段,门槛较高。若数据是由 JS 计算生成的,还须重现计算过程,开发效率不高。

而后者直接使用浏览器,模拟用户行为,如Selenium库,可以很大程度上绕过这些坑,但浏览器运行效率不高。

因此,DrissionPag设计初衷,是将它们合而为一,能够在不同须要时切换相应模式,并提供一种人性化的使用方法,提高开发和运行效率。

为什么叫DrissionPag

Selenium框架用于操作浏览器的对象叫 Driver,requests 用于管理请求连接的对象叫 Session,因此Drission 就是它们两者的合体。在旧版本中,是通过对 selenium 和 requests 的重新封装实现的。

但从 3.0 版开始,作者另起炉灶,用 chromium 协议自行实现了 selenium 全部功能,从而摆脱了对 selenium 的依赖,功能更多更强,运行效率更高,开发更灵活。

二、DrissionPage亮点特色

本库采用全自研的内核,对比 selenium,有以下优点:

  • 无 webdriver 特征,不会被网站识别,无需为不同版本的浏览器下载不同的驱动
  • 运行速度更快,可以跨 iframe 查找元素,无需切入切出,iframe 看作普通元素,获取后可直接在其中查找元素,逻辑更清晰
  • 可以同时操作浏览器中的多个标签页,即使标签页为非激活状态,无需切换
  • 内置等待和自动重试功能。使不稳定的网络变得易于控制,程序更稳定,编写更省心
  • 允许反复使用已经打开的浏览器。无须每次运行从头启动浏览器,调试超方便
  • 极简的语法规则。集成大量常用功能,定位元素更加容易,功能更强大稳定
  • 使用 POM 模式封装,可直接用于测试,便于扩展
  • 等等。。。

三、安装搭建

说了这么多,相信很多人已经跃跃欲试了,怎么快速搭建这套框架,先要准备一些基础环境。

环境准备

  • 操作系统:Windows、Linux 或 Mac。
  • python 版本:3.6 及以上
  • 支持浏览器:Chromium 内核(如 Chrome 和 Edge)

项目地址:

https://gitee.com/g1879/DrissionPage

使用 pip 安装 DrissionPage:

pip install DrissionPage

另外在开始之前,我们先进行一些简单设置。如果只使用收发数据包功能,无须任何准备工作。

如果要控制浏览器,须设置浏览器路径。程序默认设置控制 Chrome,所以以下用 Chrome 作为演示。如果要使用 Edge 或其它 Chromium 内核浏览器,设置方法是一样的。

设置浏览器路径:

from DrissionPage.easy_set import set_paths
set_paths(browser_path=r'这里修改为您的Chrome浏览器exe文件路径')

这段代码会记录 Chrome 浏览器路径到配置文件。由于路径设置只要运行一次即可,不要写到正式程序里。一般建议新建一个临时 py 文件,并输入以下代码,填入您电脑里的 Chrome 浏览器 exe 文件路径,然后执行。

四、实战一下

1、尝试启动浏览器:

from DrissionPage import ChromiumPage

page = ChromiumPage()
page.get('https://www.baidu.com')

执行以下代码,如果正常启动了浏览器并且访问了百度,说明可直接使用,跳过后面的步骤即可。

执行代码前,如果已有打开的 Chrome 浏览器,请关闭。

2、与selenium框架代码对比

#案例一:用显性等待方式查找第一个文本包含 some text 的元素。
# 使用 selenium:
element = WebDriverWait(driver).until(ec.presence_of_element_located((By.XPATH, '//*[contains(text(), "some text")]')))

# 使用 DrissionPage:
element = page('some text')

#案例二:跳转到第一个标签页
# 使用 selenium:
driver.switch_to.window(driver.window_handles[0])

# 使用 DrissionPage:
page.to_tab(0)

# 案例三:拖拽一个元素
# 使用 selenium:
ActionChains(driver).drag_and_drop(ele1, ele2).perform()

# 使用 DrissionPage:
ele1.drag_to(ele2)

以上代码实现一模一样的功能,但DrissionPage代码明显更简洁优雅。

3、与requests框架代码对比

# 案例一:获取元素内容
url = 'https://baike.baidu.com/item/python'

# 使用 requests:
from lxml import etree
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36'}
response = requests.get(url, headers = headers)
html = etree.HTML(response.text)
element = html.xpath('//h1')[0]
title = element.text

# 使用 DrissionPage:
page = WebPage('s')
page.get(url)
title = page('tag:h1').text

4、DrissionPage不同模式切换

例如:用浏览器登录网站,然后切换到 requests 读取网页。两者会共享登录信息。

from DrissionPage import WebPage
from time import sleep

# 创建页面对象,默认 d 模式
page = WebPage()  
# 访问个人中心页面(未登录,重定向到登录页面)
page.get('https://gitee.com/profile')  

# 使用 selenium 输入账号密码登录
page.ele('@id:user_login').input('your_user_name')  
page.ele('@id:user_password').input('your_password\n')
sleep(1)

# 切换到 s 模式
page.change_mode()  
# 登录后 session 模式的输出
print('登录后title:', page.title, '\n')  

五、小结

DrissionPage体验一番后,虽然也发现了一些不足的地方,但整得来讲,很多设计理念还是非常值得借鉴的,更多功能就留给大家去探索了,项目文档地址:

http://g1879.gitee.io/drissionpagedocs/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/362390.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

跳跃游戏-力扣55-java动态规划

一、题目描述给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例 1:输入:nums [2,3,1,1,4]输出:true解释:可以先跳…

区间合并计算问题(LC-1326、LC-1024、LC-55、LC-45)

区间合并计算问题 文章目录区间合并计算问题[1326. 灌溉花园的最少水龙头数目](https://leetcode.cn/problems/minimum-number-of-taps-to-open-to-water-a-garden/)贪心[1024. 视频拼接](https://leetcode.cn/problems/video-stitching/)[55. 跳跃游戏](https://leetcode.cn/p…

[JavaEE系列] 详解面试中HTTP协议HTTPS协议

文章目录HTTP不安全HTTPS中的加密算法对称加密非对称加密混合加密HTTPS中的摘要算法HTTPS中的数字证书SSL /TLS握手TCP建立连接(三次握手)三次握手中常见的面试题:TCP断开连接(四次挥手)四次挥手中常见的面试题&#x…

比亚迪决定不给日系留“活路”了

本文来源:品驾/ 导读 /比亚迪的战争又打响了。2月10日,比亚迪秦PLUS DM-i2023冠军版正式上市,新车虽然改动不大,但起步价已至99800元,DM-i车型价格首次下探到10万以下这个区间。这场战争有那么可怕吗?有人还…

JSCharting 3.4 JavaScript Crack

JSCharting 利用其 JavaScript 图表库中十多年的真实世界图表和可视化专业知识。JSCharting 拥有超过 150 种图表类型,提供了一整套无缝集成的产品,包括甘特图、组织图表、地图、日历、网格、财务、股票、微型图、迷你图和所有类型的仪表板,用…

【论文简述】SKFlow: Learning Optical Flow with Super Kernels(NeurIPS 2022)

一、论文简述 1. 第一作者:Shangkun Sun 2. 发表年份:2022 3. 发表期刊:NeurIPS 4. 关键词:光流、代价体、遮挡区域、大核卷积、跳跃连接 5. 探索动机:遮挡问题是光流最大的挑战之一。 现有的解决方案&#xff1a…

JavaDoc生成API文档(powernode CD2207)(内含教学视频+源代码)

JavaDoc生成API文档(powernode CD2207)(内含教学视频源代码) 教学视频源代码下载链接地址:https://download.csdn.net/download/weixin_46411355/87473419 目录JavaDoc生成API文档(powernode CD2207)(内含教学视频源代…

robotiq 2f 140安装在UR3机械臂后面在gazebo仿真中散架、抖动

robotiq 2f 140安装在UR3机械臂后面在gazebo仿真中散架、抖动 搭建环境: ubuntu: 20.04 ros: Nonetic sensor: robotiq_ft300 gripper: robotiq_2f_140_gripper UR: UR3 通过上一篇博客配置好ur3、力传感器和robotiq夹爪的gazebo仿真环境后,夹爪看起来…

操作系统作业

1、下列关于线程的描述中,错误的是A.内核级线程的调度由操作系统完成B.操作系统为每个用户级线程建立一个线程控制块C.用户级线程间的切换比内核级线程间的切换效率高D.用户级线程可以在不支持内核级线程的操作系统上实…

07- 图像上下采样及图像直方图显示 (OpenCV基础) (机器视觉)

知识重点 高斯金字塔pyrDown向下采样: dst cv2.pyrDown(img) # 每次处理后, 结果图像是原来的1/4.pyrUp 向上采样: dst cv2.pyrUp(img) # 放大图片拉普拉斯金字塔 保留的就是残差: img- PyrUp(PyrDown(img))统计直方图: hist cv2.calcHist([img], [0], None, [25…

element/tree的使用(树的多选以及回显)

获取和设置各有两种方式&#xff1a;通过 node 或通过 key。如果需要通过 key 来获取或设置&#xff0c;则必须设置node-key。 <el-tree:data"data"show-checkboxdefault-expand-allnode-key"id"ref"tree"highlight-current:props"defa…

Oracle格式化五位数字格式时间

首先五位的时间格式一般出现在Excel批量导入时&#xff0c;年月日的时间格式读取时出现可以在excel文件中复现出来&#xff0c;在Excel文件中填写时间格式2023/02/21&#xff0c;然后右键设置单元格格式就选择常规就可以显示为5位的时间格式&#xff0c;也就是说2023/02/21对应…

不要对chatgpt过度反思 第二部分

如果未来&#xff0c;它真的可以引爆下一轮科技革命&#xff0c;只要双方不存在科技代差&#xff0c;就无法阻止科技扩散。 打个比方&#xff0c;如果你本身没有网络基础&#xff0c;没有大数据&#xff0c;她确实和你无关&#xff0c;反之&#xff0c;捅破了那层窗户纸&#x…

5.9 BGP属性-local_pref

配置BGP LOCAL_PREF属性控制选路 1. 实验目的 熟悉BGP LOCAL_PREF属性控制选路的应用场景掌握BGP LOCAL_PREF属性控制选路的配置方法2. 实验拓扑 实验拓扑如图5-9所示: 图5-9:配置BGP LOCAL_PREF属性控制选路 3. 实验步骤 (…

html笔记(一)

一、html简介 什么是HTML&#xff1f; Hyper Text Markup Language 超文本标记语言 超文本&#xff1f;超级文本&#xff0c;例如流媒体&#xff0c;声音、视频、图片等。 标记语言&#xff1f;这种语言是由大量的标签组成。 任何一个标签都有开始标签和结束标签&…

Datawahle组队学习——妙趣横生大数据 Day3

妙趣横生大数据 Day3四、HBase1. 背景2. HBase 概述3. HBase 数据模型相关概念数据坐标概念视图物理视图面向列的存储4. HBase 实现原理HBase 功能组件表和 RegionRegion 定位5. HBase 运行机制系统架构Region服务器的工作原理Store工作原理HLog工作原理实验Datawhale 大数据技…

Redis学习之Jedis(五)

这里写目录标题一、Jedis简介二、Jedis代码实现2.1 新建java工程2.2 导入jar包2.3 编写代码2.4 这里可以换用maven项目三、Jedis简易工具类开发3.1 添加jar包3.2 封装连接参数3.3 加载配置信息3.4 获取连接一、Jedis简介 Jedis提供了Java与Redis的连接服务。 二、Jedis代码实…

Sigmoid和Softmax共通与区分

一、共同点 Softmax以及Sigmoid这两者都是神经网络中的激活函数&#xff0c;将输入非线性化。 都作为神经网络的最后一层&#xff0c;将输出数值转换为概率值。 二、不同点 1、Softmax Softmaxexi∑j1nexjSoftmax \frac{e^{x_{i}}}{\sum_{j1}^{n}e^{x_{j}}} Softmax∑j1n​…

第一章 操作系统概述

目录一、什么是操作系统&#xff1f;1、操作系统的概念2、计算系统的构成3、主要作用二、操作系统有哪些功能&#xff1f;1、操作系统的目标2、操作系统的功能三、操作系统有哪些特征&#xff1f;1、并发性2、共享性3、虚拟性4、异步性四、操作系统的运行机制是怎样的&#xff…

uniapp 实时定位(高德、后台运行、支持息屏、坐标转换、距离计算) Ba-LocationAMap

简介&#xff08;下载地址&#xff09; Ba-LocationAMap 是一款基于高德的定位插件。支持实时定位、后台运行、息屏运行等&#xff1b;支持逆地理地址信息&#xff1b;支持坐标转换&#xff1b;支持坐标转换&#xff1b;支持距离计算&#xff1b;支持电池优化白名单。 本插件…