From 753834e97117b49a165ce0e7e8190a77e0464411 Mon Sep 17 00:00:00 2001 From: g1879 Date: Tue, 28 Feb 2023 17:53:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96ChromiumPage=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=E7=AD=96=E7=95=A5=EF=BC=8C=E4=BF=AE=E5=A4=8D=E4=BC=A0?= =?UTF-8?q?=E5=85=A5driver=E5=90=AF=E5=8A=A8=E6=97=B6=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DrissionPage/chromium_page.py | 44 ++++++++++++++-------------------- DrissionPage/chromium_page.pyi | 6 ++--- 2 files changed, 21 insertions(+), 29 deletions(-) diff --git a/DrissionPage/chromium_page.py b/DrissionPage/chromium_page.py index cd40e97..e447e1e 100644 --- a/DrissionPage/chromium_page.py +++ b/DrissionPage/chromium_page.py @@ -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) diff --git a/DrissionPage/chromium_page.pyi b/DrissionPage/chromium_page.pyi index e19b988..f54bd9a 100644 --- a/DrissionPage/chromium_page.pyi +++ b/DrissionPage/chromium_page.pyi @@ -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):