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
|
||||
def shadow_root(self):
|
||||
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
|
||||
def parent(self):
|
||||
@ -450,37 +454,6 @@ class DriverElement(DrissionElement):
|
||||
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],
|
||||
loc: tuple,
|
||||
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