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 .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)
|
||||
|
@ -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): ...
|
||||
|
@ -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关闭时触发的方法"""
|
||||
|
@ -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 == '')
|
||||
|
@ -54,6 +54,9 @@ class SessionPage(BasePage):
|
||||
@property
|
||||
def url(self) -> str: ...
|
||||
|
||||
@property
|
||||
def _session_url(self) -> str: ...
|
||||
|
||||
@property
|
||||
def html(self) -> str: ...
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user