From 180b07e3e167f08921d7d8aeb1e2fcd32b725883 Mon Sep 17 00:00:00 2001 From: g1879 Date: Thu, 19 Nov 2020 23:56:30 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A3=80=E7=B4=A2=E5=AD=97=E7=AC=A6=E4=B8=B2?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0.=E5=92=8C#=E7=94=A8=E4=BA=8E=E5=8C=B9?= =?UTF-8?q?=E9=85=8Dclass=E5=92=8Cid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DrissionPage/common.py | 52 ++++++++++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 17 deletions(-) diff --git a/DrissionPage/common.py b/DrissionPage/common.py index eef3eca..136baf3 100644 --- a/DrissionPage/common.py +++ b/DrissionPage/common.py @@ -76,25 +76,42 @@ class DrissionElement(object): def str_to_loc(loc: str) -> tuple: - """处理元素查找语句 \n - 查找方式:属性、tag name及属性、文本、xpath、css selector \n - =表示精确匹配,:表示模糊匹配,无控制字符串时默认搜索该字符串 \n - 示例: \n - @class:ele_class - class含有ele_class的元素 \n - @class=ele_class - class等于ele_class的元素 \n - @class - 带class属性的元素 \n - tag:div - div元素 \n - tag:div@class:ele_class - class含有ele_class的div元素 \n - tag:div@class=ele_class - class等于ele_class的div元素 \n - tag:div@text():search_text - 文本含有search_text的div元素 \n - tag:div@text()=search_text - 文本等于search_text的div元素 \n - text:search_text - 文本含有search_text的元素 \n - text=search_text - 文本等于search_text的元素 \n - xpath://div[@class="ele_class"] \n - css:div.ele_class \n + """处理元素查找语句 \n + 查找方式:属性、tag name及属性、文本、xpath、css selector、id、class \n + @表示属性,.表示class,#表示id,=表示精确匹配,:表示模糊匹配,无控制字符串时默认搜索该字符串 \n + 示例: \n + .ele_class - class等于ele_class的元素 \n + .:ele_class - class含有ele_class的元素 \n + #ele_id - id等于ele_id的元素 \n + #:ele_id - id含有ele_id的元素 \n + @class:ele_class - class含有ele_class的元素 \n + @class=ele_class - class等于ele_class的元素 \n + @class - 带class属性的元素 \n + tag:div - div元素 \n + tag:div@class:ele_class - class含有ele_class的div元素 \n + tag:div@class=ele_class - class等于ele_class的div元素 \n + tag:div@text():search_text - 文本含有search_text的div元素 \n + tag:div@text()=search_text - 文本等于search_text的div元素 \n + text:search_text - 文本含有search_text的元素 \n + text=search_text - 文本等于search_text的元素 \n + xpath://div[@class="ele_class"] - 用xpath查找 \n + css:div.ele_class - 用css selector查找 """ loc_by = 'xpath' + # .和#替换为class和id查找 + if loc.startswith('.'): + if loc.startswith(('.=', '.:',)): + loc.replace('.', '@class', 1) + else: + loc.replace('.', '@class=', 1) + + if loc.startswith('#'): + if loc.startswith(('#=', '#:',)): + loc.replace('#', '@id', 1) + else: + loc.replace('#', '@id=', 1) + # 根据属性查找 if loc.startswith('@'): r = re_SPLIT(r'([:=])', loc[1:], maxsplit=1) @@ -166,7 +183,7 @@ def _make_xpath_str(tag: str, arg: str, val: str, mode: str = 'fuzzy') -> str: def _make_search_str(search_str: str) -> str: - """将"转义,不知何故不能直接用\ \n + """将"转义,不知何故不能直接用\来转义 \n :param search_str: 查询字符串 :return: 把"转义后的字符串 """ @@ -184,6 +201,7 @@ def _make_search_str(search_str: str) -> str: def format_html(text: str) -> str: + """处理html编码字符""" return unescape(text).replace('\xa0', ' ') if text else text