检索字符串增加.和#用于匹配class和id

This commit is contained in:
g1879 2020-11-19 23:56:30 +08:00
parent b087d103aa
commit 180b07e3e1

View File

@ -76,25 +76,42 @@ class DrissionElement(object):
def str_to_loc(loc: str) -> tuple:
"""处理元素查找语句 \n
查找方式属性tag name及属性文本xpathcss 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及属性文本xpathcss selectoridclass \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