mirror of
https://gitee.com/g1879/DrissionPage.git
synced 2024-12-10 04:00:23 +08:00
ChromiumFrame增加rect属性;修复内部元素不能获取屏幕坐标问题;frame_size改名为page_size;修复小问题
This commit is contained in:
parent
a4bf7da0bd
commit
ee89ce948c
@ -414,7 +414,7 @@ class BasePage(BaseParser):
|
|||||||
:param interval: 重试间隔
|
:param interval: 重试间隔
|
||||||
:return: 重试次数和间隔组成的tuple
|
:return: 重试次数和间隔组成的tuple
|
||||||
"""
|
"""
|
||||||
self._url = quote(url, safe='-_.~!*\'();:@&=+$,/?#[]')
|
self._url = quote(url, safe='-_.~!*\'"();:@&=+$,/\\?#[]%')
|
||||||
retry = retry if retry is not None else self.retry_times
|
retry = retry if retry is not None else self.retry_times
|
||||||
interval = interval if interval is not None else self.retry_interval
|
interval = interval if interval is not None else self.retry_interval
|
||||||
return retry, interval
|
return retry, interval
|
||||||
|
@ -110,7 +110,7 @@ class ChromiumDriver(object):
|
|||||||
if self._debug:
|
if self._debug:
|
||||||
if self._debug is True or 'id' in msg or (isinstance(self._debug, str)
|
if self._debug is True or 'id' in msg or (isinstance(self._debug, str)
|
||||||
and msg.get('method', '').startswith(self._debug)):
|
and msg.get('method', '').startswith(self._debug)):
|
||||||
print(f'<收 {self.id} {msg_json}')
|
print(f'<收 {msg_json}')
|
||||||
elif isinstance(self._debug, (list, tuple, set)):
|
elif isinstance(self._debug, (list, tuple, set)):
|
||||||
for m in self._debug:
|
for m in self._debug:
|
||||||
if msg.get('method', '').startswith(m):
|
if msg.get('method', '').startswith(m):
|
||||||
|
@ -38,7 +38,7 @@ class ChromiumOptions(object):
|
|||||||
self._page_load_strategy = options.get('page_load_strategy', 'normal')
|
self._page_load_strategy = options.get('page_load_strategy', 'normal')
|
||||||
self._proxy = om.proxies.get('http', None)
|
self._proxy = om.proxies.get('http', None)
|
||||||
self._system_user_path = options.get('system_user_path', False)
|
self._system_user_path = options.get('system_user_path', False)
|
||||||
self._existing_only = options.get('existing_only', False)
|
self._existing_only = options.get('is_existing_only', False)
|
||||||
|
|
||||||
user_path = user = False
|
user_path = user = False
|
||||||
for arg in self._arguments:
|
for arg in self._arguments:
|
||||||
@ -446,7 +446,7 @@ class ChromiumOptions(object):
|
|||||||
|
|
||||||
# 设置chrome_options
|
# 设置chrome_options
|
||||||
attrs = ('debugger_address', 'binary_location', 'arguments', 'extensions', 'user', 'page_load_strategy',
|
attrs = ('debugger_address', 'binary_location', 'arguments', 'extensions', 'user', 'page_load_strategy',
|
||||||
'auto_port', 'system_user_path', 'is_existing_only')
|
'auto_port', 'system_user_path', 'existing_only')
|
||||||
for i in attrs:
|
for i in attrs:
|
||||||
om.set_item('chrome_options', i, self.__getattribute__(f'_{i}'))
|
om.set_item('chrome_options', i, self.__getattribute__(f'_{i}'))
|
||||||
# 设置代理
|
# 设置代理
|
||||||
|
@ -450,8 +450,7 @@ class ChromiumElement(DrissionElement):
|
|||||||
"""
|
"""
|
||||||
if pseudo_ele:
|
if pseudo_ele:
|
||||||
pseudo_ele = f', "{pseudo_ele}"' if pseudo_ele.startswith(':') else f', "::{pseudo_ele}"'
|
pseudo_ele = f', "{pseudo_ele}"' if pseudo_ele.startswith(':') else f', "::{pseudo_ele}"'
|
||||||
js = f'return window.getComputedStyle(this{pseudo_ele}).getPropertyValue("{style}");'
|
return self.run_js(f'return window.getComputedStyle(this{pseudo_ele}).getPropertyValue("{style}");')
|
||||||
return self.run_js(js)
|
|
||||||
|
|
||||||
def get_src(self, timeout=None, base64_to_bytes=True):
|
def get_src(self, timeout=None, base64_to_bytes=True):
|
||||||
"""返回元素src资源,base64的可转为bytes返回,其它返回str
|
"""返回元素src资源,base64的可转为bytes返回,其它返回str
|
||||||
|
@ -10,6 +10,7 @@ from time import sleep, perf_counter
|
|||||||
from .._elements.chromium_element import ChromiumElement
|
from .._elements.chromium_element import ChromiumElement
|
||||||
from .._pages.chromium_base import ChromiumBase
|
from .._pages.chromium_base import ChromiumBase
|
||||||
from .._units.ids import FrameIds
|
from .._units.ids import FrameIds
|
||||||
|
from .._units.rect import FrameRect
|
||||||
from .._units.scroller import FrameScroller
|
from .._units.scroller import FrameScroller
|
||||||
from .._units.setter import ChromiumFrameSetter
|
from .._units.setter import ChromiumFrameSetter
|
||||||
from .._units.waiter import FrameWaiter
|
from .._units.waiter import FrameWaiter
|
||||||
@ -315,7 +316,7 @@ class ChromiumFrame(ChromiumBase):
|
|||||||
return self.frame_ele.attrs
|
return self.frame_ele.attrs
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def frame_size(self):
|
def page_size(self):
|
||||||
"""返回frame内页面尺寸,格式:(长, 高)"""
|
"""返回frame内页面尺寸,格式:(长, 高)"""
|
||||||
w = self.doc_ele.run_js('return this.body.scrollWidth')
|
w = self.doc_ele.run_js('return this.body.scrollWidth')
|
||||||
h = self.doc_ele.run_js('return this.body.scrollHeight')
|
h = self.doc_ele.run_js('return this.body.scrollHeight')
|
||||||
@ -326,6 +327,11 @@ class ChromiumFrame(ChromiumBase):
|
|||||||
"""返回frame元素大小"""
|
"""返回frame元素大小"""
|
||||||
return self.frame_ele.size
|
return self.frame_ele.size
|
||||||
|
|
||||||
|
@property
|
||||||
|
def rect(self):
|
||||||
|
"""返回获取坐标和大小的对象"""
|
||||||
|
return FrameRect(self)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def active_ele(self):
|
def active_ele(self):
|
||||||
"""返回当前焦点所在元素"""
|
"""返回当前焦点所在元素"""
|
||||||
@ -440,9 +446,9 @@ class ChromiumFrame(ChromiumBase):
|
|||||||
:return: 运行的结果
|
:return: 运行的结果
|
||||||
"""
|
"""
|
||||||
if script.startswith('this.scrollIntoView'):
|
if script.startswith('this.scrollIntoView'):
|
||||||
return self.frame_ele.run_js(script, args, as_expr=as_expr, timeout=timeout)
|
return self.frame_ele.run_js(script, *args, as_expr=as_expr, timeout=timeout)
|
||||||
else:
|
else:
|
||||||
return self.doc_ele.run_js(script, args, as_expr=as_expr, timeout=timeout)
|
return self.doc_ele.run_js(script, *args, as_expr=as_expr, timeout=timeout)
|
||||||
|
|
||||||
def parent(self, level_or_loc=1, index=1):
|
def parent(self, level_or_loc=1, index=1):
|
||||||
"""返回上面某一级父元素,可指定层数或用查询语法定位
|
"""返回上面某一级父元素,可指定层数或用查询语法定位
|
||||||
|
@ -14,6 +14,7 @@ from .._elements.chromium_element import ChromiumElement
|
|||||||
from .._units.element_states import ElementStates
|
from .._units.element_states import ElementStates
|
||||||
from .._units.ids import FrameIds
|
from .._units.ids import FrameIds
|
||||||
from .._units.locations import Locations
|
from .._units.locations import Locations
|
||||||
|
from .._units.rect import FrameRect
|
||||||
from .._units.scroller import FrameScroller
|
from .._units.scroller import FrameScroller
|
||||||
from .._units.setter import ChromiumFrameSetter
|
from .._units.setter import ChromiumFrameSetter
|
||||||
from .._units.waiter import FrameWaiter
|
from .._units.waiter import FrameWaiter
|
||||||
@ -88,11 +89,14 @@ class ChromiumFrame(ChromiumBase):
|
|||||||
def attrs(self) -> dict: ...
|
def attrs(self) -> dict: ...
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def frame_size(self) -> Tuple[int, int]: ...
|
def page_size(self) -> Tuple[int, int]: ...
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def size(self) -> Tuple[int, int]: ...
|
def size(self) -> Tuple[int, int]: ...
|
||||||
|
|
||||||
|
@property
|
||||||
|
def rect(self) -> FrameRect: ...
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def active_ele(self) -> ChromiumElement: ...
|
def active_ele(self) -> ChromiumElement: ...
|
||||||
|
|
||||||
|
@ -13,8 +13,8 @@ from .._commons.browser import connect_browser
|
|||||||
from .._configs.chromium_options import ChromiumOptions
|
from .._configs.chromium_options import ChromiumOptions
|
||||||
from .._pages.chromium_base import ChromiumBase, Timeout
|
from .._pages.chromium_base import ChromiumBase, Timeout
|
||||||
from .._pages.chromium_tab import ChromiumTab
|
from .._pages.chromium_tab import ChromiumTab
|
||||||
|
from .._units.rect import TabRect
|
||||||
from .._units.setter import ChromiumPageSetter
|
from .._units.setter import ChromiumPageSetter
|
||||||
from .._units.tab_rect import TabRect
|
|
||||||
from .._units.waiter import PageWaiter
|
from .._units.waiter import PageWaiter
|
||||||
from ..errors import BrowserConnectError
|
from ..errors import BrowserConnectError
|
||||||
|
|
||||||
|
@ -9,8 +9,8 @@ from .._base.browser import Browser
|
|||||||
from .._configs.chromium_options import ChromiumOptions
|
from .._configs.chromium_options import ChromiumOptions
|
||||||
from .._pages.chromium_base import ChromiumBase
|
from .._pages.chromium_base import ChromiumBase
|
||||||
from .._pages.chromium_tab import ChromiumTab
|
from .._pages.chromium_tab import ChromiumTab
|
||||||
|
from .._units.rect import TabRect
|
||||||
from .._units.setter import ChromiumPageSetter
|
from .._units.setter import ChromiumPageSetter
|
||||||
from .._units.tab_rect import TabRect
|
|
||||||
from .._units.waiter import PageWaiter
|
from .._units.waiter import PageWaiter
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,8 +9,8 @@ from .._base.base import BasePage
|
|||||||
from .._commons.web import set_session_cookies, set_browser_cookies
|
from .._commons.web import set_session_cookies, set_browser_cookies
|
||||||
from .._pages.chromium_base import ChromiumBase
|
from .._pages.chromium_base import ChromiumBase
|
||||||
from .._pages.session_page import SessionPage
|
from .._pages.session_page import SessionPage
|
||||||
|
from .._units.rect import TabRect
|
||||||
from .._units.setter import TabSetter, WebPageTabSetter
|
from .._units.setter import TabSetter, WebPageTabSetter
|
||||||
from .._units.tab_rect import TabRect
|
|
||||||
from .._units.waiter import TabWaiter
|
from .._units.waiter import TabWaiter
|
||||||
|
|
||||||
|
|
||||||
|
@ -7,7 +7,6 @@ from typing import Union, Tuple, Any, List, Optional
|
|||||||
|
|
||||||
from requests import Session, Response
|
from requests import Session, Response
|
||||||
|
|
||||||
from .._units.tab_rect import ChromiumTabRect
|
|
||||||
from .chromium_base import ChromiumBase
|
from .chromium_base import ChromiumBase
|
||||||
from .chromium_frame import ChromiumFrame
|
from .chromium_frame import ChromiumFrame
|
||||||
from .chromium_page import ChromiumPage
|
from .chromium_page import ChromiumPage
|
||||||
@ -16,6 +15,7 @@ from .web_page import WebPage
|
|||||||
from .._base.browser import Browser
|
from .._base.browser import Browser
|
||||||
from .._elements.chromium_element import ChromiumElement
|
from .._elements.chromium_element import ChromiumElement
|
||||||
from .._elements.session_element import SessionElement
|
from .._elements.session_element import SessionElement
|
||||||
|
from .._units.rect import TabRect
|
||||||
from .._units.setter import TabSetter, WebPageTabSetter
|
from .._units.setter import TabSetter, WebPageTabSetter
|
||||||
from .._units.waiter import TabWaiter
|
from .._units.waiter import TabWaiter
|
||||||
|
|
||||||
@ -25,7 +25,7 @@ class ChromiumTab(ChromiumBase):
|
|||||||
def __init__(self, page: ChromiumPage, tab_id: str = None):
|
def __init__(self, page: ChromiumPage, tab_id: str = None):
|
||||||
self._page: ChromiumPage = ...
|
self._page: ChromiumPage = ...
|
||||||
self._browser: Browser = ...
|
self._browser: Browser = ...
|
||||||
self._rect: Optional[ChromiumTabRect] = ...
|
self._rect: Optional[TabRect] = ...
|
||||||
|
|
||||||
def _d_set_runtime_settings(self) -> None: ...
|
def _d_set_runtime_settings(self) -> None: ...
|
||||||
|
|
||||||
@ -35,7 +35,7 @@ class ChromiumTab(ChromiumBase):
|
|||||||
def page(self) -> ChromiumPage: ...
|
def page(self) -> ChromiumPage: ...
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def rect(self) -> ChromiumTabRect: ...
|
def rect(self) -> TabRect: ...
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def set(self) -> TabSetter: ...
|
def set(self) -> TabSetter: ...
|
||||||
|
@ -74,3 +74,25 @@ class TabRect(object):
|
|||||||
def _get_window_rect(self):
|
def _get_window_rect(self):
|
||||||
"""获取窗口范围信息"""
|
"""获取窗口范围信息"""
|
||||||
return self._page.browser.get_window_bounds(self._page.tab_id)
|
return self._page.browser.get_window_bounds(self._page.tab_id)
|
||||||
|
|
||||||
|
|
||||||
|
class FrameRect(object):
|
||||||
|
"""异域iframe使用"""
|
||||||
|
|
||||||
|
def __init__(self, frame):
|
||||||
|
self._frame = frame
|
||||||
|
|
||||||
|
@property
|
||||||
|
def viewport_location(self):
|
||||||
|
"""返回视口在屏幕中坐标,左上角为(0, 0)"""
|
||||||
|
return self._frame.frame_ele.locations.screen_location
|
||||||
|
|
||||||
|
@property
|
||||||
|
def page_size(self):
|
||||||
|
"""返回页面总宽高,格式:(宽, 高)"""
|
||||||
|
return self._frame.page_size
|
||||||
|
|
||||||
|
@property
|
||||||
|
def viewport_size(self):
|
||||||
|
"""返回视口宽高,不包括滚动条,格式:(宽, 高)"""
|
||||||
|
return self._frame.frame_ele.size
|
@ -5,6 +5,7 @@
|
|||||||
"""
|
"""
|
||||||
from typing import Tuple, Union
|
from typing import Tuple, Union
|
||||||
|
|
||||||
|
from .._pages.chromium_frame import ChromiumFrame
|
||||||
from .._pages.chromium_page import ChromiumPage
|
from .._pages.chromium_page import ChromiumPage
|
||||||
from .._pages.chromium_tab import ChromiumTab, WebPageTab
|
from .._pages.chromium_tab import ChromiumTab, WebPageTab
|
||||||
from .._pages.web_page import WebPage
|
from .._pages.web_page import WebPage
|
||||||
@ -41,3 +42,17 @@ class TabRect(object):
|
|||||||
def _get_page_rect(self) -> dict: ...
|
def _get_page_rect(self) -> dict: ...
|
||||||
|
|
||||||
def _get_window_rect(self) -> dict: ...
|
def _get_window_rect(self) -> dict: ...
|
||||||
|
|
||||||
|
|
||||||
|
class FrameRect(object):
|
||||||
|
def __init__(self, frame: ChromiumFrame):
|
||||||
|
self._frame: ChromiumFrame = ...
|
||||||
|
|
||||||
|
@property
|
||||||
|
def viewport_location(self) -> Tuple[float, float]: ...
|
||||||
|
|
||||||
|
@property
|
||||||
|
def page_size(self) -> Tuple[float, float]: ...
|
||||||
|
|
||||||
|
@property
|
||||||
|
def viewport_size(self) -> Tuple[float, float]: ...
|
Loading…
x
Reference in New Issue
Block a user