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
|
||||||
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'
|
||||||
|
@ -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,39 +419,43 @@ class Chromium(object):
|
|||||||
for driver in tab:
|
for driver in tab:
|
||||||
driver.stop()
|
driver.stop()
|
||||||
|
|
||||||
if not force:
|
if force:
|
||||||
return
|
pids = None
|
||||||
|
|
||||||
try:
|
|
||||||
pids = [pid['id'] for pid in self._run_cdp('SystemInfo.getProcessInfo')['processInfo']]
|
|
||||||
except:
|
|
||||||
return
|
|
||||||
|
|
||||||
from psutil import Process
|
|
||||||
for pid in pids:
|
|
||||||
try:
|
try:
|
||||||
Process(pid).kill()
|
pids = [pid['id'] for pid in self._run_cdp('SystemInfo.getProcessInfo')['processInfo']]
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
from os import popen
|
if pids:
|
||||||
from platform import system
|
from psutil import Process
|
||||||
end_time = perf_counter() + timeout
|
for pid in pids:
|
||||||
while perf_counter() < end_time:
|
try:
|
||||||
ok = True
|
Process(pid).kill()
|
||||||
for pid in pids:
|
except:
|
||||||
txt = f'tasklist | findstr {pid}' if system().lower() == 'windows' else f'ps -ef | grep {pid}'
|
pass
|
||||||
p = popen(txt)
|
|
||||||
sleep(.05)
|
|
||||||
try:
|
|
||||||
if f' {pid} ' in p.read():
|
|
||||||
ok = False
|
|
||||||
break
|
|
||||||
except TypeError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
if ok:
|
from os import popen
|
||||||
break
|
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):
|
def _get_driver(self, tab_id, owner=None):
|
||||||
"""新建并返回指定tab id的Driver
|
"""新建并返回指定tab id的Driver
|
||||||
@ -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浏览器连接失败,请确认浏览器是否启动。')
|
||||||
|
@ -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: ...
|
||||||
|
@ -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}>'
|
||||||
|
@ -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'})
|
||||||
|
@ -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):
|
||||||
"""浏览器退出时执行"""
|
"""浏览器退出时执行"""
|
||||||
|
@ -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: ...
|
||||||
|
Loading…
x
Reference in New Issue
Block a user