4.1.0.0b15 quit()增加del_data参数

This commit is contained in:
g1879 2024-07-29 16:21:30 +08:00
parent 0d6a8b67f2
commit 9736f16e8e
7 changed files with 44 additions and 34 deletions

View File

@ -14,4 +14,4 @@ from ._pages.chromium_page import ChromiumPage
from ._pages.mix_page import MixPage from ._pages.mix_page import MixPage
from ._pages.mix_page import MixPage as WebPage from ._pages.mix_page import MixPage as WebPage
__version__ = '4.1.0.0b14' __version__ = '4.1.0.0b15'

View File

@ -87,6 +87,7 @@ class Chromium(object):
connect_browser(self._chromium_options) connect_browser(self._chromium_options)
s = Session() s = Session()
s.trust_env = False s.trust_env = False
s.keep_alive = False
ws = s.get(f'http://{self._chromium_options.address}/json/version', headers={'Connection': 'close'}) ws = s.get(f'http://{self._chromium_options.address}/json/version', headers={'Connection': 'close'})
self.id = ws.json()['webSocketDebuggerUrl'].split('/')[-1] self.id = ws.json()['webSocketDebuggerUrl'].split('/')[-1]
self._driver = BrowserDriver(self.id, 'browser', self.address, self) self._driver = BrowserDriver(self.id, 'browser', self.address, self)
@ -400,10 +401,11 @@ class Chromium(object):
self._driver.set_callback('Target.targetDestroyed', self._onTargetDestroyed) self._driver.set_callback('Target.targetDestroyed', self._onTargetDestroyed)
self._driver.set_callback('Target.targetCreated', self._onTargetCreated) self._driver.set_callback('Target.targetCreated', self._onTargetCreated)
def quit(self, timeout=5, force=False): def quit(self, timeout=5, force=False, del_data=False):
"""关闭浏览器 """关闭浏览器
:param timeout: 等待浏览器关闭超时时间 :param timeout: 等待浏览器关闭超时时间
:param force: 是否立刻强制终止进程 :param force: 是否立刻强制终止进程
:param del_data: 是否删除用户文件夹
:return: None :return: None
""" """
try: try:
@ -417,14 +419,14 @@ class Chromium(object):
for driver in tab: for driver in tab:
driver.stop() driver.stop()
if not force: if force:
return pids = None
try: try:
pids = [pid['id'] for pid in self._run_cdp('SystemInfo.getProcessInfo')['processInfo']] pids = [pid['id'] for pid in self._run_cdp('SystemInfo.getProcessInfo')['processInfo']]
except: except:
return pass
if pids:
from psutil import Process from psutil import Process
for pid in pids: for pid in pids:
try: try:
@ -451,6 +453,10 @@ class Chromium(object):
if ok: if ok:
break break
if del_data and not self._chromium_options.is_auto_port and self._chromium_options.user_data_path:
path = Path(self._chromium_options.user_data_path)
rmtree(path, True)
def _get_driver(self, tab_id, owner=None): def _get_driver(self, tab_id, owner=None):
"""新建并返回指定tab id的Driver """新建并返回指定tab id的Driver
:param tab_id: 标签页id :param tab_id: 标签页id
@ -555,6 +561,7 @@ def run_browser(chromium_options):
try: try:
s = Session() s = Session()
s.trust_env = False s.trust_env = False
s.keep_alive = False
ws = s.get(f'http://{chromium_options.address}/json/version', headers={'Connection': 'close'}) ws = s.get(f'http://{chromium_options.address}/json/version', headers={'Connection': 'close'})
if not ws: if not ws:
raise BrowserConnectError('\n浏览器连接失败,请确认浏览器是否启动。') raise BrowserConnectError('\n浏览器连接失败,请确认浏览器是否启动。')

View File

@ -162,6 +162,6 @@ class Chromium(object):
def _onTargetDestroyed(self, **kwargs) -> None: ... def _onTargetDestroyed(self, **kwargs) -> None: ...
def quit(self, timeout: float = 5, force: bool = False) -> None: ... def quit(self, timeout: float = 5, force: bool = False, del_data: bool = False) -> None: ...
def _on_disconnect(self) -> None: ... def _on_disconnect(self) -> None: ...

View File

@ -285,6 +285,7 @@ class BrowserDriver(Driver):
super().__init__(tab_id, tab_type, address, owner) super().__init__(tab_id, tab_type, address, owner)
self._control_session = Session() self._control_session = Session()
self._control_session.trust_env = False self._control_session.trust_env = False
self._control_session.keep_alive = False
def __repr__(self): def __repr__(self):
return f'<BrowserDriver {self.id}>' return f'<BrowserDriver {self.id}>'

View File

@ -194,6 +194,7 @@ def test_connect(ip, port, timeout=30):
end_time = perf_counter() + timeout end_time = perf_counter() + timeout
s = Session() s = Session()
s.trust_env = False s.trust_env = False
s.keep_alive = False
while perf_counter() < end_time: while perf_counter() < end_time:
try: try:
r = s.get(f'http://{ip}:{port}/json', timeout=10, headers={'Connection': 'close'}) r = s.get(f'http://{ip}:{port}/json', timeout=10, headers={'Connection': 'close'})

View File

@ -172,13 +172,14 @@ class ChromiumPage(ChromiumBase):
""" """
self.browser.close_tabs(tabs_or_ids=tabs_or_ids or self.tab_id, others=others) self.browser.close_tabs(tabs_or_ids=tabs_or_ids or self.tab_id, others=others)
def quit(self, timeout=5, force=True): def quit(self, timeout=5, force=True, del_data=False):
"""关闭浏览器 """关闭浏览器
:param timeout: 等待浏览器关闭超时时间 :param timeout: 等待浏览器关闭超时时间
:param force: 关闭超时是否强制终止进程 :param force: 关闭超时是否强制终止进程
:param del_data: 是否删除用户文件夹
:return: None :return: None
""" """
self.browser.quit(timeout, force) self.browser.quit(timeout, force, del_data=del_data)
def _on_disconnect(self): def _on_disconnect(self):
"""浏览器退出时执行""" """浏览器退出时执行"""

View File

@ -111,6 +111,6 @@ class ChromiumPage(ChromiumBase):
def close_tabs(self, tabs_or_ids: Union[str, ChromiumTab, List[Union[str, ChromiumTab]], def close_tabs(self, tabs_or_ids: Union[str, ChromiumTab, List[Union[str, ChromiumTab]],
Tuple[Union[str, ChromiumTab]]] = None, others: bool = False) -> None: ... Tuple[Union[str, ChromiumTab]]] = None, others: bool = False) -> None: ...
def quit(self, timeout: float = 5, force: bool = True) -> None: ... def quit(self, timeout: float = 5, force: bool = True, del_data: bool = False) -> None: ...
def _on_disconnect(self) -> None: ... def _on_disconnect(self) -> None: ...