当前位置: 首页 > news >正文

selenium-wire简介

一.简介

以下来自chatGPT回答:

selenium-wire是一个基于selenium的Python库,它扩展了selenium的功能,使得我们可以在自动化测试中直接访问和修改浏览器的网络请求和响应。selenium-wire可以拦截和修改HTTP请求和响应,从而可以在测试过程中模拟 网络环境、调试和分析网络请求以及实现自定义的网络请求和响应处理逻辑。与selenium自带的webdriver不同,selenium-wire使用了第三方库mitmproxy来实现网络请求的拦截和修改。因此,使用selenium-wire需要先安装mitmproxy。

二.用法

1.安装selenium-wire库

pip install selenium-wire

mitmproxy安装使用可参考:https://www.cnblogs.com/lihongtaoya/p/17446958.html

2.获取请求信息

1)获取所有的请求信息

get_list = driver.requests  # 返回的是个数组
当调用 driver.requests时,返回的是当前页面所有已经请求并响应过了的接口数据。如果某个请求还没有完成或者被阻塞,那么这个请求对应的数据不会出现在 requests 列表中。

2)获取请求行/头/体

for i in get_list:if 'https://www.baidu.com/sugrec' in i.url:print(i.url)  # 请求地址print(i.date)  # 请求时间print(i.method)  # 请求方式print(i.headers)  # 请求头   or i.headers['Content-Type']print(i.params)  # 请求参数print(i.host)  # 请求域名

driver.requests获取的是当前页面所有的请求,因此我们在使用时需过滤下自己所要的接口信息。

3)create_response()方法

for i in get_list:if 'text/html' not in i.response.headers['Content-Type']:# create_response(status_code, headers=(), body=b'')i.create_response(200, [('Content-Type', 'text/plain')], b'["Hello","world"]')  # mock接口响应

create_response()为mock接口响应信息,返回我们需要的信息。

4)abort()方法

for i in get_list:if 'text/html' not in i.response.headers['Content-Type']:i.abort(error_code=403)  # 中断请求,并返回状态码403print(i.response.status_code)

这里需要注意的是3,4方法所可以改变响应数据,但服务端记录的数据还是实际请求的值。

3.获取响应信息

这里直接贴代码吧,备注很详细。

for i in get_list:if 'https://www.baidu.com/sugrec' in i.url:print(i.response.date)  # 当前响应时间print(i.response.reason)  # 响应状态 ok  or  Not foundprint(i.response.headers['Content-Type'])  # 响应的数据类型print(i.response.status_code)  # 响应状态码# 获取响应的body并转为json类型输出from seleniumwire.utils import decodebody = decode(i.response.body, i.response.headers.get('Content-Encoding', 'identity'))decoded_response = body.decode('utf-8')  # 将二进制字节串解码为 UTF-8 编码的字符串json_response = json.loads(decoded_response)  # 将 JSON 字符串转换为 Python 对象print(json_response)

4.实例

import json
import time
from selenium.webdriver.common.by import By
from seleniumwire import webdriverdriver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get("https://www.baidu.com")
driver.find_element(By.ID, value='kw').send_keys('猪')
driver.find_element(By.ID, value='su').click()
time.sleep(5)  # 等待5s,让所有接口请求完
get_list = driver.requests  # 获取当前所有的请求信息for i in get_list:if 'https://www.baidu.com/sugrec' in i.url:print(i.response.date)  # 当前响应时间print(i.response.reason)  # 响应状态 ok  or  Not foundprint(i.response.headers['Content-Type'])  # 响应的数据类型print(i.response.status_code)  # 响应状态码# 获取响应的body并转为json类型输出from seleniumwire.utils import decodebody = decode(i.response.body, i.response.headers.get('Content-Encoding', 'identity'))decoded_response = body.decode('utf-8')  # 将二进制字节串解码为 UTF-8 编码的字符串json_response = json.loads(decoded_response)  # 将 JSON 字符串转换为 Python 对象print(json_response)driver.quit()

 selenium-wrie官方文档:https://pypi.org/project/selenium-wire/

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关文章:

selenium-wire简介

一.简介 以下来自chatGPT回答: selenium-wire是一个基于selenium的Python库,它扩展了selenium的功能,使得我们可以在自动化测试中直接访问和修改浏览器的网络请求和响应。selenium-wire可以拦截和修改HTTP请求和响应,从而可以在…...

华为组播配置案例

igmp-snooping主要用于生成二层组播表项,防止交换机全部接口都发组播报文 PC端配置: 组播源配置: R1 interface GigabitEthernet0/0/0 ip address 10.0.0.1 255.255.255.0 pim dm interface GigabitEthernet0/0/1 ip address 192.168.0…...

lua语法

lua语法 1.lua数据类型 lua 脚本输出乱码,将lua脚本改为UTF-8编码,并且需要DOS下修改代码页:CHCP 65001 即可。 基本语法 注释 print("script lua win")-- 单行注释--[[多行注释]]--标识符 类似于:java当中 变量、…...

5A-Downloader,m3u8文件转mp4文件,音视频分离ts合并、转mp4

获取方式: 1.https://www.pgyer.com/DpxhpE 2.https://github.com/JoeLeeto/5A-Downloader 3.https://play.google.com/store/apps/details?idcom.leet.downloader...

标准IO与文件IO

标准IO通过缓冲机制减少系统调用,实现更高的效率 全缓冲:当流的缓冲区无数据或无空间时才执行实际IO操作 行缓冲:当在输入和输出中遇到换行符(\n)时,进行IO操作 当流和一个终端关联时,典型的行缓…...

流行的 React 相关库和框架

React 本身就是一个非常流行的 JavaScript 库,用于构建用户界面,特别是单页面应用。不过,有许多其他的库和框架与 React 结合使用,以提供额外的功能和优化开发体验。以下是一些最流行的 React 相关库和框架: Next.js&a…...

游戏引擎?

游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件。这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计者能容易和快速地做出游戏程式而不用由零开始。大部分都支持多种操作平台,如Linux、…...

C语言--字符函数与字符串函数

大家好,我是残念,希望在你看完之后,能对你有所帮助,有什么不足请指正!共同学习交流 本文由:残念ing 原创CSDN首发,如需要转载请通知 个人主页:残念ing-CSDN博客,欢迎各位…...

整理了一些热门、含免费次数的api,分享给大家

IP归属地-IPv4区县级:根据IP地址查询归属地信息,包含43亿全量IPv4,支持到中国地区(不含港台地区)区县级别,含运营商数据。IP应用场景- IPv4:IPv4应用场景是获取IP场景属性的在线调用接口&#x…...

Wireshark在网络性能调优中的应用

第一章:Wireshark基础及捕获技巧 1.1 Wireshark基础知识回顾 1.2 高级捕获技巧:过滤器和捕获选项 1.3 Wireshark与其他抓包工具的比较 第二章:网络协议分析 2.1 网络协议分析:TCP、UDP、ICMP等 2.2 高级协议分析:HTTP…...

关于设计师的自我评价(合集)

设计师的自我评价篇一 本人接受过正规的美术教育,具有较好的美术功底及艺术素养,能够根据公司的需要进行设计制作,熟练掌握多种电脑制作软件,能够高效率地完成工作。本人性格开朗、思维活跃、极富创造力,易于沟通&…...

Hudi Clustering

核心概念 Hudi Clustering对于在数据写入和读取提供一套相对完善的解决方案。它的核心思想就是: 在数据写入时,运行并发写入多个小文件,从而提升写入的性能;同时通过一个异步(也可以配置同步,但不推荐&…...

通过与 Team Finance 整合,Casper Network 让 Token 的创建、部署更加高效

随着 Team Finance 整合到 Casper 系统中,Token 创建的过程变得更加迅速而简便。Casper Network 的方案正在使代币的创建变得易于访问与调整,这将让任何有创意和业务理念的人能够以高效、可信的方式,更快速、安全地在 Casper 上推出他们的项目…...

Linux软件管理rpm和yum

rpm方式管理 rpm软件包名称: 软件名称 版本号(主版本、次版本、修订号) 操作系统 -----90%的规律 #有依赖关系,不能自动解决依赖关系。 举例:openssh-6.6.1p1-31.el7.x86_64.rpm 数字前面的是名称 数字是版本号:第一位主版本号,第二位次版本…...

uart和usart的区别

UART 通用异步收发器,一般来说,在单片机上,名为UART的接口只能用于异步串行通信。 USART 名为USART的接口既可用于同步串行通信,也可用于异步串行通信。...

原生微信小程序-使用 阿里字体图标 详解

步骤一 1、打开阿里巴巴矢量图标库 网址:iconfont-阿里巴巴矢量图标库 2、搜索字体图标,鼠标悬浮点击添加入库 3、按如下步骤添加到自己的项目 步骤二 进入微信开发者工具 1、创建 fonts文件夹 > iconfont.wxss 文件,将刚才的代码复制…...

机器学习 | 机器学习基础知识

一、机器学习是什么 计算机从数据中学习规律并改善自身进行预测的过程。 二、数据集 1、最常用的公开数据集 2、结构化数据与非结构化数据 三、任务地图 1、分类任务 Classification 已知样本特征判断样本类别二分类、多分类、多标签分类 二分类:垃圾邮件分类、图像…...

OpenHarmony鸿蒙原生应用开发,ArkTS、ArkUI学习踩坑学习笔记,持续更新中。

一、AMD处理器win10系统下,DevEco Studio模拟器启动失败解决办法。 结论:在BIOS里面将Hyper-V打开,DevEco Studio模拟器可以成功启动。 二、ArkTS自定义组件导出、引用实现。 如果在另外的文件中引用组件,需要使用export关键字导…...

RHCE8 资料整理(十)二

RHCE8 资料整理 第 31 章 变量的使用(一)31.1 手动定义变量31.2 变量文件31.3 字典变量31.4 列表变量31.5 数字变量的运算31.6 注册变量31.7 facts变量 第 31 章 变量的使用(一) 31.1 手动定义变量 通过vars来定义变量&#xff…...

CUDA 学习记录2

1.是否启用一级缓存有什么影响: 启用一级缓存(缓存加载操作经过一级缓存):一次内存十五操作以128字节的粒度进行。 不启用一级缓存(没有缓存的加载不经过一级缓存):在内存段的粒度上&#xff…...

【JavaEE】-- HTTP

1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...

Kafka入门-生产者

生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

c# 局部函数 定义、功能与示例

C# 局部函数:定义、功能与示例 1. 定义与功能 局部函数(Local Function)是嵌套在另一个方法内部的私有方法,仅在包含它的方法内可见。 • 作用:封装仅用于当前方法的逻辑,避免污染类作用域,提升…...

Python竞赛环境搭建全攻略

Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...