From 35453ce2730e0aafcd6b8da4fc371ebc9e7cbc20 Mon Sep 17 00:00:00 2001 From: g1879 Date: Tue, 21 Dec 2021 23:25:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0after(),before(),afters(),bef?= =?UTF-8?q?ore()=E5=AE=9A=E4=BD=8D=E6=96=B9=E6=B3=95=EF=BC=8C=E5=8E=9F?= =?UTF-8?q?=E6=9D=A5after=E5=92=8Cbefore=E6=94=B9=E4=B8=BApseudo=5Fafter?= =?UTF-8?q?=E5=92=8Cpseudo=5Fbefore?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DrissionPage/base.py | 56 +++++++++++++++++++++++++++++----- DrissionPage/driver_element.py | 4 +-- 2 files changed, 50 insertions(+), 10 deletions(-) diff --git a/DrissionPage/base.py b/DrissionPage/base.py index 7bf0ac9..822934d 100644 --- a/DrissionPage/base.py +++ b/DrissionPage/base.py @@ -138,37 +138,77 @@ class DrissionElement(BaseElement): return self.ele(loc, timeout=0) - def prev(self, index: int = 1, filter_loc: Union[tuple, str] = ''): + def prev(self, index: int = 1, filter_loc: Union[tuple, str] = '', timeout: float = 0): """返回前面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 \n :param index: 前面第几个查询结果元素 :param filter_loc: 用于筛选元素的查询语法 + :param timeout: 查找元素的超时时间 :return: 兄弟元素 """ - nodes = self._get_brothers(index=index, filter_loc=filter_loc, direction='preceding') + nodes = self._get_brothers(index, filter_loc, 'preceding', timeout=timeout) return nodes[-1] if nodes else None - def next(self, index: int = 1, filter_loc: Union[tuple, str] = ''): + def next(self, index: int = 1, filter_loc: Union[tuple, str] = '', timeout: float = 0): """返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 \n :param index: 后面第几个查询结果元素 :param filter_loc: 用于筛选元素的查询语法 + :param timeout: 查找元素的超时时间 :return: 兄弟元素 """ - nodes = self._get_brothers(index=index, filter_loc=filter_loc, direction='following') + nodes = self._get_brothers(index, filter_loc, 'following', timeout=timeout) return nodes[0] if nodes else None - def nexts(self, filter_loc: Union[tuple, str] = ''): + def nexts(self, filter_loc: Union[tuple, str] = '', timeout: float = 0): """返回后面全部兄弟元素或节点组成的列表,可用查询语法筛选 \n :param filter_loc: 用于筛选元素的查询语法 + :param timeout: 查找元素的超时时间 :return: SessionElement对象 """ - return self._get_brothers(filter_loc=filter_loc, direction='following') + return self._get_brothers(filter_loc=filter_loc, direction='following', timeout=timeout) - def prevs(self, filter_loc: Union[tuple, str] = ''): + def prevs(self, filter_loc: Union[tuple, str] = '', timeout: float = 0): """返回前面全部兄弟元素或节点组成的列表,可用查询语法筛选 \n :param filter_loc: 用于筛选元素的查询语法 + :param timeout: 查找元素的超时时间 :return: SessionElement对象 """ - return self._get_brothers(filter_loc=filter_loc, direction='preceding') + return self._get_brothers(filter_loc=filter_loc, direction='preceding', timeout=timeout) + + def before(self, index: int = 1, filter_loc: Union[tuple, str] = '', timeout: float = None): + """返回前面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 \n + :param index: 前面第几个查询结果元素 + :param filter_loc: 用于筛选元素的查询语法 + :param timeout: 查找元素的超时时间 + :return: 兄弟元素 + """ + nodes = self._get_brothers(index, filter_loc, 'preceding', False, timeout=timeout) + return nodes[-1] if nodes else None + + def after(self, index: int = 1, filter_loc: Union[tuple, str] = '', timeout: float = None): + """返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 \n + :param index: 后面第几个查询结果元素 + :param filter_loc: 用于筛选元素的查询语法 + :param timeout: 查找元素的超时时间 + :return: 兄弟元素 + """ + nodes = self._get_brothers(index, filter_loc, 'following', False, timeout) + return nodes[0] if nodes else None + + def befores(self, filter_loc: Union[tuple, str] = '', timeout: float = None): + """返回后面全部兄弟元素或节点组成的列表,可用查询语法筛选 \n + :param filter_loc: 用于筛选元素的查询语法 + :param timeout: 查找元素的超时时间 + :return: SessionElement对象 + """ + return self._get_brothers(filter_loc=filter_loc, direction='following', brother=False, timeout=timeout) + + def afters(self, filter_loc: Union[tuple, str] = '', timeout: float = None): + """返回前面全部兄弟元素或节点组成的列表,可用查询语法筛选 \n + :param filter_loc: 用于筛选元素的查询语法 + :param timeout: 查找元素的超时时间 + :return: SessionElement对象 + """ + return self._get_brothers(filter_loc=filter_loc, direction='preceding', brother=False, timeout=timeout) def _get_brothers(self, index: int = None, diff --git a/DrissionPage/driver_element.py b/DrissionPage/driver_element.py index 9be1628..5029204 100644 --- a/DrissionPage/driver_element.py +++ b/DrissionPage/driver_element.py @@ -220,12 +220,12 @@ class DriverElement(DrissionElement): return self.shadow_root @property - def before(self) -> str: + def pseudo_before(self) -> str: """返回当前元素的::before伪元素内容""" return self.style('content', 'before') @property - def after(self) -> str: + def pseudo_after(self) -> str: """返回当前元素的::after伪元素内容""" return self.style('content', 'after')