From b065e7994f15f612c3cb50d520784ba0fd521d82 Mon Sep 17 00:00:00 2001 From: g1879 Date: Mon, 10 Aug 2020 22:36:20 +0800 Subject: [PATCH] =?UTF-8?q?s=E6=A8=A1=E5=BC=8Fxpath=E5=8F=AF=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E4=B8=8A=E7=BA=A7=E5=8F=8A=E5=B9=B3=E7=BA=A7=E7=9A=84?= =?UTF-8?q?=E5=85=83=E7=B4=A0=EF=BC=8C=E4=B8=94=E4=BC=98=E5=8C=96nexts,par?= =?UTF-8?q?ents,prevs=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DrissionPage/session_element.py | 28 +++++----------------------- 1 file changed, 5 insertions(+), 23 deletions(-) diff --git a/DrissionPage/session_element.py b/DrissionPage/session_element.py index e84d642..ab4e4e2 100644 --- a/DrissionPage/session_element.py +++ b/DrissionPage/session_element.py @@ -69,35 +69,21 @@ class SessionElement(DrissionElement): :param num: 第几级父元素 :return: SessionElement对象 """ - try: - return SessionElement( - Element(element=self.inner_ele.element.xpath(f'..{"/.." * (num - 1)}')[0], url=self.inner_ele.url)) - except IndexError: - return None + return self.ele(f'xpath:..{"/.." * (num - 1)}') def nexts(self, num: int = 1): """返回后面第num个兄弟元素 \n :param num: 后面第几个兄弟元素 :return: SessionElement对象 """ - try: - return SessionElement( - Element(element=self.inner_ele.element.xpath(f'./following-sibling::*[{num}]')[0], - url=self.inner_ele.url)) - except IndexError: - return None + return self.ele(f'xpath:./following-sibling::*[{num}]') def prevs(self, num: int = 1): """返回前面第num个兄弟元素 \n :param num: 前面第几个兄弟元素 :return: SessionElement对象 """ - try: - return SessionElement( - Element(element=self.inner_ele.element.xpath(f'./preceding-sibling::*[{num}]')[0], - url=self.inner_ele.url)) - except IndexError: - return None + return self.ele(f'xpath:./preceding-sibling::*[{num}]') def ele(self, loc_or_str: Union[tuple, str], mode: str = None, show_errmsg: bool = False): """返回当前元素下级符合条件的子元素,默认返回第一个 \n @@ -223,7 +209,6 @@ def execute_session_find(page_or_ele: BaseParser, if mode not in ['single', 'all']: raise ValueError("Argument mode can only be 'single' or 'all'.") loc_by, loc_str = loc - result = None try: ele = None if loc_by == 'xpath': @@ -236,13 +221,10 @@ def execute_session_find(page_or_ele: BaseParser, ele = page_or_ele.find(loc_str) if mode == 'single': - result = SessionElement(ele[0]) if ele else None + return SessionElement(ele[0]) if ele else None elif mode == 'all': - result = [SessionElement(e) for e in ele] - - return result + return [SessionElement(e) for e in ele] except: - # raise if show_errmsg: print('Element(s) not found.', loc) raise