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

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

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

  • 安装selenium-wire库:
pip install selenium-wire

  • 修改引入方式

  1. # from selenium import webdriver

  2. from seleniumwire import webdriver

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

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

  •  解析返回的响应头
driver.requests返回的是一个列表,遍历每个url来获取想要的url响应信息。一下示例演示如果获取指定url的请求头,获取到的请求头可以直接使用request发送请求。

  1. # 提取接口的请求信息

  2. get_conver_header = {}

  3. get_conver_url = ""

  4. for request in driver.requests:

  5. if "https://coXXX.com/api/" in request.url:

  6. get_conver_url = request.url

  7. for header_key in request.headers:

  8. get_conver_header[header_key] = request.headers[header_key]

  9. break

  • 获取返回响应体
  1. from io import BytesIO

  2. import gzip

  3. # 清空之前获取的请求信息

  4. del driver.requests

  5. # 获取响应体的内容数据

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

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

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

  9. # print输出的字节码是以"b’x1fx8bx08"开头的,说明它是gzip压缩过的数据,所以我们要对字节码进行一个解码操作

  10. buff = BytesIO(rp_body)

  11. f = gzip.GzipFile(fileobj=buff)

  12. htmls = f.read().decode('utf-8')

  13. print(htmls)

 最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

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

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

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...