From 8f4b925716145b33da2946d16c5bc225a521c697 Mon Sep 17 00:00:00 2001 From: g1879 Date: Sun, 22 Nov 2020 21:22:48 +0800 Subject: [PATCH] =?UTF-8?q?shadowRootElement=E7=9A=84ele()=E5=92=8Celes()?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0.=E5=92=8C#=E6=9F=A5=E6=89=BE=E6=96=B9?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DrissionPage/shadow_root_element.py | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/DrissionPage/shadow_root_element.py b/DrissionPage/shadow_root_element.py index e9cf7a6..ee61775 100644 --- a/DrissionPage/shadow_root_element.py +++ b/DrissionPage/shadow_root_element.py @@ -74,13 +74,17 @@ class ShadowRootElement(DrissionElement): loc_or_str: Union[Tuple[str, str], str], mode: str = 'single', timeout: float = None): - """返回当前元素下级符合条件的子元素,默认返回第一个 \n + """返回当前元素下级符合条件的子元素,默认返回第一个 \n 示例: \n - 用loc元组查找: \n ele.ele((By.CLASS_NAME, 'ele_class')) - 返回第一个class为ele_class的子元素 \n - 用查询字符串查找: \n - 查找方式:属性、tag name和属性、文本、css selector \n - 其中,@表示属性,=表示精确匹配,:表示模糊匹配,无控制字符串时默认搜索该字符串 \n + 查找方式:属性、tag name和属性、文本、css selector \n + @表示属性,.表示class,#表示id,=表示精确匹配,:表示模糊匹配,无控制字符串时默认搜索该字符串 \n + ele.ele('.ele_class') - 返回所有 class 为 ele_class 的子元素 \n + ele.ele('.:ele_class') - 返回所有 class 中含有 ele_class 的子元素 \n + ele.ele('#ele_id') - 返回所有 id 为 ele_id 的子元素 \n + ele.ele('#:ele_id') - 返回所有 id 中含有 ele_id 的子元素 \n ele.ele('@class:ele_class') - 返回第一个class含有ele_class的子元素 \n ele.ele('@name=ele_name') - 返回第一个name等于ele_name的子元素 \n ele.ele('@placeholder') - 返回第一个带placeholder属性的子元素 \n @@ -122,7 +126,11 @@ class ShadowRootElement(DrissionElement): ele.eles((By.CLASS_NAME, 'ele_class')) - 返回所有class为ele_class的子元素 \n - 用查询字符串查找: \n 查找方式:属性、tag name和属性、文本、css selector \n - 其中,@表示属性,=表示精确匹配,:表示模糊匹配,无控制字符串时默认搜索该字符串 \n + @表示属性,.表示class,#表示id,=表示精确匹配,:表示模糊匹配,无控制字符串时默认搜索该字符串 \n + ele.eles('.ele_class') - 返回所有 class 为 ele_class 的子元素 \n + ele.eles('.:ele_class') - 返回所有 class 中含有 ele_class 的子元素 \n + ele.eles('#ele_id') - 返回所有 id 为 ele_id 的子元素 \n + ele.eles('#:ele_id') - 返回所有 id 中含有 ele_id 的子元素 \n ele.eles('@class:ele_class') - 返回所有class含有ele_class的子元素 \n ele.eles('@name=ele_name') - 返回所有name等于ele_name的子元素 \n ele.eles('@placeholder') - 返回所有带placeholder属性的子元素 \n @@ -221,6 +229,19 @@ def str_to_css_loc(loc: str) -> tuple: """ loc_by = 'css selector' + # .和#替换为class和id查找 + if loc.startswith('.'): + if loc.startswith(('.=', '.:',)): + loc = loc.replace('.', '@class', 1) + else: + loc = loc.replace('.', '@class=', 1) + + if loc.startswith('#'): + if loc.startswith(('#=', '#:',)): + loc = loc.replace('#', '@id', 1) + else: + loc = loc.replace('#', '@id=', 1) + # 根据属性查找 if loc.startswith('@'): r = re_SPLIT(r'([:=])', loc[1:], maxsplit=1)