mirror of
https://gitee.com/g1879/DrissionPage.git
synced 2024-12-10 04:00:23 +08:00
DriverElement增加after、before属性、get_style_property()方法
This commit is contained in:
parent
dbdea2a00f
commit
8d49d9accb
@ -89,14 +89,6 @@ class DriverElement(DrissionElement):
|
|||||||
def xpath(self) -> str:
|
def xpath(self) -> str:
|
||||||
return self._get_ele_path('xpath')
|
return self._get_ele_path('xpath')
|
||||||
|
|
||||||
@property
|
|
||||||
def shadow_root(self):
|
|
||||||
"""返回当前元素的shadow_root元素路径"""
|
|
||||||
shadow = self.run_script('return arguments[0].shadowRoot')
|
|
||||||
if shadow:
|
|
||||||
from .shadow_root_element import ShadowRootElement
|
|
||||||
return ShadowRootElement(shadow, self)
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def parent(self):
|
def parent(self):
|
||||||
"""返回父级元素"""
|
"""返回父级元素"""
|
||||||
@ -141,10 +133,7 @@ class DriverElement(DrissionElement):
|
|||||||
:param attr: 属性名
|
:param attr: 属性名
|
||||||
:return: 属性值文本
|
:return: 属性值文本
|
||||||
"""
|
"""
|
||||||
if attr == 'text':
|
return self.text if attr == 'text' else self.inner_ele.get_attribute(attr)
|
||||||
return self.text
|
|
||||||
else:
|
|
||||||
return self.inner_ele.get_attribute(attr)
|
|
||||||
|
|
||||||
def ele(self,
|
def ele(self,
|
||||||
loc_or_str: Union[Tuple[str, str], str],
|
loc_or_str: Union[Tuple[str, str], str],
|
||||||
@ -200,6 +189,7 @@ class DriverElement(DrissionElement):
|
|||||||
loc_or_str = loc_or_str[0], f'{self.css_path}{loc_or_str[1]}'
|
loc_or_str = loc_or_str[0], f'{self.css_path}{loc_or_str[1]}'
|
||||||
|
|
||||||
timeout = timeout or self.timeout
|
timeout = timeout or self.timeout
|
||||||
|
|
||||||
return execute_driver_find(self, loc_or_str, mode, timeout)
|
return execute_driver_find(self, loc_or_str, mode, timeout)
|
||||||
|
|
||||||
def eles(self,
|
def eles(self,
|
||||||
@ -232,6 +222,46 @@ class DriverElement(DrissionElement):
|
|||||||
return self.ele(loc_or_str, mode='all', timeout=timeout)
|
return self.ele(loc_or_str, mode='all', timeout=timeout)
|
||||||
|
|
||||||
# -----------------以下为driver独占-------------------
|
# -----------------以下为driver独占-------------------
|
||||||
|
|
||||||
|
@property
|
||||||
|
def size(self) -> dict:
|
||||||
|
"""返回元素宽和高"""
|
||||||
|
return self.inner_ele.size
|
||||||
|
|
||||||
|
@property
|
||||||
|
def location(self) -> dict:
|
||||||
|
"""返回元素左上角坐标"""
|
||||||
|
return self.inner_ele.location
|
||||||
|
|
||||||
|
@property
|
||||||
|
def shadow_root(self):
|
||||||
|
"""返回当前元素的shadow_root元素对象"""
|
||||||
|
shadow = self.run_script('return arguments[0].shadowRoot')
|
||||||
|
if shadow:
|
||||||
|
from .shadow_root_element import ShadowRootElement
|
||||||
|
return ShadowRootElement(shadow, self)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def before(self) -> str:
|
||||||
|
"""返回当前元素的::before伪元素内容"""
|
||||||
|
return self.get_style_property('content', 'before')
|
||||||
|
|
||||||
|
@property
|
||||||
|
def after(self) -> str:
|
||||||
|
"""返回当前元素的::after伪元素内容"""
|
||||||
|
return self.get_style_property('content', 'after')
|
||||||
|
|
||||||
|
def get_style_property(self, style: str, pseudo_ele: str = None) -> str:
|
||||||
|
"""返回元素样式属性值
|
||||||
|
:param style: 样式属性名称
|
||||||
|
:param pseudo_ele: 伪元素名称
|
||||||
|
:return: 样式属性的值
|
||||||
|
"""
|
||||||
|
pseudo_ele = f', "::{pseudo_ele}"' if pseudo_ele else ''
|
||||||
|
r = self.run_script(f'return window.getComputedStyle(arguments[0]{pseudo_ele}).getPropertyValue("{style}");')
|
||||||
|
|
||||||
|
return None if r == 'none' else r
|
||||||
|
|
||||||
def click(self, by_js=None) -> bool:
|
def click(self, by_js=None) -> bool:
|
||||||
"""点击元素 \n
|
"""点击元素 \n
|
||||||
尝试点击10次,若都失败就改用js点击 \n
|
尝试点击10次,若都失败就改用js点击 \n
|
||||||
@ -245,10 +275,12 @@ class DriverElement(DrissionElement):
|
|||||||
return True
|
return True
|
||||||
except:
|
except:
|
||||||
sleep(0.2)
|
sleep(0.2)
|
||||||
|
|
||||||
# 若点击失败,用js方式点击
|
# 若点击失败,用js方式点击
|
||||||
if by_js is not False:
|
if by_js is not False:
|
||||||
self.run_script('arguments[0].click()')
|
self.run_script('arguments[0].click()')
|
||||||
return True
|
return True
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def input(self, value, clear: bool = True) -> bool:
|
def input(self, value, clear: bool = True) -> bool:
|
||||||
@ -303,16 +335,6 @@ class DriverElement(DrissionElement):
|
|||||||
except:
|
except:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@property
|
|
||||||
def size(self) -> dict:
|
|
||||||
"""返回元素宽和高"""
|
|
||||||
return self.inner_ele.size
|
|
||||||
|
|
||||||
@property
|
|
||||||
def location(self) -> dict:
|
|
||||||
"""返回元素左上角坐标"""
|
|
||||||
return self.inner_ele.location
|
|
||||||
|
|
||||||
def screenshot(self, path: str, filename: str = None) -> str:
|
def screenshot(self, path: str, filename: str = None) -> str:
|
||||||
"""对元素进行截图 \n
|
"""对元素进行截图 \n
|
||||||
:param path: 保存路径
|
:param path: 保存路径
|
||||||
@ -323,14 +345,17 @@ class DriverElement(DrissionElement):
|
|||||||
path = Path(path).absolute()
|
path = Path(path).absolute()
|
||||||
path.mkdir(parents=True, exist_ok=True)
|
path.mkdir(parents=True, exist_ok=True)
|
||||||
name = get_available_file_name(str(path), f'{name}.png')
|
name = get_available_file_name(str(path), f'{name}.png')
|
||||||
|
|
||||||
# 等待元素加载完成
|
# 等待元素加载完成
|
||||||
if self.tag == 'img':
|
if self.tag == 'img':
|
||||||
js = 'return arguments[0].complete && typeof arguments[0].naturalWidth != "undefined" ' \
|
js = 'return arguments[0].complete && typeof arguments[0].naturalWidth != "undefined" ' \
|
||||||
'&& arguments[0].naturalWidth > 0'
|
'&& arguments[0].naturalWidth > 0'
|
||||||
while not self.run_script(js):
|
while not self.run_script(js):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
img_path = f'{path}\\{name}'
|
img_path = f'{path}\\{name}'
|
||||||
self.inner_ele.screenshot(img_path)
|
self.inner_ele.screenshot(img_path)
|
||||||
|
|
||||||
return img_path
|
return img_path
|
||||||
|
|
||||||
def select(self, text: str) -> bool:
|
def select(self, text: str) -> bool:
|
||||||
@ -340,6 +365,7 @@ class DriverElement(DrissionElement):
|
|||||||
"""
|
"""
|
||||||
from selenium.webdriver.support.select import Select
|
from selenium.webdriver.support.select import Select
|
||||||
ele = Select(self.inner_ele)
|
ele = Select(self.inner_ele)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
ele.select_by_visible_text(text)
|
ele.select_by_visible_text(text)
|
||||||
return True
|
return True
|
||||||
|
Loading…
x
Reference in New Issue
Block a user