增加parents、nexts、prevs函数,待测试

This commit is contained in:
g1879 2020-06-04 23:28:54 +08:00
parent f1394d4cdd
commit fc65332eff
2 changed files with 43 additions and 16 deletions

View File

@ -71,19 +71,31 @@ class DriverElement(DrissionElement):
@property @property
def parent(self): def parent(self):
"""父级元素""" """父级元素"""
loc = 'xpath', './..' return self.parents()
return self.ele(loc, timeout=1, show_errmsg=False)
@property @property
def next(self): def next(self):
"""下一个兄弟元素""" """下一个兄弟元素"""
loc = 'xpath', './following-sibling::*[1]' return self.nexts()
return self.ele(loc, timeout=1, show_errmsg=False)
@property @property
def prev(self): def prev(self):
"""上一个兄弟元素""" """上一个兄弟元素"""
loc = 'xpath', './preceding-sibling::*[1]' return self.prevs()
def parents(self, num: int = 1):
"""N层父级元素"""
loc = 'xpath', f'.{"/.." * num}'
return self.ele(loc, timeout=1, show_errmsg=False)
def nexts(self, num: int = 1):
"""下N个兄弟元素"""
loc = 'xpath', f'./following-sibling::*[{num}]'
return self.ele(loc, timeout=1, show_errmsg=False)
def prevs(self, num: int = 1):
"""上N个兄弟元素"""
loc = 'xpath', f'./preceding-sibling::*[{num}]'
return self.ele(loc, timeout=1, show_errmsg=False) return self.ele(loc, timeout=1, show_errmsg=False)
def attr(self, attr: str) -> str: def attr(self, attr: str) -> str:

View File

@ -49,28 +49,43 @@ class SessionElement(DrissionElement):
return self._inner_ele.tag return self._inner_ele.tag
@property @property
def parent(self) -> Union[DrissionElement, None]: def parent(self):
"""requests_html的Element打包了lxml的元素对象从lxml元素对象读取上下级关系后再重新打包""" """父级元素"""
try: return self.parents()
return SessionElement(Element(element=self.inner_ele.element.xpath('..')[0], url=self.inner_ele.url))
except IndexError:
return None
@property @property
def next(self) -> Union[DrissionElement, None]: def next(self):
"""下一个兄弟元素"""
return self.nexts()
@property
def prev(self):
"""上一个兄弟元素"""
return self.prevs()
def parents(self, num: int = 1):
"""requests_html的Element打包了lxml的元素对象从lxml元素对象读取上下级关系后再重新打包""" """requests_html的Element打包了lxml的元素对象从lxml元素对象读取上下级关系后再重新打包"""
try: try:
return SessionElement( return SessionElement(
Element(element=self.inner_ele.element.xpath('./following-sibling::*[1]')[0], url=self.inner_ele.url)) Element(element=self.inner_ele.element.xpath(f'..{"/.." * (num - 1)}')[0], url=self.inner_ele.url))
except IndexError: except IndexError:
return None return None
@property def nexts(self, num: int = 1):
def prev(self) -> Union[DrissionElement, None]:
"""requests_html的Element打包了lxml的元素对象从lxml元素对象读取上下级关系后再重新打包""" """requests_html的Element打包了lxml的元素对象从lxml元素对象读取上下级关系后再重新打包"""
try: try:
return SessionElement( return SessionElement(
Element(element=self.inner_ele.element.xpath('./preceding-sibling::*[1]')[0], url=self.inner_ele.url)) Element(element=self.inner_ele.element.xpath(f'./following-sibling::*[{num}]')[0],
url=self.inner_ele.url))
except IndexError:
return None
def prevs(self, num: int = 1):
"""requests_html的Element打包了lxml的元素对象从lxml元素对象读取上下级关系后再重新打包"""
try:
return SessionElement(
Element(element=self.inner_ele.element.xpath(f'./preceding-sibling::*[{num}]')[0],
url=self.inner_ele.url))
except IndexError: except IndexError:
return None return None