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: 重试间隔
|
||||
:return: 重试次数和间隔组成的tuple
|
||||
"""
|
||||
self._url = quote(url, safe='-_.~!*\'();:@&=+$,/?#[]')
|
||||
self._url = quote(url, safe='-_.~!*\'"();:@&=+$,/\\?#[]%')
|
||||
retry = retry if retry is not None else self.retry_times
|
||||
interval = interval if interval is not None else self.retry_interval
|
||||
return retry, interval
|
||||
|
@ -110,7 +110,7 @@ class ChromiumDriver(object):
|
||||
if self._debug:
|
||||
if self._debug is True or 'id' in msg or (isinstance(self._debug, str)
|
||||
and msg.get('method', '').startswith(self._debug)):
|
||||
print(f'<收 {self.id} {msg_json}')
|
||||
print(f'<收 {msg_json}')
|
||||
elif isinstance(self._debug, (list, tuple, set)):
|
||||
for m in self._debug:
|
||||
if msg.get('method', '').startswith(m):
|
||||
|
@ -38,7 +38,7 @@ class ChromiumOptions(object):
|
||||
self._page_load_strategy = options.get('page_load_strategy', 'normal')
|
||||
self._proxy = om.proxies.get('http', None)
|
||||
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
|
||||
for arg in self._arguments:
|
||||
@ -446,7 +446,7 @@ class ChromiumOptions(object):
|
||||
|
||||
# 设置chrome_options
|
||||
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:
|
||||
om.set_item('chrome_options', i, self.__getattribute__(f'_{i}'))
|
||||
# 设置代理
|
||||
|
@ -450,8 +450,7 @@ class ChromiumElement(DrissionElement):
|
||||
"""
|
||||
if 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(js)
|
||||
return self.run_js(f'return window.getComputedStyle(this{pseudo_ele}).getPropertyValue("{style}");')
|
||||
|
||||
def get_src(self, timeout=None, base64_to_bytes=True):
|
||||
"""返回元素src资源,base64的可转为bytes返回,其它返回str
|
||||
|
@ -10,6 +10,7 @@ from time import sleep, perf_counter
|
||||
from .._elements.chromium_element import ChromiumElement
|
||||
from .._pages.chromium_base import ChromiumBase
|
||||
from .._units.ids import FrameIds
|
||||
from .._units.rect import FrameRect
|
||||
from .._units.scroller import FrameScroller
|
||||
from .._units.setter import ChromiumFrameSetter
|
||||
from .._units.waiter import FrameWaiter
|
||||
@ -315,7 +316,7 @@ class ChromiumFrame(ChromiumBase):
|
||||
return self.frame_ele.attrs
|
||||
|
||||
@property
|
||||
def frame_size(self):
|
||||
def page_size(self):
|
||||
"""返回frame内页面尺寸,格式:(长, 高)"""
|
||||
w = self.doc_ele.run_js('return this.body.scrollWidth')
|
||||
h = self.doc_ele.run_js('return this.body.scrollHeight')
|
||||
@ -326,6 +327,11 @@ class ChromiumFrame(ChromiumBase):
|
||||
"""返回frame元素大小"""
|
||||
return self.frame_ele.size
|
||||
|
||||
@property
|
||||
def rect(self):
|
||||
"""返回获取坐标和大小的对象"""
|
||||
return FrameRect(self)
|
||||
|
||||
@property
|
||||
def active_ele(self):
|
||||
"""返回当前焦点所在元素"""
|
||||
@ -440,9 +446,9 @@ class ChromiumFrame(ChromiumBase):
|
||||
:return: 运行的结果
|
||||
"""
|
||||
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:
|
||||
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):
|
||||
"""返回上面某一级父元素,可指定层数或用查询语法定位
|
||||
|
@ -14,6 +14,7 @@ from .._elements.chromium_element import ChromiumElement
|
||||
from .._units.element_states import ElementStates
|
||||
from .._units.ids import FrameIds
|
||||
from .._units.locations import Locations
|
||||
from .._units.rect import FrameRect
|
||||
from .._units.scroller import FrameScroller
|
||||
from .._units.setter import ChromiumFrameSetter
|
||||
from .._units.waiter import FrameWaiter
|
||||
@ -88,11 +89,14 @@ class ChromiumFrame(ChromiumBase):
|
||||
def attrs(self) -> dict: ...
|
||||
|
||||
@property
|
||||
def frame_size(self) -> Tuple[int, int]: ...
|
||||
def page_size(self) -> Tuple[int, int]: ...
|
||||
|
||||
@property
|
||||
def size(self) -> Tuple[int, int]: ...
|
||||
|
||||
@property
|
||||
def rect(self) -> FrameRect: ...
|
||||
|
||||
@property
|
||||
def active_ele(self) -> ChromiumElement: ...
|
||||
|
||||
|
@ -13,8 +13,8 @@ from .._commons.browser import connect_browser
|
||||
from .._configs.chromium_options import ChromiumOptions
|
||||
from .._pages.chromium_base import ChromiumBase, Timeout
|
||||
from .._pages.chromium_tab import ChromiumTab
|
||||
from .._units.rect import TabRect
|
||||
from .._units.setter import ChromiumPageSetter
|
||||
from .._units.tab_rect import TabRect
|
||||
from .._units.waiter import PageWaiter
|
||||
from ..errors import BrowserConnectError
|
||||
|
||||
|
@ -9,8 +9,8 @@ from .._base.browser import Browser
|
||||
from .._configs.chromium_options import ChromiumOptions
|
||||
from .._pages.chromium_base import ChromiumBase
|
||||
from .._pages.chromium_tab import ChromiumTab
|
||||
from .._units.rect import TabRect
|
||||
from .._units.setter import ChromiumPageSetter
|
||||
from .._units.tab_rect import TabRect
|
||||
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 .._pages.chromium_base import ChromiumBase
|
||||
from .._pages.session_page import SessionPage
|
||||
from .._units.rect import TabRect
|
||||
from .._units.setter import TabSetter, WebPageTabSetter
|
||||
from .._units.tab_rect import TabRect
|
||||
from .._units.waiter import TabWaiter
|
||||
|
||||
|
||||
|
@ -7,7 +7,6 @@ from typing import Union, Tuple, Any, List, Optional
|
||||
|
||||
from requests import Session, Response
|
||||
|
||||
from .._units.tab_rect import ChromiumTabRect
|
||||
from .chromium_base import ChromiumBase
|
||||
from .chromium_frame import ChromiumFrame
|
||||
from .chromium_page import ChromiumPage
|
||||
@ -16,6 +15,7 @@ from .web_page import WebPage
|
||||
from .._base.browser import Browser
|
||||
from .._elements.chromium_element import ChromiumElement
|
||||
from .._elements.session_element import SessionElement
|
||||
from .._units.rect import TabRect
|
||||
from .._units.setter import TabSetter, WebPageTabSetter
|
||||
from .._units.waiter import TabWaiter
|
||||
|
||||
@ -25,7 +25,7 @@ class ChromiumTab(ChromiumBase):
|
||||
def __init__(self, page: ChromiumPage, tab_id: str = None):
|
||||
self._page: ChromiumPage = ...
|
||||
self._browser: Browser = ...
|
||||
self._rect: Optional[ChromiumTabRect] = ...
|
||||
self._rect: Optional[TabRect] = ...
|
||||
|
||||
def _d_set_runtime_settings(self) -> None: ...
|
||||
|
||||
@ -35,7 +35,7 @@ class ChromiumTab(ChromiumBase):
|
||||
def page(self) -> ChromiumPage: ...
|
||||
|
||||
@property
|
||||
def rect(self) -> ChromiumTabRect: ...
|
||||
def rect(self) -> TabRect: ...
|
||||
|
||||
@property
|
||||
def set(self) -> TabSetter: ...
|
||||
|
@ -74,3 +74,25 @@ class TabRect(object):
|
||||
def _get_window_rect(self):
|
||||
"""获取窗口范围信息"""
|
||||
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 .._pages.chromium_frame import ChromiumFrame
|
||||
from .._pages.chromium_page import ChromiumPage
|
||||
from .._pages.chromium_tab import ChromiumTab, WebPageTab
|
||||
from .._pages.web_page import WebPage
|
||||
@ -41,3 +42,17 @@ class TabRect(object):
|
||||
def _get_page_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