Объединение 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
Другие вопросы по тегам