diff --git a/DrissionPage/chromium_base.py b/DrissionPage/chromium_base.py index 52a43b0..ccc7510 100644 --- a/DrissionPage/chromium_base.py +++ b/DrissionPage/chromium_base.py @@ -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) diff --git a/DrissionPage/chromium_page.py b/DrissionPage/chromium_page.py index 0738a68..6bb534d 100644 --- a/DrissionPage/chromium_page.py +++ b/DrissionPage/chromium_page.py @@ -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 diff --git a/DrissionPage/chromium_page.pyi b/DrissionPage/chromium_page.pyi index 786807d..0a5593a 100644 --- a/DrissionPage/chromium_page.pyi +++ b/DrissionPage/chromium_page.pyi @@ -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: ... diff --git a/DrissionPage/web_page.py b/DrissionPage/web_page.py index e991ace..0084aed 100644 --- a/DrissionPage/web_page.py +++ b/DrissionPage/web_page.py @@ -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 diff --git a/DrissionPage/web_page.pyi b/DrissionPage/web_page.pyi index 57bd343..baec25d 100644 --- a/DrissionPage/web_page.pyi +++ b/DrissionPage/web_page.pyi @@ -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 = ... diff --git a/setup.py b/setup.py index f6c3c70..d893698 100644 --- a/setup.py +++ b/setup.py @@ -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.",