Selenium-wire-response对象-将响应体获取为字符串而非字节的方法



我想在selenium wire中获取一个响应体作为字符串,最终将其解析为JSON。

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

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

  1. 将字节字符串解码为普通字符串的方法
  2. 一种首先将响应体作为普通字符串的方法

默认情况下,selenium wire以字节形式返回主体响应。

文件上写着:

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

from seleniumwire.utils import decode
body = decode(response.body, response.headers.get('Content-Encoding', 'identity'))

它对我有效。

放这个:

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'>

我想分享我的解决方案,它对我来说很有用。

在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()

我找到了一种方法(不是理想的方法(在生成selenium-webdriver对象时,您可以传递一个参数options,在该参数中,您可以明确地告诉它给出解码的请求和响应对象,而不是字节。

这些都不需要。

在得到的变量末尾添加一个翻译,就完成了。

我的代码ex:

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"(

相关内容

  • 没有找到相关文章