增加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
def parent(self):
"""父级元素"""
loc = 'xpath', './..'
return self.ele(loc, timeout=1, show_errmsg=False)
return self.parents()
@property
def next(self):
"""下一个兄弟元素"""
loc = 'xpath', './following-sibling::*[1]'
return self.ele(loc, timeout=1, show_errmsg=False)
return self.nexts()
@property
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)
def attr(self, attr: str) -> str:

View File

@ -49,28 +49,43 @@ class SessionElement(DrissionElement):
return self._inner_ele.tag
@property
def parent(self) -> Union[DrissionElement, None]:
"""requests_html的Element打包了lxml的元素对象从lxml元素对象读取上下级关系后再重新打包"""
try:
return SessionElement(Element(element=self.inner_ele.element.xpath('..')[0], url=self.inner_ele.url))
except IndexError:
return None
def parent(self):
"""父级元素"""
return self.parents()
@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元素对象读取上下级关系后再重新打包"""
try:
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:
return None
@property
def prev(self) -> Union[DrissionElement, None]:
def nexts(self, num: int = 1):
"""requests_html的Element打包了lxml的元素对象从lxml元素对象读取上下级关系后再重新打包"""
try:
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:
return None