From a4eb43b48bd691fdf268823405ab0cf9093c2488 Mon Sep 17 00:00:00 2001 From: g1879 Date: Thu, 16 Dec 2021 10:30:25 +0800 Subject: [PATCH] =?UTF-8?q?@@=E8=AF=AD=E6=B3=95=E5=A2=9E=E5=8A=A0-?= =?UTF-8?q?=EF=BC=8C=E5=8F=AF=E5=BF=BD=E7=95=A5=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DrissionPage/common.py | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/DrissionPage/common.py b/DrissionPage/common.py index 6ccaa92..0aaee57 100644 --- a/DrissionPage/common.py +++ b/DrissionPage/common.py @@ -204,18 +204,24 @@ def _make_multi_xpath_str(tag: str, text: str) -> str: arg_str = '' len_r = len(r) - if not r[0]: + if not r[0]: # 不查询任何属性 arg_str = 'not(@*)' - elif len_r != 3: - arg_str = 'normalize-space(text())' if r[0] in ('text()', 'tx()') else f'@{r[0]}' + else: + r[0], ignore = (r[0][1:], True) if r[0][0] == '-' else (r[0], None) # 是否去除某个属性 - elif len_r == 3: - arg = '.' if r[0] in ('text()', 'tx()') else f'@{r[0]}' - if r[1] == '=': - arg_str = f'{arg}={_make_search_str(r[2])}' - else: - arg_str = f'contains({arg},{_make_search_str(r[2])})' + if len_r != 3: # 只有属性名没有属性内容,查询是否存在该属性 + arg_str = 'normalize-space(text())' if r[0] in ('text()', 'tx()') else f'@{r[0]}' + + elif len_r == 3: # 属性名和内容都有 + arg = '.' if r[0] in ('text()', 'tx()') else f'@{r[0]}' + if r[1] == '=': + arg_str = f'{arg}={_make_search_str(r[2])}' + else: + arg_str = f'contains({arg},{_make_search_str(r[2])})' + + if arg_str and ignore: + arg_str = f'not({arg_str})' if arg_str: arg_list.append(arg_str)