优化ChromiumPage启动策略,修复传入driver启动时的问题

This commit is contained in:
g1879 2023-02-28 17:53:48 +08:00
parent 66a840bfdd
commit 753834e971
2 changed files with 21 additions and 29 deletions

View File

@ -74,11 +74,9 @@ class ChromiumPage(ChromiumBase):
:return: None
"""
self._chromium_init()
if self._tab_obj: # 传入driver的情况
self.process = None
else:
self.process = connect_browser(self._driver_options)[1]
if not self._tab_obj: # 不是传入driver的情况
connect_browser(self._driver_options)
if not tab_id:
json = self._control_session.get(f'http://{self.address}/json').json()
tab_id = [i['id'] for i in json if i['type'] == 'page']
@ -88,32 +86,33 @@ class ChromiumPage(ChromiumBase):
self._driver_init(tab_id)
self._page_init()
self._get_document()
self._first_run = False
def _chromium_init(self):
"""添加ChromiumPage独有的运行配置"""
super()._chromium_init()
self._alert = Alert()
self._rect = None
def _driver_init(self, tab_id):
"""新建页面、页面刷新、切换标签页后要进行的cdp参数初始化
:param tab_id: 要跳转到的标签页id
:return: None
"""
super()._driver_init(tab_id)
def _page_init(self):
"""页面相关设置"""
ws = self._control_session.get(f'http://{self.address}/json/version').json()['webSocketDebuggerUrl']
self._browser_driver = ChromiumDriver(ws.split('/')[-1], 'browser', self.address)
self._browser_driver.start()
self._alert = Alert()
self._tab_obj.Page.javascriptDialogOpening = self._on_alert_open
self._tab_obj.Page.javascriptDialogClosed = self._on_alert_close
self._rect = None
self._main_tab = self.tab_id
try:
self.download_set.by_browser()
except RuntimeError:
except CallMethodError:
pass
self._process_id = None
for i in self.browser_driver.SystemInfo.getProcessInfo()['processInfo']:
if i['type'] == 'browser':
self._process_id = i['id']
break
@property
def browser_driver(self):
"""返回用于控制浏览器cdp的driver"""
@ -142,14 +141,7 @@ class ChromiumPage(ChromiumBase):
@property
def process_id(self):
"""返回浏览器进程id"""
if self.process:
return self.process.pid
r = self.browser_driver.SystemInfo.getProcessInfo()['processInfo']
for i in r:
if i['type'] == 'browser':
return i['id']
return None
return self._process_id
@property
def set(self):
@ -734,7 +726,7 @@ def show_or_hide_browser(page, hide=True):
except ImportError:
raise ImportError('请先安装pip install pypiwin32')
pid = page.process_id or get_browser_progress_id(page.process, page.address)
pid = page.process_id
if not pid:
return None
hds = get_chrome_hwnds_from_pid(pid, page.title)

View File

@ -26,7 +26,7 @@ class ChromiumPage(ChromiumBase):
tab_id: str = None,
timeout: float = None):
self._driver_options: [ChromiumDriver, DriverOptions] = ...
self.process: popen = ...
self._process_id: str = ...
self._window_setter: WindowSetter = ...
self._main_tab: str = ...
self._alert: Alert = ...
@ -41,7 +41,7 @@ class ChromiumPage(ChromiumBase):
def _set_start_options(self, addr_driver_opts: Union[str, ChromiumDriver, DriverOptions], none) -> None: ...
def _driver_init(self, tab_id: str) -> None: ...
def _page_init(self) -> None: ...
@property
def browser_driver(self) -> ChromiumDriver: ...
@ -218,7 +218,7 @@ def show_or_hide_browser(page: ChromiumPage, hide: bool = True) -> None: ...
def get_browser_progress_id(progress: Union[popen, None], address: str) -> Union[str, None]: ...
def get_chrome_hwnds_from_pid(pid: str, title: str) -> list: ...
def get_chrome_hwnds_from_pid(pid: Union[str, int], title: str) -> list: ...
class ChromiumPageSetter(ChromiumBaseSetter):