selenium 获取请求响应信息,包括请求的响应头和响应体

在我们使用selenium请求网页时,有时不想从浏览器解析后的html标签获取数据,如果能直接获取url返回的json格式数据会更容易解析。就像request和scrapy爬虫返回的响应数据一样。那么,我们用selenium应该怎么做呢?

selenium并不支持获取响应的数据,我们可以使用selenium-wire库,selenium-wire扩展了 Selenium 的 Python 绑定,可以访问浏览器发出的底层请求。 编写的代码与 Selenium 的方式相同。

  • 安装selenium-wire库:

    pip install selenium-wire

  • 修改引入方式

    from selenium import webdriver

    from seleniumwire import webdriver

  • 获取网络响应的内容,也就是如图部分的url响应:

    driver.requests

  • 解析返回的响应头
复制代码
driver.requests返回的是一个列表,遍历每个url来获取想要的url响应信息。一下示例演示如果获取指定url的请求头,获取到的请求头可以直接使用request发送请求。
复制代码
# 提取接口的请求信息
get_conver_header = {}
get_conver_url = ""
for request in driver.requests:
    if "https://coXXX.com/api/" in request.url:
        get_conver_url = request.url
        for header_key in request.headers:
            get_conver_header[header_key] = request.headers[header_key]
        break
  • 获取返回响应体

    from io import BytesIO
    import gzip

    清空之前获取的请求信息

    del driver.requests

    获取响应体的内容数据

    rp_body = driver.requests[0].response.body

    获取到的编码为byte数据,需要解码为utf-8,直接解码会报错

    UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte

    print输出的字节码是以"b'\x1f\x8b\x08"开头的,说明它是gzip压缩过的数据,所以我们要对字节码进行一个解码操作

    buff = BytesIO(rp_body)
    f = gzip.GzipFile(fileobj=buff)
    htmls = f.read().decode('utf-8')
    print(htmls)

相关推荐
ZH15455891315 小时前
Flutter for OpenHarmony Python学习助手实战:数据库操作与管理的实现
python·学习·flutter
belldeep5 小时前
python:用 Flask 3 , mistune 2 和 mermaid.min.js 10.9 来实现 Markdown 中 mermaid 图表的渲染
javascript·python·flask
喵手5 小时前
Python爬虫实战:电商价格监控系统 - 从定时任务到历史趋势分析的完整实战(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·电商价格监控系统·从定时任务到历史趋势分析·采集结果sqlite存储
喵手5 小时前
Python爬虫实战:京东/淘宝搜索多页爬虫实战 - 从反爬对抗到数据入库的完整工程化方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·京东淘宝页面数据采集·反爬对抗到数据入库·采集结果csv导出
网络安全-杰克5 小时前
Jmeter压力测试工具安装与使用
自动化测试·软件测试·测试工具·jmeter·职场和发展
B站_计算机毕业设计之家6 小时前
猫眼电影数据可视化与智能分析平台 | Python Flask框架 Echarts 推荐算法 爬虫 大数据 毕业设计源码
python·机器学习·信息可视化·flask·毕业设计·echarts·推荐算法
PPPPPaPeR.6 小时前
光学算法实战:深度解析镜片厚度对前后表面折射/反射的影响(纯Python实现)
开发语言·python·数码相机·算法
JaydenAI6 小时前
[拆解LangChain执行引擎] ManagedValue——一种特殊的只读虚拟通道
python·langchain
骇城迷影6 小时前
Makemore 核心面试题大汇总
人工智能·pytorch·python·深度学习·线性回归
Wpa.wk6 小时前
接口自动化 - 接口鉴权处理常用方法
java·运维·测试工具·自动化·接口自动化