diff --git a/DrissionPage/driver_element.py b/DrissionPage/driver_element.py index b3a79d1..1090ac4 100644 --- a/DrissionPage/driver_element.py +++ b/DrissionPage/driver_element.py @@ -177,7 +177,13 @@ class DriverElement(DrissionElement): node_txt = 'node()' else: raise ValueError("Argument mode can only be 'node' or 'ele'.") - return self.ele(f'xpath:./following-sibling::{node_txt}[{num}]', timeout=0.1, show_errmsg=False) + + e = self.ele(f'xpath:./following-sibling::{node_txt}[{num}]', timeout=0.1, show_errmsg=False) + while e == '\n': + num += 1 + e = self.ele(f'xpath:./following-sibling::{node_txt}[{num}]', timeout=0.1, show_errmsg=False) + + return e def prevs(self, num: int = 1, mode: str = 'ele'): """返回前面第num个兄弟节点或元素 \n @@ -191,7 +197,13 @@ class DriverElement(DrissionElement): node_txt = 'node()' else: raise ValueError("Argument mode can only be 'node' or 'ele'.") - return self.ele(f'xpath:./preceding-sibling::{node_txt}[{num}]', timeout=0.01, show_errmsg=False) + + e = self.ele(f'xpath:./preceding-sibling::{node_txt}[{num}]', timeout=0.1, show_errmsg=False) + while e == '\n': + num += 1 + e = self.ele(f'xpath:./preceding-sibling::{node_txt}[{num}]', timeout=0.1, show_errmsg=False) + + return e def attr(self, attr: str) -> str: """获取属性值 \n @@ -585,4 +597,5 @@ class ElementsByXpath(object): elif self.mode == 'all': e = get_nodes(the_node, xpath_txt=self.xpath) + e = filter(lambda x: x != '\n', e) # 去除元素间换行符 return list(map(lambda x: DriverElement(x, self.timeout) if isinstance(x, WebElement) else x, e)) diff --git a/DrissionPage/session_element.py b/DrissionPage/session_element.py index 66d4421..8c4b8ec 100644 --- a/DrissionPage/session_element.py +++ b/DrissionPage/session_element.py @@ -111,6 +111,7 @@ class SessionElement(DrissionElement): :param num: 后面第几个兄弟元素 :return: SessionElement对象 """ + # TODO: 增加获取node return self.ele(f'xpath:./following-sibling::*[{num}]') def prevs(self, num: int = 1): @@ -118,6 +119,7 @@ class SessionElement(DrissionElement): :param num: 前面第几个兄弟元素 :return: SessionElement对象 """ + # TODO: 增加获取node return self.ele(f'xpath:./preceding-sibling::*[{num}]') def ele(self, loc_or_str: Union[Tuple[str, str], str], mode: str = None, show_errmsg: bool = False): @@ -274,6 +276,7 @@ def execute_session_find(page_or_ele: BaseParser, ele = ele[0] if ele else None return SessionElement(ele) if isinstance(ele, Element) else ele elif mode == 'all': + ele = filter(lambda x: x != '\n', ele) # 去除元素间换行符 return [SessionElement(e) if isinstance(e, Element) else e for e in ele] except: if show_errmsg: