mirror of
https://gitee.com/g1879/DrissionPage.git
synced 2024-12-10 04:00:23 +08:00
增加对shadow-dom支持,未完成
This commit is contained in:
parent
56683468a6
commit
dc47dfcecc
@ -126,7 +126,11 @@ class DriverElement(DrissionElement):
|
|||||||
@property
|
@property
|
||||||
def shadow_root(self):
|
def shadow_root(self):
|
||||||
e = self.run_script('return arguments[0].shadowRoot')
|
e = self.run_script('return arguments[0].shadowRoot')
|
||||||
return ShadowRootElement(e, self) if e else None
|
if e:
|
||||||
|
from shadow_root_element import ShadowRootElement
|
||||||
|
return ShadowRootElement(e, self)
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def parent(self):
|
def parent(self):
|
||||||
@ -450,37 +454,6 @@ class DriverElement(DrissionElement):
|
|||||||
ActionChains(self._driver).move_to_element(self.inner_ele).perform()
|
ActionChains(self._driver).move_to_element(self.inner_ele).perform()
|
||||||
|
|
||||||
|
|
||||||
class ShadowRootElement(DrissionElement):
|
|
||||||
def __init__(self, inner_ele: WebElement, parent_ele: DriverElement):
|
|
||||||
super().__init__(inner_ele)
|
|
||||||
self.parent_ele = parent_ele
|
|
||||||
|
|
||||||
def ele(self, loc: Union[tuple, str], mode: str = None, show_errmsg: bool = True):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def eles(self, loc: Union[tuple, str], show_errmsg: bool = True):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def attr(self, attr: str):
|
|
||||||
return self.html if attr == 'innerHTML' else None
|
|
||||||
|
|
||||||
def run_script(self, script: str, *args) -> Any:
|
|
||||||
"""执行js代码,传入自己为第一个参数 \n
|
|
||||||
:param script: js文本
|
|
||||||
:param args: 传入的参数
|
|
||||||
:return: js执行结果
|
|
||||||
"""
|
|
||||||
return self.inner_ele.parent.execute_script(script, self.inner_ele, *args)
|
|
||||||
|
|
||||||
@property
|
|
||||||
def html(self):
|
|
||||||
return unescape(self.attr('innerHTML')).replace('\xa0', ' ')
|
|
||||||
|
|
||||||
@property
|
|
||||||
def parent(self) -> DriverElement:
|
|
||||||
return self.parent_ele
|
|
||||||
|
|
||||||
|
|
||||||
def execute_driver_find(page_or_ele: Union[WebElement, WebDriver],
|
def execute_driver_find(page_or_ele: Union[WebElement, WebDriver],
|
||||||
loc: tuple,
|
loc: tuple,
|
||||||
mode: str = 'single',
|
mode: str = 'single',
|
||||||
|
54
DrissionPage/shadow_root_element.py
Normal file
54
DrissionPage/shadow_root_element.py
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding:utf-8 -*-
|
||||||
|
from html import unescape
|
||||||
|
from typing import Union, Any
|
||||||
|
|
||||||
|
from selenium.webdriver.remote.webelement import WebElement
|
||||||
|
|
||||||
|
from common import DrissionElement
|
||||||
|
|
||||||
|
|
||||||
|
# from driver_element import DriverElement
|
||||||
|
|
||||||
|
|
||||||
|
class ShadowRootElement(DrissionElement):
|
||||||
|
def __init__(self, inner_ele: WebElement, parent_ele):
|
||||||
|
super().__init__(inner_ele)
|
||||||
|
self.parent_ele = parent_ele
|
||||||
|
|
||||||
|
def ele(self, loc: Union[tuple, str], mode: str = None, show_errmsg: bool = True):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def eles(self, loc: Union[tuple, str], show_errmsg: bool = True):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def attr(self, attr: str):
|
||||||
|
return self.html if attr == 'innerHTML' else None
|
||||||
|
|
||||||
|
def run_script(self, script: str, *args) -> Any:
|
||||||
|
"""执行js代码,传入自己为第一个参数 \n
|
||||||
|
:param script: js文本
|
||||||
|
:param args: 传入的参数
|
||||||
|
:return: js执行结果
|
||||||
|
"""
|
||||||
|
return self.inner_ele.parent.execute_script(script, self.inner_ele, *args)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def html(self):
|
||||||
|
return unescape(self.attr('innerHTML')).replace('\xa0', ' ')
|
||||||
|
|
||||||
|
@property
|
||||||
|
def parent(self):
|
||||||
|
return self.parent_ele
|
||||||
|
|
||||||
|
def is_enabled(self) -> bool:
|
||||||
|
"""是否可用"""
|
||||||
|
return self.inner_ele.is_enabled()
|
||||||
|
|
||||||
|
def is_valid(self) -> bool:
|
||||||
|
"""用于判断元素是否还能用,应对页面跳转元素不能用的情况"""
|
||||||
|
try:
|
||||||
|
self.is_enabled()
|
||||||
|
return True
|
||||||
|
except:
|
||||||
|
return False
|
Loading…
x
Reference in New Issue
Block a user