Selenium-wire 响应对象 - 以字符串而不是字节形式获取响应正文的方法

问题描述 投票:0回答:5

我想以 selenium-wire 中的字符串形式获取响应主体,我最终会将其解析为 JSON。

selenium-wire 中的

response.body
给出字节字符串。我尝试将其解码为
response.body.decode('utf-8')
但这会导致解码错误。

有人可以帮我吗? 我对两个解决方案都满意:

  1. 将字节字符串解码为普通字符串的方法
  2. 首先将响应正文作为普通字符串获取的方法
selenium utf-8 response httpresponse seleniumwire
5个回答
9
投票

默认情况下,selenium-wire 以字节形式返回正文响应。

文档说:

“响应正文为字节。如果响应没有正文,则正文的值为空,即 b''。有时正文可能已被服务器编码 - 例如压缩。您可以使用disable_encoding选项来防止这种情况。要手动解码编码的响应正文,您可以执行以下操作:

from seleniumwire.utils import decode

body = decode(response.body, response.headers.get('Content-Encoding', 'identity'))

它对我有用。


4
投票

把这个:

decode(request.response.body, request.response.headers.get('Content-Encoding', 'identity'))

在发表声明之前:

response.body.decode('utf-8')

完整代码:

from seleniumwire import webdriver
from seleniumwire.utils import decode as sw_decode

browser = webdriver.Chrome()

browser.get(url)

for request in browser.requests:
    if request.url == url:
        data = sw_decode(request.response.body, request.response.headers.get('Content-Encoding', 'identity'))
        data = data.decode("utf8")
        print(type(data))
        break

browser.quit()

输出:

<class 'str'>


1
投票

我想分享我的解决方案,这对我有用。

在 python >= 3.5.x 中

from seleniumwire import webdriver
import chromedriver_autoinstaller
import brotli

chromedriver_autoinstaller.install()
driver = webdriver.Chrome()

driver.get('https://www.facebook.com')

for request in driver.requests:
    if request.url == "https://www.facebook.com/":
        resp = request.response.body
        resp = brotli.decompress(resp)
        print(resp[0:200].decode("utf-8"))

driver.quit()

0
投票

我找到了一种方法来做到这一点(不是理想的方法) 在制作 selenium webdriver 对象时,您可以传递一个参数

options
,您可以在其中明确告诉它提供解码后的请求和响应对象,而不是作为字节。


-1
投票

这些都不需要。

在获得的变量末尾添加翻译即可完成。

我的代码例如:

requestBody = ''
for request in driver.requests:
    if request.response:
        if request.url == 'https://api.ex.com/v1':
            requestBody = request.body.decode("utf-8")

我的解决方案:

request.body.decode("utf-8")

© www.soinside.com 2019 - 2024. All rights reserved.