Extend session close method to shutdown browser

This commit is contained in:
Ordanis Sanchez
2018-03-20 19:17:42 -04:00
parent 9a8748a832
commit 9a53202ce5
2 changed files with 23 additions and 5 deletions
+7 -5
View File
@@ -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. """
+16
View File
@@ -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__':