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

news/2024/4/26 5:39:35/文章来源:https://blog.csdn.net/sdoa0806/article/details/129132193

今天给大家推荐一款基于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 ChromiumPagepage = 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.luyixian.cn/news_show_72205.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3-element-admin搭建

vue3-element-admin 是基于 vue-element-admin 升级的 Vue3 Element Plus 版本的后台管理前端解决方案,是 有来技术团队 继 youlai-mall 全栈开源商城项目的又一开源力作功能清单技术栈清单技术栈 描述官网Vue3 渐进式 JavaScript 框架 https://v3.cn.vuejs.org/Ty…

经纬度坐标点和距离之间的转换

1.纬度相同,经度不同 在纬度相同的情况下: 经度每隔0.00001度,距离相差约1米; 每隔0.0001度,距离相差约10米; 每隔0.001度,距离相差约100米; 每隔0.01度,距离相差约1000米…

基于龙芯 2K1000 的嵌入式 Linux 系统移植和驱动程序设计(一)

2.1 需求分析 本课题以龙芯 2K1000 处理器为嵌入式系统的处理器,需要实现一个完成的嵌入式软件系统,系统能够正常启动并可以稳定运行嵌入式 Linux。设计网络设备驱 动,可以实现板卡与其他网络设备之间的网络连接和文件传输。设计 PCIE 设备驱…

我的 System Verilog 学习记录(1)

引言 技多不压身,准备开始学一些 System Verilog 的东西,充实一下自己,这个专栏的博客就记录学习、找资源的一个过程,希望可以给后来者一些借鉴吧,IC找工作的都加把油! 本文是准备先简单介绍一下环境搭建…

洛谷P1125 [NOIP2008 提高组] 笨小猴 C语言/C++

[NOIP2008 提高组] 笨小猴 题目描述 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大! 这种方法的具体描述如下:假设 maxn\…

JAVA集合之并发集合

从Java 5 开始,在java.util.concurrent 包下提供了大量支持高效并发访问的集合接口和实现类,如下图所示: 以CopyOnWrite开头的集合即写时复制的容器。通俗的理解是当我们往一个容器添加元素的时候,不直接往容器添加,而…

直播预告 | 嵌入式BI如何将数据分析真正融入业务流程

在信息化高速发展的今天,数据成为企业最有价值的资产之一。而数据本身很难直接传递有价值的信息,只有通过对数据进行挖掘、分析,才能让数据真正成为生产力。 商业智能(BI)应运而生,可以帮助企业更好地从数…

Julia 交互式命令窗口

执行 julia 命令可以直接进入交互式命令窗口: $ julia __ _ _(_)_ | Documentation: https://docs.julialang.org(_) | (_) (_) |_ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help.| | | | | | |/ _ | || |…

nginx的介绍及源码安装

文章目录前言一、nginx介绍二、nginx应用场合三、nginx的源码安装过程1.下载源码包2.安装依赖性-安装nginx-创建软连接-启动服务-关闭服务3.创建nginx服务启动脚本4.本实验---纯代码过程前言 高可用:高可用(High availability,缩写为 HA),是指系统无中断地执行其功…

win7下安装postgreSQL教程

系统环境:Windows 7 旗舰版 64位操作系统 安装版本:postgresql-9.1.4-1-windows-x64 安装步骤: 1、下载系统对应的软件版本; 2、双击“postgresql-9.1.4-1-windows-x64.exe”打开安装窗口; 3、Welcome页,…

图解操作系统

硬件结构 CPU是如何执行程序的? 图灵机的工作方式 图灵机的基本思想:用机器来模拟人们用纸笔进行数学运算的过程,还定义了由计算机的那些部分组成,程序又是如何执行的。 图灵机的基本组成如下: 有一条「纸带」&am…

allure简介

allure介绍allure是一个轻量级,灵活的,支持多语言的测试报告工具多平台的,奢华的report框架可以为dev/qa提供详尽的测试报告、测试步骤、log也可以为管理层提供high level统计报告java语言开发的,支持pytest,javaScript,PHP等可以…

C语言——动态内存管理

目录0. 思维导图:1. 为什么存在动态内存分配2. 动态内存函数介绍2.1 malloc和free2.2 calloc2.3 realloc3. 常见的动态内存错误3.1 对NULL指针的解引用操作3.2 对动态内存开辟的空间越界访问3.3 对非动态开辟内存使用free释放3.4 使用free释放一块动态开辟内存的一部…

django+celery+ RabbitMQ自定义多个消息队列

关于django celery的使用网上有很多文章,本文就不多做更多的说明。 本文使用版本 python3.8.15 Django3.2.4 celery5.2.7celery.py from __future__ import absolute_import, unicode_literals import os from celery import Celery from kombu import Exchange, …

毕业后想从事软件测试,现在需要学习哪些内容呢

在你选择学习之前,要先考虑一下这个是不是你喜欢的发展方向,而不是只听别人推荐就直接做了选择先了解下软件测试是做什么的以及未来发展前景,最后才是如何自学 软件测试就是在测试这个软件是不是能够完全按照需求运行。软件测试岗再简单点说…

Windows启动docker客户端报错:Hardware assisted virtualization and enabled in the BIOS

报错内容 : 🌟1.在控制面板中点击 启用或关闭Windows功能🌟2.勾选如下复选框🌟3.Windows功能中没有Hyper-V复选框怎么办?(如果有请跳过此步骤)此时不同人的电脑还会出现没有Hyper-V选项的情况1.打开 Windows PowerShell,输入 sys…

如何效率搭建企业流程系统?试试低代码平台吧

编者按:本文介绍了一款可私有化部署的低代码平台,可用于搭建团队流程管理体系,并详细介绍了该平台可实现的流程管理功能。关键词:可视化设计,集成能力,流程审批,流程调试天翎是国内最早从事快速开发平台研发…

Hive内部表与外部表的区别具体说明

目录 1.在/opt/atguigu/目录下,新建两个txt文件 2.在hadoop的web端递归创建一个目录,存储这两个文件 3.查看web端的文件 一、内部表: 1.创建一个内部表,并指定内部表的存储位置 2.查看内部表,内部表中没有数据 …

2023.2 新方案 java代码混淆 java加密 字符串加密

Java字节码可以反编译,特别是创业公司,很好的项目很容易被别人破解反编译,造成很严重的损失,所以本混淆方案能很好的保护源码,而且在不断迭代,增强混淆效果,异常问题处理,达到保护项目的目的: 本次升级包括: 2023年02年19日 : ht-confusion-project-1.8…

PK体系下的教育场景—电子白板的应用

PK体系指基于国产飞腾(Phytium)CPU和麒麟(Kylin)操作系统的技术和产业体系,被誉为“中国架构”,目前基于PK体系的相关软硬件已经广泛用于党政、金融、电信等关基行业。教育信创在国家大战略布局下&#xff…