mirror of
https://gitee.com/g1879/DrissionPage.git
synced 2024-12-10 04:00:23 +08:00
ChromiumFrame的wait增加元素特征;WebPage切换d模式时能正确读取session的url;quit()后等待浏览器完全关闭
This commit is contained in:
parent
91624d3458
commit
7a34e4d5f6
@ -8,8 +8,8 @@ from time import sleep, perf_counter
|
|||||||
from warnings import warn
|
from warnings import warn
|
||||||
|
|
||||||
from .commons.tools import get_usable_path
|
from .commons.tools import get_usable_path
|
||||||
from .chromium_base import ChromiumBase, ChromiumPageScroll, ChromiumBaseSetter
|
from .chromium_base import ChromiumBase, ChromiumPageScroll, ChromiumBaseSetter, ChromiumBaseWaiter
|
||||||
from .chromium_element import ChromiumElement
|
from .chromium_element import ChromiumElement, ChromiumElementWaiter
|
||||||
|
|
||||||
|
|
||||||
class ChromiumFrame(ChromiumBase):
|
class ChromiumFrame(ChromiumBase):
|
||||||
@ -292,9 +292,14 @@ class ChromiumFrame(ChromiumBase):
|
|||||||
@property
|
@property
|
||||||
def states(self):
|
def states(self):
|
||||||
"""返回用于获取状态信息的对象"""
|
"""返回用于获取状态信息的对象"""
|
||||||
if self._states is None:
|
return self.frame_ele.states
|
||||||
self._states = ChromiumFrameStates(self)
|
|
||||||
return self._states
|
@property
|
||||||
|
def wait(self):
|
||||||
|
"""返回用于等待的对象"""
|
||||||
|
if self._wait is None:
|
||||||
|
self._wait = FrameWaiter(self)
|
||||||
|
return self._wait
|
||||||
|
|
||||||
def refresh(self):
|
def refresh(self):
|
||||||
"""刷新frame页面"""
|
"""刷新frame页面"""
|
||||||
@ -634,16 +639,6 @@ class ChromiumFrameIds(object):
|
|||||||
return self._frame.frame_ele.ids.node_id
|
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):
|
class ChromiumFrameScroll(ChromiumPageScroll):
|
||||||
def __init__(self, frame):
|
def __init__(self, frame):
|
||||||
"""
|
"""
|
||||||
@ -672,3 +667,12 @@ class ChromiumFrameSetter(ChromiumBaseSetter):
|
|||||||
"""
|
"""
|
||||||
self._page._check_ok()
|
self._page._check_ok()
|
||||||
self._page.frame_ele.set.attr(attr, value)
|
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)
|
||||||
|
@ -6,8 +6,8 @@
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Union, Tuple, List, Any
|
from typing import Union, Tuple, List, Any
|
||||||
|
|
||||||
from .chromium_base import ChromiumBase, ChromiumPageScroll, ChromiumBaseSetter
|
from .chromium_base import ChromiumBase, ChromiumPageScroll, ChromiumBaseSetter, ChromiumBaseWaiter
|
||||||
from .chromium_element import ChromiumElement, Locations
|
from .chromium_element import ChromiumElement, Locations, ChromiumElementStates, ChromiumElementWaiter
|
||||||
|
|
||||||
|
|
||||||
class ChromiumFrame(ChromiumBase):
|
class ChromiumFrame(ChromiumBase):
|
||||||
@ -21,9 +21,8 @@ class ChromiumFrame(ChromiumBase):
|
|||||||
self._doc_ele: ChromiumElement = ...
|
self._doc_ele: ChromiumElement = ...
|
||||||
self._is_diff_domain: bool = ...
|
self._is_diff_domain: bool = ...
|
||||||
self.doc_ele: ChromiumElement = ...
|
self.doc_ele: ChromiumElement = ...
|
||||||
self._states: ChromiumFrameStates = ...
|
self._states: ChromiumElementStates = ...
|
||||||
self._ids: ChromiumFrameIds = ...
|
self._ids: ChromiumFrameIds = ...
|
||||||
# self.is_loading: bool = ...
|
|
||||||
|
|
||||||
def __call__(self,
|
def __call__(self,
|
||||||
loc_or_str: Union[Tuple[str, str], str],
|
loc_or_str: Union[Tuple[str, str], str],
|
||||||
@ -103,7 +102,10 @@ class ChromiumFrame(ChromiumBase):
|
|||||||
def set(self) -> ChromiumFrameSetter: ...
|
def set(self) -> ChromiumFrameSetter: ...
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def states(self) -> ChromiumFrameStates: ...
|
def states(self) -> ChromiumElementStates: ...
|
||||||
|
|
||||||
|
@property
|
||||||
|
def wait(self) -> FrameWaiter: ...
|
||||||
|
|
||||||
def refresh(self) -> None: ...
|
def refresh(self) -> None: ...
|
||||||
|
|
||||||
@ -205,8 +207,5 @@ class ChromiumFrameSetter(ChromiumBaseSetter):
|
|||||||
def attr(self, attr: str, value: str) -> None: ...
|
def attr(self, attr: str, value: str) -> None: ...
|
||||||
|
|
||||||
|
|
||||||
class ChromiumFrameStates(object):
|
class FrameWaiter(ChromiumBaseWaiter, ChromiumElementWaiter):
|
||||||
def __init__(self, frame: ChromiumFrame):
|
def __init__(self, frame: ChromiumFrame): ...
|
||||||
self._frame: ChromiumFrame = ...
|
|
||||||
|
|
||||||
def is_displayed(self) -> bool: ...
|
|
||||||
|
@ -11,6 +11,7 @@ from warnings import warn
|
|||||||
|
|
||||||
from requests import Session
|
from requests import Session
|
||||||
|
|
||||||
|
from .commons.tools import port_is_using
|
||||||
from .chromium_base import ChromiumBase, Timeout, ChromiumBaseSetter, ChromiumBaseWaiter
|
from .chromium_base import ChromiumBase, Timeout, ChromiumBaseSetter, ChromiumBaseWaiter
|
||||||
from .chromium_driver import ChromiumDriver
|
from .chromium_driver import ChromiumDriver
|
||||||
from .chromium_tab import ChromiumTab
|
from .chromium_tab import ChromiumTab
|
||||||
@ -335,6 +336,9 @@ class ChromiumPage(ChromiumBase):
|
|||||||
"""关闭浏览器"""
|
"""关闭浏览器"""
|
||||||
self._tab_obj.Browser.close()
|
self._tab_obj.Browser.close()
|
||||||
self._tab_obj.stop()
|
self._tab_obj.stop()
|
||||||
|
ip, port = self.address.split(':')
|
||||||
|
while port_is_using(ip, port):
|
||||||
|
sleep(.1)
|
||||||
|
|
||||||
def _on_alert_close(self, **kwargs):
|
def _on_alert_close(self, **kwargs):
|
||||||
"""alert关闭时触发的方法"""
|
"""alert关闭时触发的方法"""
|
||||||
|
@ -81,6 +81,11 @@ class SessionPage(BasePage):
|
|||||||
"""返回当前访问url"""
|
"""返回当前访问url"""
|
||||||
return self._url
|
return self._url
|
||||||
|
|
||||||
|
@property
|
||||||
|
def _session_url(self):
|
||||||
|
"""返回当前访问url"""
|
||||||
|
return self._url
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def html(self):
|
def html(self):
|
||||||
"""返回页面的html文本"""
|
"""返回页面的html文本"""
|
||||||
@ -191,7 +196,7 @@ class SessionPage(BasePage):
|
|||||||
cookies = self.session.cookies
|
cookies = self.session.cookies
|
||||||
else:
|
else:
|
||||||
if self.url:
|
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
|
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 == '')
|
cookies = tuple(x for x in self.session.cookies if domain in x.domain or x.domain == '')
|
||||||
|
@ -54,6 +54,9 @@ class SessionPage(BasePage):
|
|||||||
@property
|
@property
|
||||||
def url(self) -> str: ...
|
def url(self) -> str: ...
|
||||||
|
|
||||||
|
@property
|
||||||
|
def _session_url(self) -> str: ...
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def html(self) -> str: ...
|
def html(self) -> str: ...
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user