From 06877903cd4a295637db64844e3a48ade63dafd3 Mon Sep 17 00:00:00 2001 From: g1879 Date: Thu, 17 Nov 2022 13:25:51 +0800 Subject: [PATCH] =?UTF-8?q?ChromiumPage=E5=9F=BA=E6=9C=AC=E5=AE=8C?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DrissionPage/chromium_page.py | 28 ++++++++++++++++++++-------- README.md | 2 +- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/DrissionPage/chromium_page.py b/DrissionPage/chromium_page.py index 8ab134e..48af3ec 100644 --- a/DrissionPage/chromium_page.py +++ b/DrissionPage/chromium_page.py @@ -90,6 +90,8 @@ class ChromiumPage(BasePage): else: raise TypeError('只能接收Tab或DriverOptions类型参数。') + self._main_tab = self.tab_id + def _init_page(self, tab_id: str = None) -> None: """新建页面、页面刷新、切换标签页后要进行的cdp参数初始化 :param tab_id: 要跳转到的标签页id @@ -113,7 +115,7 @@ class ChromiumPage(BasePage): def _get_document(self) -> None: """刷新cdp使用的document数据""" - print('get doc') + # print('get doc') self._wait_loading() root_id = self._driver.DOM.getDocument()['root']['nodeId'] self._root_id = self._driver.DOM.resolveNode(nodeId=root_id)['object']['objectId'] @@ -124,8 +126,7 @@ class ChromiumPage(BasePage): :param timeout: 超时时间 :return: 是否成功,超时返回False """ - # timeout = timeout if timeout is not None else self.timeouts.page_load - timeout = 100 + timeout = timeout if timeout is not None else self.timeouts.page_load end_time = perf_counter() + timeout while perf_counter() < end_time: @@ -143,12 +144,12 @@ class ChromiumPage(BasePage): def _onLoadEventFired(self, **kwargs): """在页面刷新、变化后重新读取页面内容""" - print('load complete') + # print('load complete') if self._first_run is False: self._get_document() def _onFrameNavigated(self, **kwargs): - print('nav') + # print('nav') # todo: 考虑frame的情况,修改别的判断方式 if not kwargs['frame'].get('parentId', None): self._is_loading = True @@ -582,25 +583,37 @@ class ChromiumPage(BasePage): """激活当前标签页使其处于最前面""" self._ss.get(f'http://{self.address}/json/activate/{self.tab_id}') + def set_main_tab(self, tab_id: str = None) -> None: + """设置某个标签页为住标签页""" + self._main_tab = tab_id or self.tab_id + def new_tab(self, url: str = None) -> None: """新建并定位到一个标签页,该标签页在最后面 \n :param url: 新标签页跳转到的网址 :return: None """ - d = self.driver + begin_len = len(self.tabs) url = f'?{url}' if url else '' self._ss.get(f'http://{self.address}/json/new{url}') + while len(self.tabs) < begin_len: + pass self.to_tab() + def to_main_tab(self) -> None: + """跳转到主标签页""" + self.to_tab('main') + def to_tab(self, tab_id: str = None, activate: bool = True) -> None: """跳转到标签页 \n - :param tab_id: 标签页id字符串,默认跳转到活动状态的 + :param tab_id: 标签页id字符串,默认跳转到main_tab :param activate: 切换后是否变为活动状态 :return: None """ tabs = self.tabs if not tab_id: tab_id = tabs[0] + elif tab_id == 'main': + tab_id = self._main_tab if tab_id == self.tab_id or tab_id not in tabs: return @@ -677,7 +690,6 @@ class ChromiumPage(BasePage): timeout = timeout or self.timeout end_time = perf_counter() + timeout while not self._alert.activated and perf_counter() < end_time: - print('vvv') sleep(.1) if not self._alert.activated: return None diff --git a/README.md b/README.md index 3f34256..c300bb0 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ DrissionPage,即 driver 和 session 组合而成的 page。 除了合并两者,本库还以网页为单位封装了常用功能,提供非常简便的操作和语句,在用于网页自动化操作时,减少考虑细节,专注功能实现,使用更方便。 一切从简,尽量提供简单直接的使用方法,对新手更友好。 -# 🔆 3.0 版隆重推出 +# 🔆 3.0 版即将推出 以前的版本是对 selenium 进行重新封装实现的。从 3.0 开始,作者另起炉灶,对底层进行了重新开发,摆脱对 selenium 的依赖,增强了功能,提升了运行效率。 3.0 全新开发的页面对象是`WebPage`,支持 chromium 内核的浏览器(如 chrome 和 edge)。除了保持之前的功能,比依赖 selenium 的`MixPage`有以下优点: