diff --git a/DrissionPage/chromium_frame.py b/DrissionPage/chromium_frame.py index 18f5be1..0d0387b 100644 --- a/DrissionPage/chromium_frame.py +++ b/DrissionPage/chromium_frame.py @@ -8,8 +8,8 @@ from time import sleep, perf_counter from warnings import warn from .commons.tools import get_usable_path -from .chromium_base import ChromiumBase, ChromiumPageScroll, ChromiumBaseSetter -from .chromium_element import ChromiumElement +from .chromium_base import ChromiumBase, ChromiumPageScroll, ChromiumBaseSetter, ChromiumBaseWaiter +from .chromium_element import ChromiumElement, ChromiumElementWaiter class ChromiumFrame(ChromiumBase): @@ -292,9 +292,14 @@ class ChromiumFrame(ChromiumBase): @property def states(self): """返回用于获取状态信息的对象""" - if self._states is None: - self._states = ChromiumFrameStates(self) - return self._states + return self.frame_ele.states + + @property + def wait(self): + """返回用于等待的对象""" + if self._wait is None: + self._wait = FrameWaiter(self) + return self._wait def refresh(self): """刷新frame页面""" @@ -634,16 +639,6 @@ class ChromiumFrameIds(object): return self._frame.frame_ele.ids.node_id -class ChromiumFrameStates(object): - def __init__(self, frame): - self._frame = frame - - def is_displayed(self): - """返回frame元素是否显示""" - self._frame._check_ok() - return self._frame.frame_ele.states.is_displayed - - class ChromiumFrameScroll(ChromiumPageScroll): def __init__(self, frame): """ @@ -672,3 +667,12 @@ class ChromiumFrameSetter(ChromiumBaseSetter): """ self._page._check_ok() self._page.frame_ele.set.attr(attr, value) + + +class FrameWaiter(ChromiumBaseWaiter, ChromiumElementWaiter): + def __init__(self, frame): + """ + :param frame: ChromiumFrame对象 + """ + super().__init__(frame) + super(ChromiumBaseWaiter, self).__init__(frame, frame.frame_ele) diff --git a/DrissionPage/chromium_frame.pyi b/DrissionPage/chromium_frame.pyi index b9b9edb..17db769 100644 --- a/DrissionPage/chromium_frame.pyi +++ b/DrissionPage/chromium_frame.pyi @@ -6,8 +6,8 @@ from pathlib import Path from typing import Union, Tuple, List, Any -from .chromium_base import ChromiumBase, ChromiumPageScroll, ChromiumBaseSetter -from .chromium_element import ChromiumElement, Locations +from .chromium_base import ChromiumBase, ChromiumPageScroll, ChromiumBaseSetter, ChromiumBaseWaiter +from .chromium_element import ChromiumElement, Locations, ChromiumElementStates, ChromiumElementWaiter class ChromiumFrame(ChromiumBase): @@ -21,9 +21,8 @@ class ChromiumFrame(ChromiumBase): self._doc_ele: ChromiumElement = ... self._is_diff_domain: bool = ... self.doc_ele: ChromiumElement = ... - self._states: ChromiumFrameStates = ... + self._states: ChromiumElementStates = ... self._ids: ChromiumFrameIds = ... - # self.is_loading: bool = ... def __call__(self, loc_or_str: Union[Tuple[str, str], str], @@ -103,7 +102,10 @@ class ChromiumFrame(ChromiumBase): def set(self) -> ChromiumFrameSetter: ... @property - def states(self) -> ChromiumFrameStates: ... + def states(self) -> ChromiumElementStates: ... + + @property + def wait(self) -> FrameWaiter: ... def refresh(self) -> None: ... @@ -205,8 +207,5 @@ class ChromiumFrameSetter(ChromiumBaseSetter): def attr(self, attr: str, value: str) -> None: ... -class ChromiumFrameStates(object): - def __init__(self, frame: ChromiumFrame): - self._frame: ChromiumFrame = ... - - def is_displayed(self) -> bool: ... +class FrameWaiter(ChromiumBaseWaiter, ChromiumElementWaiter): + def __init__(self, frame: ChromiumFrame): ... diff --git a/DrissionPage/chromium_page.py b/DrissionPage/chromium_page.py index 8aabe78..dd97022 100644 --- a/DrissionPage/chromium_page.py +++ b/DrissionPage/chromium_page.py @@ -11,6 +11,7 @@ from warnings import warn from requests import Session +from .commons.tools import port_is_using from .chromium_base import ChromiumBase, Timeout, ChromiumBaseSetter, ChromiumBaseWaiter from .chromium_driver import ChromiumDriver from .chromium_tab import ChromiumTab @@ -335,6 +336,9 @@ class ChromiumPage(ChromiumBase): """关闭浏览器""" self._tab_obj.Browser.close() self._tab_obj.stop() + ip, port = self.address.split(':') + while port_is_using(ip, port): + sleep(.1) def _on_alert_close(self, **kwargs): """alert关闭时触发的方法""" diff --git a/DrissionPage/session_page.py b/DrissionPage/session_page.py index b36b95e..7ea02dd 100644 --- a/DrissionPage/session_page.py +++ b/DrissionPage/session_page.py @@ -81,6 +81,11 @@ class SessionPage(BasePage): """返回当前访问url""" return self._url + @property + def _session_url(self): + """返回当前访问url""" + return self._url + @property def html(self): """返回页面的html文本""" @@ -191,7 +196,7 @@ class SessionPage(BasePage): cookies = self.session.cookies else: if self.url: - ex_url = extract(self.url) + ex_url = extract(self._session_url) domain = f'{ex_url.domain}.{ex_url.suffix}' if ex_url.suffix else ex_url.domain cookies = tuple(x for x in self.session.cookies if domain in x.domain or x.domain == '') diff --git a/DrissionPage/session_page.pyi b/DrissionPage/session_page.pyi index f98c450..c551834 100644 --- a/DrissionPage/session_page.pyi +++ b/DrissionPage/session_page.pyi @@ -54,6 +54,9 @@ class SessionPage(BasePage): @property def url(self) -> str: ... + @property + def _session_url(self) -> str: ... + @property def html(self) -> str: ...