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

目录

安装

bash 复制代码
pip install selenium-wire

创建webdriver

python 复制代码
from seleniumwire import webdriver

注意不是从selenium包中导入。

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

python 复制代码
# 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:

python 复制代码
# 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。

python 复制代码
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。请注意,如果您已经配置了上游代理,那么这些请求也将绕过该代理。

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

测试代码:

python 复制代码
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
        )

输出:

bash 复制代码
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

相关推荐
上海_彭彭28 分钟前
【提效工具开发】Python功能模块执行和 SQL 执行 需求整理
开发语言·python·sql·测试工具·element
测试19982 小时前
2024软件测试面试热点问题
自动化测试·软件测试·python·测试工具·面试·职场和发展·压力测试
代码欢乐豆3 小时前
数据采集之selenium模拟登录
python·selenium·测试工具
测试杂货铺6 小时前
外包干了2年,快要废了。。
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展
小码哥说测试8 小时前
接口测试用例设计的关键步骤与技巧解析!
自动化测试·测试工具·jmeter·职场和发展·测试用例·接口测试·postman
小白学大数据14 小时前
正则表达式在Kotlin中的应用:提取图片链接
开发语言·python·selenium·正则表达式·kotlin
awonw1 天前
[java][框架]springMVC(1/2)
测试工具·postman
迃幵chen1 天前
wireshark-网络分析工具
网络·测试工具·wireshark
孤蓬&听雨1 天前
RabbitMQ自动发送消息工具(自动化测试RabbitMQ)
分布式·测试工具·自动化·rabbitmq·自动发送消息
土小帽软件测试1 天前
jmeter基础01-2_环境准备-Mac系统安装jdk
java·测试工具·jmeter·macos·软件测试学习