mirror of
https://gitee.com/g1879/DrissionPage.git
synced 2024-12-10 04:00:23 +08:00
4.1.0.0b15 quit()增加del_data参数
This commit is contained in:
parent
0d6a8b67f2
commit
9736f16e8e
@ -14,4 +14,4 @@ from ._pages.chromium_page import ChromiumPage
|
||||
from ._pages.mix_page import MixPage
|
||||
from ._pages.mix_page import MixPage as WebPage
|
||||
|
||||
__version__ = '4.1.0.0b14'
|
||||
__version__ = '4.1.0.0b15'
|
||||
|
@ -87,6 +87,7 @@ class Chromium(object):
|
||||
connect_browser(self._chromium_options)
|
||||
s = Session()
|
||||
s.trust_env = False
|
||||
s.keep_alive = False
|
||||
ws = s.get(f'http://{self._chromium_options.address}/json/version', headers={'Connection': 'close'})
|
||||
self.id = ws.json()['webSocketDebuggerUrl'].split('/')[-1]
|
||||
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.targetCreated', self._onTargetCreated)
|
||||
|
||||
def quit(self, timeout=5, force=False):
|
||||
def quit(self, timeout=5, force=False, del_data=False):
|
||||
"""关闭浏览器
|
||||
:param timeout: 等待浏览器关闭超时时间(秒)
|
||||
:param force: 是否立刻强制终止进程
|
||||
:param del_data: 是否删除用户文件夹
|
||||
:return: None
|
||||
"""
|
||||
try:
|
||||
@ -417,39 +419,43 @@ class Chromium(object):
|
||||
for driver in tab:
|
||||
driver.stop()
|
||||
|
||||
if not force:
|
||||
return
|
||||
|
||||
try:
|
||||
pids = [pid['id'] for pid in self._run_cdp('SystemInfo.getProcessInfo')['processInfo']]
|
||||
except:
|
||||
return
|
||||
|
||||
from psutil import Process
|
||||
for pid in pids:
|
||||
if force:
|
||||
pids = None
|
||||
try:
|
||||
Process(pid).kill()
|
||||
pids = [pid['id'] for pid in self._run_cdp('SystemInfo.getProcessInfo')['processInfo']]
|
||||
except:
|
||||
pass
|
||||
|
||||
from os import popen
|
||||
from platform import system
|
||||
end_time = perf_counter() + timeout
|
||||
while perf_counter() < end_time:
|
||||
ok = True
|
||||
for pid in pids:
|
||||
txt = f'tasklist | findstr {pid}' if system().lower() == 'windows' else f'ps -ef | grep {pid}'
|
||||
p = popen(txt)
|
||||
sleep(.05)
|
||||
try:
|
||||
if f' {pid} ' in p.read():
|
||||
ok = False
|
||||
break
|
||||
except TypeError:
|
||||
pass
|
||||
if pids:
|
||||
from psutil import Process
|
||||
for pid in pids:
|
||||
try:
|
||||
Process(pid).kill()
|
||||
except:
|
||||
pass
|
||||
|
||||
if ok:
|
||||
break
|
||||
from os import popen
|
||||
from platform import system
|
||||
end_time = perf_counter() + timeout
|
||||
while perf_counter() < end_time:
|
||||
ok = True
|
||||
for pid in pids:
|
||||
txt = f'tasklist | findstr {pid}' if system().lower() == 'windows' else f'ps -ef | grep {pid}'
|
||||
p = popen(txt)
|
||||
sleep(.05)
|
||||
try:
|
||||
if f' {pid} ' in p.read():
|
||||
ok = False
|
||||
break
|
||||
except TypeError:
|
||||
pass
|
||||
|
||||
if ok:
|
||||
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):
|
||||
"""新建并返回指定tab id的Driver
|
||||
@ -555,6 +561,7 @@ def run_browser(chromium_options):
|
||||
try:
|
||||
s = Session()
|
||||
s.trust_env = False
|
||||
s.keep_alive = False
|
||||
ws = s.get(f'http://{chromium_options.address}/json/version', headers={'Connection': 'close'})
|
||||
if not ws:
|
||||
raise BrowserConnectError('\n浏览器连接失败,请确认浏览器是否启动。')
|
||||
|
@ -162,6 +162,6 @@ class Chromium(object):
|
||||
|
||||
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: ...
|
||||
|
@ -285,6 +285,7 @@ class BrowserDriver(Driver):
|
||||
super().__init__(tab_id, tab_type, address, owner)
|
||||
self._control_session = Session()
|
||||
self._control_session.trust_env = False
|
||||
self._control_session.keep_alive = False
|
||||
|
||||
def __repr__(self):
|
||||
return f'<BrowserDriver {self.id}>'
|
||||
|
@ -194,6 +194,7 @@ def test_connect(ip, port, timeout=30):
|
||||
end_time = perf_counter() + timeout
|
||||
s = Session()
|
||||
s.trust_env = False
|
||||
s.keep_alive = False
|
||||
while perf_counter() < end_time:
|
||||
try:
|
||||
r = s.get(f'http://{ip}:{port}/json', timeout=10, headers={'Connection': 'close'})
|
||||
|
@ -172,13 +172,14 @@ class ChromiumPage(ChromiumBase):
|
||||
"""
|
||||
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 force: 关闭超时是否强制终止进程
|
||||
:param del_data: 是否删除用户文件夹
|
||||
:return: None
|
||||
"""
|
||||
self.browser.quit(timeout, force)
|
||||
self.browser.quit(timeout, force, del_data=del_data)
|
||||
|
||||
def _on_disconnect(self):
|
||||
"""浏览器退出时执行"""
|
||||
|
@ -111,6 +111,6 @@ class ChromiumPage(ChromiumBase):
|
||||
def close_tabs(self, tabs_or_ids: Union[str, ChromiumTab, List[Union[str, ChromiumTab]],
|
||||
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: ...
|
||||
|
Loading…
x
Reference in New Issue
Block a user