RoboBrowser 可以打开 html 字符串吗?
Can RoboBrowser open a html string?
我想在包含某些形式的 HTML 字符串上受益于 RoboBrowser
的强大功能。
通常Robobrowser
是这样使用的:
url = "whatever.com"
browser = RoboBrowser(history=True)
browser.open(url)
thatForm = browser.get_form("thatForm")
thatForm["thisField"].value = "some value"
browser.submit(thatForm)
我想使用字符串的 html 内容来做同样的事情,我期待像下面这样的东西工作:
content = "<html>...</html>"
browser = RoboBrowser(history=True)
browser.open(content)
但是,这不会,因为 open
方法期望字符串是 url 而不是 html 内容,有没有什么可以做的,有什么解决方法吗我可以在某处传递 html 内容字符串并 RoboBrowser
解析它吗?
好吧,我找到了一个解决方案,虽然不是很优雅,但它确实有效,基本上它都围绕 _update_state
函数展开,该函数实际上在 Robobrowser 打开 URL 时在某个时候在内部调用:
def open(self, url, method='get', **kwargs):
"""Open a URL.
:param str url: URL to open
:param str method: Optional method; defaults to `'get'`
:param kwargs: Keyword arguments to `Session::request`
"""
response = self.session.request(method, url, **self._build_send_args(**kwargs))
self._update_state(response)
因此,解决方案是简单地创建一个包含我们要解析的 html 的假响应:
fake_response = requests.Response()
fake_response._content = the_html_we_want_Robobrowser_to_parse
browser = RoboBrowser()
browser._update_state(fake_response)
my_form = browser.get_form("myform")
browser.submit_form(my_form)
瞧瞧:)
我想在包含某些形式的 HTML 字符串上受益于 RoboBrowser
的强大功能。
通常Robobrowser
是这样使用的:
url = "whatever.com"
browser = RoboBrowser(history=True)
browser.open(url)
thatForm = browser.get_form("thatForm")
thatForm["thisField"].value = "some value"
browser.submit(thatForm)
我想使用字符串的 html 内容来做同样的事情,我期待像下面这样的东西工作:
content = "<html>...</html>"
browser = RoboBrowser(history=True)
browser.open(content)
但是,这不会,因为 open
方法期望字符串是 url 而不是 html 内容,有没有什么可以做的,有什么解决方法吗我可以在某处传递 html 内容字符串并 RoboBrowser
解析它吗?
好吧,我找到了一个解决方案,虽然不是很优雅,但它确实有效,基本上它都围绕 _update_state
函数展开,该函数实际上在 Robobrowser 打开 URL 时在某个时候在内部调用:
def open(self, url, method='get', **kwargs):
"""Open a URL.
:param str url: URL to open
:param str method: Optional method; defaults to `'get'`
:param kwargs: Keyword arguments to `Session::request`
"""
response = self.session.request(method, url, **self._build_send_args(**kwargs))
self._update_state(response)
因此,解决方案是简单地创建一个包含我们要解析的 html 的假响应:
fake_response = requests.Response()
fake_response._content = the_html_we_want_Robobrowser_to_parse
browser = RoboBrowser()
browser._update_state(fake_response)
my_form = browser.get_form("myform")
browser.submit_form(my_form)
瞧瞧:)