selenium-wire简介

这篇具有很好参考价值的文章主要介绍了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)  # 中断请求,并返回状态码403
        print(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 found
        print(i.response.headers['Content-Type'])  # 响应的数据类型
        print(i.response.status_code)  # 响应状态码

        # 获取响应的body并转为json类型输出
        from seleniumwire.utils import decode
        body = 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 webdriver

driver = 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 found
        print(i.response.headers['Content-Type'])  # 响应的数据类型
        print(i.response.status_code)  # 响应状态码

        # 获取响应的body并转为json类型输出
        from seleniumwire.utils import decode
        body = 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/

 文章来源地址https://www.toymoban.com/news/detail-477025.html

到了这里,关于selenium-wire简介的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python |Selenium Wire 扩展Selenium的Python绑定,使您能够检查浏览器发出的请求。

       前面介绍了Seleniums的入门应用,现在为大家介绍它的一个插件Selenium Wire。现如今部分网站都设置了反爬机制,常见的就是在接口请求头中有js代码生成的请求参数,那么一般通过js破解参数难度较大,于是就可以借助Selenium Wire来获取解析后的参数,可以实现这样一个功能

    2024年02月11日
    浏览(47)
  • selenium自动化面试题回答

    1.  你们自动化测试,用的什么语言?什么工具?什么框架? 参考答案 一 : 我们做的是 Web UI 自动化,使用 selenium 自动化工具结合 unittest 框架来实现自动化测试,采用 python 脚本语言编写。 参考答案 二 : 我们是用 selenium 工具来实现自动化,采用 python 脚本语言,unittest

    2024年02月07日
    浏览(47)
  • springboot 过滤器链 来自 chatgpt

    当需要在Spring Boot中配置多个过滤器时,可以按照以下步骤进行操作: 创建多个自定义过滤器类:首先,你需要创建多个实现 javax.servlet.Filter 接口的自定义过滤器类,每个过滤器类都需要实现 doFilter 方法来定义过滤器的逻辑处理。 配置过滤器链:在Spring Boot应用程序的配置

    2024年02月12日
    浏览(41)
  • ChatGPT的回答是否总是准确的?

    ChatGPT的回答并不总是准确的,因为它是基于大规模预训练语言模型的生成式模型,其回答是基于对输入文本的理解和对大量训练数据的统计模式学习得出的。以下是详细分析: 1. 语言模型的不确定性:ChatGPT是基于统计模式学习的语言模型,其回答受到输入文本的影响,但并

    2024年02月10日
    浏览(34)
  • chatGPT回答字数限制解除-怎么突破chatGPT长度的限制

    ChatGPT 是一种基于机器学习的自然语言处理技术,可以自动生成文本,包括段落、文章、新闻、电子邮件、推文等。以下是使用 ChatGPT 进行写作的基本过程: 确定写作内容和细节:首先需要 确定要生成的文本内容和相关信息,包括主题、目的、等。 收集参考材料和数

    2024年02月04日
    浏览(49)
  • ChatGPT的回答是否有时效性?

    ChatGPT的回答在某种程度上具有时效性,但也存在一些限制。下面是对ChatGPT回答时效性的详细分析。 1. 基于静态知识:ChatGPT模型是通过对大规模文本数据进行预训练来获取知识。因此,它的回答主要基于其在训练时所接触到的静态知识库,而不会实时更新。这意味着,如果问

    2024年02月09日
    浏览(40)
  • Prompt 技巧指南-让 ChatGPT 回答更准确

    随着 ChatGPT 等大型语言模型 (LLM)的兴起,人们慢慢发现,怎么样向 LLM 提问、以什么技巧提问,是获得更加准确的回答的关键,也由此产生了提示工程这个全新的领域。 提示工程(prompt engineering)是一门相对较新的领域,用于开发和优化提示以有效地将语言模型 (LM) 用于各种应

    2024年02月16日
    浏览(40)
  • ChatGPT能够生成有创造性的回答吗?

    ChatGPT在某种程度上可以生成有创造性的回答,但需要注意其创造性的程度和质量。作为一种基于大规模训练数据和预训练模型的语言生成模型,ChatGPT具有一定的生成能力和创造性,但其生成结果仍受限于数据和模型的训练范围。下面是对ChatGPT生成创造性回答的分析。 1. 基于

    2024年02月09日
    浏览(63)
  • SmartGPT 横空出世,提升 ChatGPT 回答准确率

    化整为零,逐步解决 和其他工具相比,SmartGPT好在哪 克雷西 发自 凹非寺 这个GitHub新项目,能让ChatGPT完成复杂任务,GPT3.5和GPT-4都支持。 它通过将问题拆解,并调用外部资源,提高了GPT的工作能力。 在它的调教下,GPT-4回答的准确率从68%提高到了85%。 这个项目名叫SmartGPT,

    2024年02月07日
    浏览(40)
  • ChatGPT有用到知识图谱吗?它自己是这样回答...

    从搜索引擎到个人助手,我们每天都在使用问答系统。问答系统必须能够访问相关的知识并进行推理。通常,知识可以隐式地编码在大型语言模型(LLMs)中,例如ChatGPT、T5 和LaMDA 等大型语言模型,这些模型在未结构化文本上进行预训练,或者显式地表示在知识图谱(KGs)中

    2023年04月20日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包