From 84f18bbd5020a8974c4a5c1eb96acbc1d410b1dd Mon Sep 17 00:00:00 2001 From: g1879 Date: Tue, 8 Dec 2020 09:25:42 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=85=83=E7=B4=A0=E7=9A=84xp?= =?UTF-8?q?ath=E5=92=8Ccss=5Fpath=E5=B1=9E=E6=80=A7=E6=97=B6=E5=BF=BD?= =?UTF-8?q?=E7=95=A5id=EF=BC=8C=E9=81=BF=E5=85=8D=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E4=B8=8A=E6=9C=89=E9=87=8D=E5=A4=8Did=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E4=B8=8D=E5=87=86=E7=A1=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DrissionPage/driver_element.py | 9 +++------ DrissionPage/session_element.py | 22 +++++++++++----------- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/DrissionPage/driver_element.py b/DrissionPage/driver_element.py index 4578d03..68c48b6 100644 --- a/DrissionPage/driver_element.py +++ b/DrissionPage/driver_element.py @@ -487,7 +487,7 @@ class DriverElement(DrissionElement): """返获取css路径或xpath路径""" if mode == 'xpath': txt1 = 'var tag = el.nodeName.toLowerCase();' - txt2 = '''return '//' + tag + '[@id="' + el.id + '"]' + path;''' + # txt2 = '''return '//' + tag + '[@id="' + el.id + '"]' + path;''' txt3 = ''' && sib.nodeName.toLowerCase()==tag''' txt4 = ''' if(nth>1){path = '/' + tag + '[' + nth + ']' + path;} @@ -495,7 +495,7 @@ class DriverElement(DrissionElement): txt5 = '''return path;''' elif mode == 'css': txt1 = '' - txt2 = '''return '#' + el.id + path;''' + # txt2 = '''return '#' + el.id + path;''' txt3 = '' txt4 = '''path = '>' + ":nth-child(" + nth + ")" + path;''' txt5 = '''return path.substr(1);''' @@ -508,16 +508,13 @@ class DriverElement(DrissionElement): var path = ''; while (el.nodeType === Node.ELEMENT_NODE) { ''' + txt1 + ''' - if (el.id) { - ''' + txt2 + ''' - } else { var sib = el, nth = 0; while (sib) { if(sib.nodeType === Node.ELEMENT_NODE''' + txt3 + '''){nth += 1;} sib = sib.previousSibling; } ''' + txt4 + ''' - } + el = el.parentNode; } ''' + txt5 + ''' diff --git a/DrissionPage/session_element.py b/DrissionPage/session_element.py index 660c33b..47b3fe5 100644 --- a/DrissionPage/session_element.py +++ b/DrissionPage/session_element.py @@ -284,20 +284,20 @@ class SessionElement(DrissionElement): ele = self while ele: - ele_id = ele.attr('id') + # ele_id = ele.attr('id') - if ele_id: - return f'#{ele_id}{path_str}' if mode == 'css' else f'//{ele.tag}[@id="{ele_id}"]{path_str}' + # if ele_id: + # return f'#{ele_id}{path_str}' if mode == 'css' else f'//{ele.tag}[@id="{ele_id}"]{path_str}' + # else: + + if mode == 'css': + brothers = len(ele.eles(f'xpath:./preceding-sibling::*')) + path_str = f'>:nth-child({brothers + 1}){path_str}' else: + brothers = len(ele.eles(f'xpath:./preceding-sibling::{ele.tag}')) + path_str = f'/{ele.tag}[{brothers + 1}]{path_str}' if brothers > 0 else f'/{ele.tag}{path_str}' - if mode == 'css': - brothers = len(ele.eles(f'xpath:./preceding-sibling::*')) - path_str = f'>:nth-child({brothers + 1}){path_str}' - else: - brothers = len(ele.eles(f'xpath:./preceding-sibling::{ele.tag}')) - path_str = f'/{ele.tag}[{brothers + 1}]{path_str}' if brothers > 0 else f'/{ele.tag}{path_str}' - - ele = ele.parent + ele = ele.parent return path_str[1:] if mode == 'css' else path_str