首页 > 解决方案 > 将 RoboBrowser 与 Requests-HTML 相结合

问题描述

我喜欢使用 RoboBrowser 轻松填写和提交在线表单,并且我想我知道如何访问 RoboBrowser 底层的 requests.Session() 实例,如果我需要使用它的话。

但我想使用 RoboBrowser 提交一个表单,然后将会话传递给 requests_html.Session() 以便我可以使用 JavaScript 呈现 HTML。我怎么做?有没有办法将 Requests 会话转换为 Requests-HTML 会话?

我查看了 Requests、Requests-HTML 和 RoboBrowser 的文档,以及所有关于 Requests-HTML 的 SO 问题。我也用谷歌搜索了答案。这些来源都没有帮助。

我知道为此目的使用 Selenium 可能更容易,但这是针对工作中的项目,我无法安装 Selenium。我相信我关于如何将 Requests 会话转换或传递到 Requests-HTML 会话的更广泛的问题对 Python 社区来说是一个有用的问题。

标签: python-3.xpython-requestsrobobrowserpython-requests-html

解决方案


我在Requests-HTML 源代码中找到了答案。为此目的调用HTMLResponse._from_response()了一个特定的类方法,它将响应作为其第一个参数,将会话作为其第二个参数。

假设我们有一个robobrowser.RoboBrowser()名为 的对象browser。然后底层requests.Response()对象可以通过browser.response. 要将其传递给requests_html.HTMLSession()被调用的session,请执行以下操作:

import requests_html

html_response = requests_html.HTMLResponse._from_response(browser.response, session)

html_response.html.render()  # This now works

推荐阅读