mirror of
https://github.com/kennethreitz/requests-html.git
synced 2026-06-05 14:50:20 +00:00
Extend session close method to shutdown browser
This commit is contained in:
+7
-5
@@ -665,13 +665,15 @@ class HTMLSession(requests.Session):
|
||||
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())
|
||||
self._browser = self.loop.run_until_complete(pyppeteer.launch(headless=True, args=['--no-sandbox']))
|
||||
return self._browser
|
||||
|
||||
def close(self):
|
||||
""" If a browser was created close it first. """
|
||||
if hasattr(self, "_browser"):
|
||||
self.loop.run_until_complete(self._browser.close())
|
||||
super().close()
|
||||
|
||||
|
||||
class AsyncHTMLSession(requests.Session):
|
||||
""" An async consumable session. """
|
||||
|
||||
@@ -2,6 +2,7 @@ import os
|
||||
from functools import partial
|
||||
|
||||
import pytest
|
||||
import psutil
|
||||
from pyppeteer.browser import Browser
|
||||
from requests_html import HTMLSession, AsyncHTMLSession, HTML
|
||||
from requests_file import FileAdapter
|
||||
@@ -29,6 +30,14 @@ def async_get(event_loop):
|
||||
return partial(async_session.get, url)
|
||||
|
||||
|
||||
def count_chromium_process():
|
||||
process = 0
|
||||
for proc in psutil.process_iter(attrs=['name']):
|
||||
if proc.info["name"] == "Chromium":
|
||||
process += 1
|
||||
return process
|
||||
|
||||
|
||||
@pytest.mark.ok
|
||||
def test_file_get():
|
||||
r = get()
|
||||
@@ -227,8 +236,15 @@ def test_bare_js_eval():
|
||||
|
||||
@pytest.mark.ok
|
||||
def test_browser_session():
|
||||
""" Test browser instaces is created and properly close when session is closed.
|
||||
Note: session.close method need to be tested together with browser creation,
|
||||
since no doing that will left the browser running. """
|
||||
session = HTMLSession()
|
||||
assert isinstance(session.browser, Browser)
|
||||
assert hasattr(session, "loop") == True
|
||||
assert count_chromium_process() == 2
|
||||
session.close()
|
||||
assert count_chromium_process() == 0
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
Reference in New Issue
Block a user