python-3.x - 将 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 社区来说是一个有用的问题。
解决方案
我在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
推荐阅读
- inno-setup - 我什么时候真的需要在 Inno Setup 中使用 ScaleX 和 ScaleY 函数?
- javascript - 如何构建一个搜索字符串出现的函数?
- javascript - 单击提交js条件需要多个复选框
- c++ - 如何打印对象中的所有变量,以及如何打印一组选定的变量?
- html - 如何制作一个看起来像这样的响应式标题?*见提供的图片*
- c# - 在 C# 中比较 DateTime 的二进制表示
- python-3.x - cmd中创建虚拟环境目录失败
- xslt - 同名的 XSL 属性
- java - Z3求解器中决定优化精度的重要决策因素是什么?
- javascript - 单击两次按钮时如何切换文本颜色?