Selenium 获取接口响应数据

目录

前言

seleniumwire简介

功能

兼容性

目录

安装

创建webdriver

获取请求

请求对象

限制请求捕获


前言

有时候需要知道UI界面操作的同时接口响应数据是否正常,这时就需要获取接口响应数据。Selenium本身没有获取接口响应的api,但是可以通过第三方库seleniumwire获取接口响应数据。

seleniumwire简介

SeleniumWire扩展了Selenium的Python绑定,使您可以访问浏览器发出的底层请求。您以与Selenium相同的方式编写代码,但您获得了额外的API来检查请求和响应,并对其进行动态更改。

功能

  • 纯Python,用户友好的API
  • 捕获HTTP和HTTPS请求
  • 拦截请求和响应
  • 动态修改标题、参数和正文内容
  • 捕获websocket消息
  • 支持HAR格式
  • 代理服务器支持

兼容性

  • Python 3.7+
  • Selenium 4.0.0+
  • Chrome, Firefox, Edge and Remote Webdriver supported

目录

安装

pip install selenium-wire

创建webdriver

from seleniumwire import webdriver

注意不是从selenium包中导入。

然后像直接使用Selenium一样实例化web驱动程序。您可以传入任何所需的功能或特定于浏览器的选项,如可执行路径、无头模式等。seleniumwire也有自己的选项,可以在seleniumwire_options属性中传递。

# Create the driver with no options (use defaults)
driver = webdriver.Chrome()# Or create using browser specific options and/or seleniumwire_options options
driver = webdriver.Chrome(options = webdriver.ChromeOptions(...),seleniumwire_options={...}
)

请注意,对于webdriver的子包,您应该继续直接从selenium导入这些子包。例如,要导入WebDriverWait:

# Sub-packages of webdriver must still be imported from `selenium` itself
from selenium.webdriver.support.ui import WebDriverWait

获取请求

SeleniumWire捕获浏览器发出的所有HTTP/HTTPS流量[1]。以下属性提供对请求和响应的访问权限。

driver.requests

按时间顺序捕获的请求的列表。

driver.last_request

用于检索最近捕获的请求的便利属性。这比使用driver.requests[-1]更有效。

请求对象

body

以字节为单位的请求正文。如果请求没有正文,则正文的值将为空,即b''。

headers

请求头的类似字典的对象。标头不区分大小写,允许重复。请求.headers['user-agent']将返回用户代理标头的值。如果你想替换一个标头,请确保先用del request.headers〔'header-name〕删除现有的标头,否则你会创建一个重复的标头。

response

与请求关联的响应对象。如果请求没有响应,则此选项将为“无”。

限制请求捕获

SeleniumWire的工作原理是通过后台启动的内部代理服务器重定向浏览器流量。当请求流经代理时,它们会被拦截和捕获。捕获请求可能会稍微减慢速度,但您可以做一些事情来限制捕获的内容。
driver.scopes
这接受一个正则表达式列表,这些正则表达式将与要捕获的URL相匹配。在提出任何请求之前,应该在驱动程序上设置它。当为空(默认值)时,将捕获所有URL。

driver.scopes = ['.*stackoverflow.*','.*github.*'
]driver.get(...)  # Start making requests# Only request URLs containing "stackoverflow" or "github" will now be captured

seleniumwire_options.exclude_hosts

排除捕获域名,不需要捕获的可以加入排除选项

使用此选项可以完全绕过Selenium Wire。对此处列出的地址发出的任何请求都将直接从浏览器发送到服务器,而不涉及SeleniumWire。请注意,如果您已经配置了上游代理,那么这些请求也将绕过该代理。

options = {'exclude_hosts': ['host1.com', 'host2.com']  # Bypass Selenium Wire for these hosts
}
driver = webdriver.Chrome(seleniumwire_options=options)

测试代码:

from seleniumwire import webdriver  # Import from seleniumwire# Create a new instance of the Chrome driver
driver = webdriver.Chrome()# Go to the Google home page
driver.get('https://www.google.com')# Access requests via the `requests` attribute
for request in driver.requests:if request.response:print(request.url,request.response.status_code,request.response.headers['Content-Type'],request.response.body)

输出:

https://www.google.com/ 200 text/html; charset=UTF-8
https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_120x44dp.png 200 image/png
https://consent.google.com/status?continue=https://www.google.com&pc=s&timestamp=1531511954&gl=GB 204 text/html; charset=utf-8
https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png 200 image/png
https://ssl.gstatic.com/gb/images/i2_2ec824b0.png 200 image/png
https://www.google.com/gen_204?s=webaft&t=aft&atyp=csi&ei=kgRJW7DBONKTlwTK77wQ&rt=wsrt.366,aft.58,prt.58 204 text/html; charset=UTF-8
...

其他功能可以参考

https://github.com/wkeeling/selenium-wire

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

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

相关文章

我的创作纪念日

机缘 实战项目中的经验分享:多看文档!多看书!团队中有这领域的前辈多去问,但是请带上自己的思考和间接,不要问一些文档中早已写过的内容。日常学习过程中的记录: 关注行业动态:我在日常学习过程…

1063 Set Similarity (PAT甲级)

大半个月没做题&#xff0c;手非常生... #include <cstdio> #include <vector> #include <map>int N, M, K, t, m, n; std::vector<std::map<int, int>> vec;void similarity(int a, int b){int cnt 0;for(auto c : vec[a]){if(vec[b].find(c.…

CSS3 动画 animation 入门学习笔记 之 属性详解

文章目录 简单介绍 CSS 动画CSS 动画的作用CSS 动画语法介绍CSS 动画属性animation-nameanimation-durationanimation-delayanimation-directionanimation-iteration-countanimation-play-stateanimation-timing-functionanimation-fill-modeanimation 简单介绍 CSS 动画 引用…

基于深度学习的高精度80类动物目标检测系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度80类动物目标检测识别系统可用于日常生活中或野外来检测与定位80类动物目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的80类动物目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YO…

Matplotlib是什么

Matplotlib 是一款用于数据可视化的 Python 软件包&#xff0c;支持跨平台运行&#xff0c;它能够根据 NumPy ndarray 数组来绘制 2D 图像&#xff0c;它使用简单、代码清晰易懂&#xff0c;深受广大技术爱好者喜爱。 NumPy 是 Python 科学计算的软件包&#xff0c;ndarray 则…

HTTP1.1 wireshark分析

目录 http1.1wireshark分析http 1.1 keep-alive的2次http请求wireshark分析http1.1 keep-alive过期的2次请求keep-alive报文 本地springboot启动一个简单的服务&#xff0c;然后请求测试 tcpdump -i lo0 -nnvv -w tmp.cap tcpdump 本地回环网卡 http1.1 HTTP/1.0 每进行一次…

蚂蚁集团开源可信隐私计算框架「隐语」:开放、通用

7 月 4 日,蚂蚁集团宣布面向全球开发者正式开源可信隐私计算框架 “隐语”。 隐语是蚂蚁集团历时 6 年自主研发,以安全、开放为核心设计理念打造的可信隐私计算技术框架,涵盖了当前几乎所有主流隐私计算技术。 据介绍,隐语内置 MPC、TEE、同态等多种密态计算虚拟设备,提…

操作系统练习:创建内核模块,并加载和卸载模块

说明 本文记录如何创建和编译一个内核模块&#xff0c;以及加载和卸载内核模块。为《操作系统概念(第九版)》第二章&#xff0c;关于“Linux内核模块”的练习题。 创建内核模块 注&#xff1a;我这里是基于阿里云的轻量应用服务器&#xff08;即当前博客服务器&#xff09; 首…

【Linux】分布式监控 Zabbix

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 Zabbix 介绍zabbix 概述Zabbix 监控原理Zabbix 6.0 新特性Zabbix 6.0 功能组件 Zabbix 6.0 部署Zabbix 添加客户端主机Zabbix 自定义监控内容Zabbix 自动发现与自动…

Python+Requests+Excel接口测试实战

1、EXCEL文件接口保存方式&#xff0c;如图。 2、然后就是读取EXCEL文件中的数据方法&#xff0c;如下&#xff1a; 1 import xlrd2 3 4 class readExcel(object):5 def __init__(self, path):6 self.path path7 8 property9 def getSheet(self): 10 …

android更换开机动画

android11 路径&#xff1a;device / {vendor-name} / {platform-name} / {device-name} / system / bootanimation.zip 例&#xff1a;android \ device \ softwinner \ ceres \ ceres-b6 \ system \ bootanimation.zip android13 路径&#xff1a;device / softwinner / {PRO…

MyBatis全篇

文章目录 MyBatis特性下载持久化层技术对比 搭建MyBatis创建maven工程创建MyBatis的核心配置文件创建mapper接口创建MyBatis的映射文件测试功能加入log4j日志功能加入log4j的配置文件 核心配置文件的完善与详解MyBatis的增删改查测试功能 MyBatis获取参数值在IDEA中设置中配置文…

《TCP/IP网络编程》第3,4章学习记录

基础知识&#xff1a; struct sockaddr_in {sa_family_t sin_family; //地址族&#xff08;Address Family)uint16_t sin_port; //16位TCP/UDP端口号struct in_addr sin_addr; //32位IP地址char sin_zero[8]; //不使用 }sa_family_t包括&#xff1a; (1)AF_INET,IPv4网络协议…

Linux宝塔Mysql读写分离配置,两台服务器,服务器存在多个库

Linux宝塔Mysql读写分离配置&#xff0c;两台服务器&#xff0c;服务器存在多个库 一、主库操作 #登录数据库&#xff0c;用root登录方便&#xff0c;用其他账号会提示权限不足&#xff0c;需要登录root给予权限 mysql -u root -p 密码#创建一个账号&#xff0c;供从库用该账…

大屏项目也不难

项目环境搭建 使用create-vue初始化项目 npm init vuelatest准备utils模块 业务背景&#xff1a;大屏项目属于后台项目的一个子项目&#xff0c;用户的token是共享的 后台项目 - token - cookie 大屏项目要以同样的方式把token获取到&#xff0c;然后拼接到axios的请求头中…

网络编程 socket

目录 网络编程 套接字&#xff08;socket&#xff09;1. 认识端口号2. TCP协议3. UDP协议4. 网络字节序列5. 常见的套接字6. socket编程接口6.1 socket常见APIsocket函数recvfrom函数sendto函数read函数 从tcp socket中读取接收数据 6.2 sockaddr结构6.3 地址转换函数6.4 udp s…

JVM内存结构—— 程序计数器,虚拟机栈 解析

JVM的内存结构 1. 程序计数器(PC Register )寄存器 1.1 全称:Program Counter Register 1.2 作用 首先,java源代码 被 编译成 二进制的 字节码 (jvm指令) jvm跨平台就是这一套指令,linux 下,windows下指令都是一致的 指令 经过 解释器 把每一条指令 解释成 机器码…

[运维] caddy 介绍

Caddy 是一个开源的跨平台服务器软件&#xff0c;旨在提供简单易用的配置和自动化的 HTTPS 功能。以下是关于 Caddy 的一些介绍&#xff1a; 简单易用&#xff1a;Caddy 设计的目标之一是提供简单易用的配置和操作体验。它采用简洁的 Caddyfile 语法&#xff0c;使你能够快速而…

bazel工具入门(一)

bazel工具是Google内部构建工具Blaze的开源实现&#xff0c;属于编译打包工具&#xff0c;和maven、ant等类似。 构建系统时&#xff0c;程序员一般写一个buildfile文件来描述系统&#xff0c;通常buildfile命名为BUILD。 cc_library(name "hdmap_input",srcs [&q…

SpringBoot项目从0到1配置logback日志打印

大家好&#xff01;我是sum墨&#xff0c;一个一线的底层码农&#xff0c;平时喜欢研究和思考一些技术相关的问题并整理成文&#xff0c;限于本人水平&#xff0c;如果文章和代码有表述不当之处&#xff0c;还请不吝赐教。 以下是正文&#xff01; 一、写文背景 我们在写后端…