Selenium-wire如何获取POST请求的响应文本而非请求负载
Selenium-wire如何获取POST请求的响应文本而非请求负载
我懂你现在的痛点——你写的代码现在拿到的是POST请求发出去的请求负载,但你真正想解析的是服务器给的响应内容对吧?其实Selenium-wire里的每个请求对象本身就带着响应信息,你只需要调整一下获取的对象就行。
你原来的代码里用了driver.last_request.body,这确实是在拿请求发送出去的内容。要获取响应的话,你需要访问请求对象的response属性,然后取它的body字段。这里给你调整后的代码示例:
import json for request in driver.requests: # 先过滤出目标POST请求 if request.method == 'POST' and request.headers.get('Content-Type') == 'application/json': # 一定要先判断是否有响应返回,避免请求失败时报错 if request.response: # 把响应的字节内容解码成字符串(utf-8是常见编码,若不行可以试试其他比如gbk) response_body = request.response.body.decode('utf-8') # 解析成JSON格式 response_data = json.loads(response_body) # 这里就可以处理你的响应数据了,比如打印或者提取字段 print("响应内容:", response_data)
这里有几个小细节要注意:
- 用
request.headers.get('Content-Type')比直接取request.headers['Content-Type']更安全,避免某些请求没有这个头时抛出KeyError - 必须判断
request.response是否存在,因为有些请求可能因为网络问题、服务器错误等没有返回响应,直接访问的话会报错 - 如果解码utf-8失败,可以看看响应头里的
Content-Type有没有指定编码(比如charset=utf-8),或者尝试其他常见编码
备注:内容来源于stack exchange,提问作者JayRSP
相关产品推荐
相关产品推荐

