我想从包含一些表单的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解析它吗?
发布于 2019-08-29 22:21:45
好的,我找到了一个解决方案,不是超级优雅,但它可以工作,基本上它都围绕着_update_state函数,在打开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)和瞧:)
https://stackoverflow.com/questions/57617859
复制相似问题