Python神器!WEB自动化测试集成工具 DrissionPage

news2024/11/17 18:22:29

案例

跟踪商品价格,降价自动推送消息到微信

咱买不起还等不起吗?

 
  1. from DrissionPage import *

  2. import re

  3. from time import sleep

  4. import csv

  5. import os

  6. import datetime#写入时间

  7. p = MixPage()

  8. p.get('http://xxxxxxx') #快快买网址

  9. p.to_iframe('iframeId')

  10. txt = p.ele('@class=currentprice').text

  11. print(txt)

  12. if int(txt) <= 1500: #判断当前价格小于1500

  13. #把消息推送到微信

  14. import requests

  15. token = 'xxx' #在pushplus网站中可以找到

  16. title= '降价了'

  17. content = '当前价'+txt

  18. url = 'http://pushplus.hxtrip.com/send?token='+token+'&title='+title+'&content='+content+'&template=html&topic=4'

  19. requests.get(url)

前言

用 requests 做数据采集面对要登录的网站时,要分析数据包、JS 源码,构造复杂的请求,往往还要应付验证码、JS 混淆、签名参数等反爬手段,门槛较高。若数据是由 JS 计算生成的,还须重现计算过程,体验不好,开发效率不高。使用浏览器,可以很大程度上绕过这些坑,但浏览器运行效率不高。

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

除了合并两者,本库还以网页为单位封装了常用功能,提供非常简便的操作和语句,在用于网页自动化操作时,减少考虑细节,专注功能实现,使用更方便。一切从简,尽量提供简单直接的使用方法,对新手更友好。

特性

本库采用全自研的内核,内置了 N 多实用功能,对常用功能作了整合和优化,对比 selenium,有以下优点:

  • • 无 webdriver 特征,不会被网站识别
  • • 无需为不同版本的浏览器下载不同的驱动
  • • 运行速度更快
  • • 可以跨 iframe 查找元素,无需切入切出
  • • 把 iframe 看作普通元素,获取后可直接在其中查找元素,逻辑更清晰
  • • 可以同时操作浏览器中的多个标签页,即使标签页为非激活状态,无需切换
  • • 可以直接读取浏览器缓存来保存图片,无需用 GUI 点击另存
  • • 可以对整个网页截图,包括视口外的部分(90以上版本浏览器支持)

亮点功能

除了以上优点,本库还内置了无数人性化设计:

  • • 极简的语法规则。集成大量常用功能,代码更优雅
  • • 定位元素更加容易,功能更强大稳定
  • • 无处不在的等待和自动重试功能。使不稳定的网络变得易于控制,程序更稳定,编写更省心
  • • 提供强大的下载工具。操作浏览器时也能享受快捷可靠的下载功能
  • • 允许反复使用已经打开的浏览器。无须每次运行从头启动浏览器,调试超方便
  • • 使用 ini 文件保存常用配置,自动调用,提供便捷的设置,远离繁杂的配置项
  • • 内置 lxml 作为解析引擎,解析速度成几个数量级提升
  • • 使用 POM 模式封装,可直接用于测试,便于扩展
  • • 高度集成的便利功能,从每个细节中体现

结构图

WebPage 继承自 ChromiumPage 和 SessionPage ,前者负责控制浏览器,后者负责数据包收发,因此WebPage 既能控制浏览器,也能收发数据包,并且能在两种模式中共享登录状态。

特性演示

以下代码实现一模一样的功能,对比两者的代码量:

与 requests 对比

获取元素内容:

 
  1. url = 'https://baike.baidu.com/item/python'

  2. # 使用 requests:

  3. from lxml import etree

  4. 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'}

  5. response = requests.get(url, headers = headers)

  6. html = etree.HTML(response.text)

  7. element = html.xpath('//h1')[0]

  8. title = element.text

  9. # 使用 DrissionPage:

  10. page = WebPage('s')

  11. page.get(url)

  12. title = page('tag:h1').text

下载文件:

 
  1. url = 'https://www.baidu.com/img/flexible/logo/pc/result.png'

  2. save_path = r'C:\download'

  3. # 使用 requests:

  4. r = requests.get(url)

  5. with open(f'{save_path}\\img.png', 'wb') as fd:

  6. for chunk in r.iter_content():

  7. fd.write(chunk)

  8. # 使用 DrissionPage:

  9. page.download(url, save_path, 'img') # 支持重命名,处理文件名冲突

与 selenium 对比

用显性等待方式查找第一个文本包含 some text 的元素:

 
  1. # 使用 selenium:

  2. element = WebDriverWait(driver).until(ec.presence_of_element_located((By.XPATH, '//*[contains(text(), "some text")]')))

  3. # 使用 DrissionPage:

  4. element = page('some text')

跳转到第一个标签页:

 
  1. # 使用 selenium:

  2. driver.switch_to.window(driver.window_handles[0])

  3. # 使用 DrissionPage:

  4. page.to_tab(0)

按文本选择下拉列表:

 
  1. # 使用 selenium:

  2. from selenium.webdriver.support.select import Select

  3. select_element = Select(element)

  4. select_element.select_by_visible_text('text')

  5. # 使用 DrissionPage:

  6. element.select('text')

拖拽一个元素:

 
  1. # 使用 selenium:

  2. ActionChains(driver).drag_and_drop(ele1, ele2).perform()

  3. # 使用 DrissionPage:

  4. ele1.drag_to(ele2)

用 xpath 直接获取属性或文本节点(返回文本):

 
  1. # 使用 selenium:

  2. 相当复杂

  3. # 使用 DrissionPage:

  4. class_name = element('xpath://div[@id="div_id"]/@class')

  5. text = element('xpath://div[@id="div_id"]/text()[2]')

安装和导入

安装
pip install DrissionPage
导入

WebPage 是功能最全面的页面类,既可控制浏览器,也可收发数据包。通常程序从导入它开始。

from DrissionPage import WebPage

也可以根据具体需要,导入相应的类:

 
  1. # ChromiumPage 只控制浏览器,不能收发数据包

  2. from DrissionPage import ChromiumPage

  3. # SessionPage 只用于收发数据包,不能控制浏览器

  4. from DrissionPage import SessionPage

  5. # 浏览启动参数管理器,用于控制浏览器启动参数

  6. from DrissionPage import DriverOptions

  7. # Session对象启动参数管理器,用于控制Session对象启动参数

  8. from DrissionPage import SessionOptions

  9. # 动作链类,用于模拟一连串鼠标键盘动作

  10. from DrissionPage import ActionChains

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

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

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

相关文章

Netty学习——源码篇7 Pipeline的事件传播机制1 备份

上篇&#xff1a;Netty学习——源码篇6 Pipeline设计原理 已经知道AbstractChannelHandlerContext中有Inbound和Outbound两个boolean变量&#xff0c;分别用于识别Context所对应的Handler的类型。 1、Inbound为true时&#xff0c;表示其对应的ChannelHandler是ChannelInboundHa…

【深入日志打印】log.error(“你好{}“, “世界“, e);只有一个占位符是否会打印后面多出的参数呢?(详细跟进源码讲解调试分析)

文章目录 【深入日志打印】log.error(“你好{}“, “世界“, e)&#xff1b;只有一个占位符是否会打印后面多出的参数呢&#xff1f;&#xff08;详细跟进源码讲解调试分析&#xff09;测试代码执行结果调试分析其他样例探讨 【深入日志打印】log.error(“你好{}“, “世界“, …

【电能管理】电力物联网仪表/多功能电表/无线计量/多回路计量/分项计量/终端感知设备/全电量参数测量/正反向有功无功测量

什么是物联网电表&#xff01;&#xff01;&#xff01; 安科瑞薛瑶瑶18701709087 物联网电表是智能电表的一种&#xff0c;可以用无线通信方式来操控&#xff0c;除了拥有电度表的有点以外&#xff0c;还可以把硬件和软件联合起来发挥更大的作用。 物联网电表主要用于计量低…

UOS、Linux下的redis的详细部署流程(适用于内网)

提示&#xff1a;适用于Linux以及UOS等内外网系统服务器部署。 文章目录 一.上传离线包二.部署基本环境三.解压并安装redis四.后台运行redis五.uos系统可能遇到的问题六.总结 一.上传离线包 1.自己去Redis官网下载适配自己部署系统的redis安装包。 2.通过文件传输工具&#xf…

微信平台会员卡应用源码系统 带完整的安装代码包以及搭建教程

在移动互联网时代&#xff0c;消费者对于便捷、个性化的服务需求日益增长。微信会员卡作为一种创新的营销方式&#xff0c;不仅能为消费者提供便捷的会员服务&#xff0c;还能帮助商家更好地管理会员信息&#xff0c;提升营销效果。然而&#xff0c;许多商家由于缺乏技术支持&a…

钡铼技术R40工业4G路由器为户外广告牌智能控制系统提供无线网络

钡铼技术R40工业4G路由器在户外广告牌智能控制系统中的应用&#xff0c;为广告行业带来了革命性的变革。作为一种先进的无线通信设备&#xff0c;R40工业4G路由器通过其稳定的信号传输和强大的网络连接能力&#xff0c;为户外广告牌的智能控制系统提供了可靠的无线网络支持&…

蓝桥杯day14刷题日记

P8707 [蓝桥杯 2020 省 AB1] 走方格 思路&#xff1a;很典型的动态规划问题&#xff0c;对于偶数格特判&#xff0c;其他的正常遍历一遍&#xff0c;现在所处的格子的方案数等于左边的格子的方案数加上上面格子的方案数之和 #include <iostream> using namespace std; …

北京朝阳办理广播电视节目制作经营许可证材料和要求

北京经典世纪集团有限公司-资 质代办 尊敬的客户&#xff0c;您对于办理广播电视节目制作经营许可证的需求我们深感关切。作为专 业的资 质代办机构&#xff0c;我们的目标是为您提供一站式服务&#xff0c;帮助您高效顺利地完成所有办理程序。&#xff08;游览器搜经典世纪胡云…

【竞技宝】国足4比1大胜新加坡,武磊独造三球记首功

国足在本轮世预赛主场跟新加坡狭路相逢,这场比赛对于主帅伊万科维奇来说不容有失。因为,国足之前未能在客场击败新加坡,让球队出线前景变得非常严峻。如果,国足还想从36强赛杀出重围,就必须主场战胜新加坡。如果,国足主场都赢不了新加坡,伊万科维奇将面临下课危机。重压之下的伊…

IPv6-基础概念

IPv6基础概念 IPv6技术特点&#xff1a;精简报文格式、实现自动配置和重新编制、支持层次化网络编制、支持端对端安全、更好的支持Qos、支持移动特性。 五元组&#xff1a;源地址&#xff0c;目的地址&#xff0c;源端口&#xff0c;目的端口&#xff0c;协议。 IPv6报头优势…

Abaqus周期性边界代表体单元Random Sphere RVE 3D (Mesh)插件

插件介绍 Random Sphere RVE 3D (Mesh) - AbyssFish 插件可在Abaqus生成三维具备周期性边界条件(Periodic Boundary Conditions, PBC)的随机球体骨料及骨料-水泥界面过渡区(Interfacial Transition Zone, ITZ)模型。即采用周期性代表性体积单元法(Periodic Representative Vol…

【Linux实践室】Linux用户管理实战指南:用户密码管理操作详解

&#x1f308;个人主页&#xff1a;聆风吟_ &#x1f525;系列专栏&#xff1a;Linux实践室、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 一. ⛳️任务描述二. ⛳️相关知识2.1 &#x1f514;用户密码存放地及方式2.2 &#x1f514;使用…

批量删除 rabbitmq中随机队列

批量删除 amq.gen–* 随机队列 操作错误产生了无效随机队列&#xff0c;需要批量删除 过滤列出指定amq.gen–队列 # 列出 指定 vhost/qq 以amq.gen开头的所有队列 rabbitmqctl list_queues --vhost / | grep ^amq.gen-# 批量删除队列 #由于list_queues会列出队列名称以及对应…

python实现图片压缩

首先 pip install Pillow compression_level参数&#xff0c;该参数的范围从0到100&#xff0c;其中0表示最小尺寸&#xff08;最高压缩&#xff09;&#xff0c;100表示最大质量&#xff08;最小压缩&#xff09;。这个脚本将尝试在保持图片可识别性的同时&#xff0c;尽可能…

解锁TikTok直播专线,提高使用体验

TikTok&#xff0c;作为当今全球最受欢迎的社交媒体平台之一&#xff0c;给商家带来了无限的商机与市场。然而&#xff0c;商家在TikTok的网络体验也面临诸多挑战&#xff0c;例如网络卡顿、直播断线以及账号易被封锁等问题。为解决这些难题&#xff0c;我们推出了TikTok直播专…

系统安装(kuntaiR522 kvm安装)

(1)通过PC1 web连接Server2,给Server2安装rocky-arm64 CLI系统(语言为英文)。 首先是访问server2的IPMI口,访问192.168.2.10, 用户为Admin,密码为Admin@123 登录进去 以HTML5 集成控制台方式打开 插入U盘修改启动项安装系统

逆向案例9--小鹅通视频m3u8内容解密--含简单webpack

视频网址&#xff1a;https://app4nseessp8638.h5.xiaoeknow.com/v2/course/alive/l_65b9e8dfe4b064a83b90e102?type2&app_idapp4nseessp8638&channel_id&res_type4&pro_id&res_idl_65b9e8dfe4b064a83b90e102 按照惯例&#xff0c;刷新网站&#xff0c;搜…

MFC(二)集成基础控件

目录 OnCreateCStatic【标签&#xff0c;图片】CEdit【文本框&#xff0c;密码框&#xff0c;数值框&#xff0c;文本区】CButton【按钮&#xff0c;单选按钮&#xff0c;多选按钮】CComboBox【下拉列表&#xff0c;列表】CSliderCtrl【滑动条】CListCtrl【表格】CAnimateCtrl【…

LangChain核心概念与组件

Chains Chains可以让你按照一定的顺序和逻辑来执行不同的任务。Chains有以下四种类型&#xff1a; 类型作用LLMChain用于在语言模型周围添加一些功能的简单Chain&#xff0c;它由一个PromptTemplate和一个语言模型&#xff08;LLM或chat model&#xff09;组成&#xff0c;它…

FlorisBoard:Android开源键盘的现代化选择

FlorisBoard&#xff1a;Android开源键盘的现代化选择 简介 FlorisBoard是一款免费且开源的安卓键盘&#xff0c;适用于Android 7.0及以上版本的设备。它的现代化设计和用户友好的界面使其在众多键盘应用中脱颖而出。FlorisBoard的独特之处在于它注重用户体验的同时&#xff0…