diff --git a/requests_html.py b/requests_html.py index b963445..7c5db74 100644 --- a/requests_html.py +++ b/requests_html.py @@ -661,6 +661,17 @@ class HTMLSession(requests.Session): return HTMLResponse._from_response(r, self) + @property + def browser(self): + if not hasattr(self, "_browser"): + self.loop = asyncio.get_event_loop() + + async def get_browser(): + return await pyppeteer.launch(headless=True, args=['--no-sandbox']) + + self._browser = self.loop.run_until_complete(get_browser()) + return self._browser + class AsyncHTMLSession(requests.Session): """ An async consumable session. """ diff --git a/tests/test_requests_html.py b/tests/test_requests_html.py index a2cd4e9..9a3291b 100644 --- a/tests/test_requests_html.py +++ b/tests/test_requests_html.py @@ -2,6 +2,7 @@ import os from functools import partial import pytest +from pyppeteer.browser import Browser from requests_html import HTMLSession, AsyncHTMLSession, HTML from requests_file import FileAdapter @@ -224,5 +225,11 @@ def test_bare_js_eval(): assert html.find('#replace', first=True).text == 'yolo' +@pytest.mark.ok +def test_browser_session(): + assert isinstance(session.browser, Browser) + assert hasattr(session, "loop") == True + + if __name__ == '__main__': test_containing()