Объединение RoboBrowser с запросами-HTML
Мне нравится простота заполнения и отправки онлайн-форм с использованием RoboBrowser, и я думаю, что понимаю, как получить доступ к экземпляру request.Session(), лежащему в основе RoboBrowser, если мне нужно это использовать.
Но я хочу отправить форму с использованием RoboBrowser, а затем передать сеанс в request_html.Session(), чтобы я мог отобразить HTML-код с помощью JavaScript. Как я могу это сделать? Есть ли способ преобразовать сеанс запросов в сеанс HTML запросов?
Я просмотрел документацию для Requests, Requests-HTML и RoboBrowser, а также все вопросы SO о Requests-HTML. Я также гуглил за ответ. Ни один из этих источников не помог.
Я знаю, что для этой цели было бы проще использовать Selenium, но это для работающего проекта, где я не могу установить Selenium. Я считаю, что мой более широкий вопрос о том, как преобразовать или передать сеанс Requests в сеанс Requests-HTML, является полезным для сообщества Python.
1 ответ
Я нашел ответ в исходном коде 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