mirror of
https://gitee.com/g1879/DrissionPage.git
synced 2024-12-10 04:00:23 +08:00
ChromiumPage基本完成
This commit is contained in:
parent
a27e4c8fb6
commit
06877903cd
@ -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
|
||||
|
@ -21,7 +21,7 @@ DrissionPage,即 driver 和 session 组合而成的 page。
|
||||
除了合并两者,本库还以网页为单位封装了常用功能,提供非常简便的操作和语句,在用于网页自动化操作时,减少考虑细节,专注功能实现,使用更方便。
|
||||
一切从简,尽量提供简单直接的使用方法,对新手更友好。
|
||||
|
||||
# 🔆 3.0 版隆重推出
|
||||
# 🔆 3.0 版即将推出
|
||||
|
||||
以前的版本是对 selenium 进行重新封装实现的。从 3.0 开始,作者另起炉灶,对底层进行了重新开发,摆脱对 selenium 的依赖,增强了功能,提升了运行效率。
|
||||
3.0 全新开发的页面对象是`WebPage`,支持 chromium 内核的浏览器(如 chrome 和 edge)。除了保持之前的功能,比依赖 selenium 的`MixPage`有以下优点:
|
||||
|
Loading…
x
Reference in New Issue
Block a user