Объединение RoboBrowser с запросами-HTML - PullRequest
0 голосов
/ 16 января 2019

Мне нравится простота заполнения и отправки онлайн-форм с использованием 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 Ответ

0 голосов
/ 21 января 2019

Я нашел ответ в исходном коде 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
...