3.1.2修复页面未加载完可能获取到空元素的问题;修复新标签页重定向时获取文档不正确问题;WebPage初始化删除tab_id参数;ChromiumPage添加latest_tab属性

This commit is contained in:
g1879 2023-02-02 14:59:29 +08:00
parent 78dc04c673
commit f3155df7a9
6 changed files with 17 additions and 16 deletions

View File

@ -436,17 +436,20 @@ class ChromiumBase(BasePage):
nodeIds = None
end_time = perf_counter() + timeout
ok = False
while True:
if count > 0:
count = 1 if single else count
try:
nodeIds = self._wait_driver.DOM.getSearchResults(searchId=search_result['searchId'],
fromIndex=0, toIndex=count)
break
if nodeIds['nodeIds'][0] != 0:
ok = True
except Exception:
sleep(.01)
if perf_counter() >= end_time:
if ok or perf_counter() >= end_time:
break
search_result = self._wait_driver.DOM.performSearch(query=loc, includeUserAgentShadowDOM=True)

View File

@ -126,6 +126,11 @@ class ChromiumPage(ChromiumBase):
def main_tab(self):
return self._main_tab
@property
def latest_tab(self):
"""返回最新的标签页id最新标签页指最后创建或最后被激活的"""
return self.tabs[0]
@property
def process_id(self):
"""返回浏览器进程id"""
@ -261,10 +266,6 @@ class ChromiumPage(ChromiumBase):
"""跳转到主标签页"""
self.to_tab(self._main_tab)
def to_new_tab(self):
"""切换到最新的标签页"""
self.to_tab(self.tabs[0])
def to_tab(self, tab_id=None, activate=True):
"""跳转到标签页
:param tab_id: 标签页id字符串默认跳转到main_tab

View File

@ -56,6 +56,9 @@ class ChromiumPage(ChromiumBase):
@property
def main_tab(self) -> str: ...
@property
def latest_tab(self) -> str: ...
@property
def process_id(self) -> Union[None, int]: ...
@ -87,8 +90,6 @@ class ChromiumPage(ChromiumBase):
def to_main_tab(self) -> None: ...
def to_new_tab(self) -> None: ...
def to_tab(self, tab_id: str = None, activate: bool = True) -> None: ...
def _to_tab(self, tab_id: str = None, activate: bool = True, read_doc: bool = True) -> None: ...

View File

@ -24,10 +24,9 @@ from .session_page import SessionPage
class WebPage(SessionPage, ChromiumPage, BasePage):
"""整合浏览器和request的页面类"""
def __init__(self, mode='d', timeout=None, tab_id=None, driver_or_options=None, session_or_options=None):
def __init__(self, mode='d', timeout=None, driver_or_options=None, session_or_options=None):
"""初始化函数
:param mode: 'd' 's'即driver模式和session模式
:param tab_id: 要控制的标签页id不指定默认为激活的
:param timeout: 超时时间d模式时为寻找元素时间s模式时为连接时间默认10秒
:param driver_or_options: ChromiumDriver对象或DriverOptions对象只使用s模式时应传入False
:param session_or_options: Session对象或SessionOptions对象只使用d模式时应传入False
@ -45,7 +44,6 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
self._tab_obj = None
self._driver_options = None
self._session_options = None
self._setting_tab_id = tab_id
self._response = None
self._download_set = None
@ -199,7 +197,7 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
"""返回纯粹的ChromiumDriver对象调用时切换到d模式并连接浏览器"""
self.change_mode('d')
if self._tab_obj is None:
self._connect_browser(self._driver_options, self._setting_tab_id)
self._connect_browser(self._driver_options)
return self._tab_obj
@_driver.setter
@ -329,7 +327,7 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
# s模式转d模式
if self._mode == 'd':
if self._tab_obj is None:
self._connect_browser(self._driver_options, self._setting_tab_id)
self._connect_browser(self._driver_options)
self._url = None if not self._has_driver else super(SessionPage, self).url
self._has_driver = True

View File

@ -25,7 +25,6 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
def __init__(self,
mode: str = 'd',
timeout: float = None,
tab_id: str = None,
driver_or_options: Union[ChromiumDriver, ChromiumOptions, DriverOptions, bool] = None,
session_or_options: Union[Session, SessionOptions, bool] = None) -> None:
self._mode: str = ...
@ -34,7 +33,6 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
self.address: str = ...
self._session_options: Union[SessionOptions, None] = ...
self._driver_options: Union[ChromiumOptions, DriverOptions, None] = ...
self._setting_tab_id: str = ...
self._download_set: WebPageDownloadSetter = ...
self._download_path: str = ...

View File

@ -6,7 +6,7 @@ with open("README.md", "r", encoding='utf-8') as fh:
setup(
name="DrissionPage",
version="3.1.1",
version="3.1.2",
author="g1879",
author_email="g1879@qq.com",
description="A module that integrates selenium and requests session, encapsulates common page operations.",