ele()和eles()删除show_errmsg参数

This commit is contained in:
g1879 2020-11-07 15:00:16 +08:00
parent 36ebf16b2a
commit 196480c214
2 changed files with 40 additions and 44 deletions

View File

@ -108,8 +108,7 @@ class DriverPage(object):
def ele(self, def ele(self,
loc_or_ele: Union[Tuple[str, str], str, DriverElement, WebElement], loc_or_ele: Union[Tuple[str, str], str, DriverElement, WebElement],
mode: str = None, mode: str = None,
timeout: float = None, timeout: float = None) -> Union[DriverElement, List[DriverElement or str], str, None]:
show_errmsg: bool = False) -> Union[DriverElement, List[DriverElement or str], str, None]:
"""返回页面中符合条件的元素,默认返回第一个 \n """返回页面中符合条件的元素,默认返回第一个 \n
示例 \n 示例 \n
- 接收到元素对象时 \n - 接收到元素对象时 \n
@ -135,7 +134,6 @@ class DriverPage(object):
:param loc_or_ele: 元素的定位信息可以是元素对象loc元组或查询字符串 :param loc_or_ele: 元素的定位信息可以是元素对象loc元组或查询字符串
:param mode: 'single' 'all对应查找一个或全部 :param mode: 'single' 'all对应查找一个或全部
:param timeout: 查找元素超时时间 :param timeout: 查找元素超时时间
:param show_errmsg: 出现异常时是否打印信息
:return: DriverElement对象 :return: DriverElement对象
""" """
# 接收到字符串或元组获取定位loc元组 # 接收到字符串或元组获取定位loc元组
@ -163,12 +161,11 @@ class DriverPage(object):
raise ValueError('Argument loc_or_str can only be tuple, str, DriverElement, DriverElement.') raise ValueError('Argument loc_or_str can only be tuple, str, DriverElement, DriverElement.')
timeout = timeout or self.timeout timeout = timeout or self.timeout
return execute_driver_find(self, loc_or_ele, mode, show_errmsg, timeout) return execute_driver_find(self, loc_or_ele, mode, timeout)
def eles(self, def eles(self,
loc_or_str: Union[Tuple[str, str], str], loc_or_str: Union[Tuple[str, str], str],
timeout: float = None, timeout: float = None) -> List[DriverElement or str]:
show_errmsg=False) -> List[DriverElement or str]:
"""返回页面中所有符合条件的元素 \n """返回页面中所有符合条件的元素 \n
示例 \n 示例 \n
- 用loc元组查找 \n - 用loc元组查找 \n
@ -191,12 +188,11 @@ class DriverPage(object):
page.eles('css:div.ele_class') - 返回所有符合css selector的元素 \n page.eles('css:div.ele_class') - 返回所有符合css selector的元素 \n
:param loc_or_str: 元素的定位信息可以是loc元组或查询字符串 :param loc_or_str: 元素的定位信息可以是loc元组或查询字符串
:param timeout: 查找元素超时时间 :param timeout: 查找元素超时时间
:param show_errmsg: 出现异常时是否打印信息
:return: DriverElement对象组成的列表 :return: DriverElement对象组成的列表
""" """
if not isinstance(loc_or_str, (tuple, str)): if not isinstance(loc_or_str, (tuple, str)):
raise TypeError('Type of loc_or_str can only be tuple or str.') raise TypeError('Type of loc_or_str can only be tuple or str.')
return self.ele(loc_or_str, mode='all', timeout=timeout, show_errmsg=show_errmsg) return self.ele(loc_or_str, mode='all', timeout=timeout)
# ----------------以下为独有函数----------------------- # ----------------以下为独有函数-----------------------
def wait_ele(self, def wait_ele(self,

View File

@ -19,17 +19,18 @@ from .session_page import SessionPage
class Null(object): class Null(object):
"""避免IDE警告未调用超类初始化函数而引入的无用类""" """避免IDE发出未调用超类初始化函数的警告,无实际作用"""
def __init__(self): def __init__(self):
pass pass
class MixPage(Null, SessionPage, DriverPage): class MixPage(Null, SessionPage, DriverPage):
"""MixPage封装了页面操作的常用功能可在seleniumd模式和requestss模式间无缝切换。 """MixPage整合了DriverPage和SessionPage
切换的时候会自动同步cookies兼顾selenium的易用性和requests的高性能 可在seleniumd模式和requestss模式间无缝切换
获取信息功能为两种模式共有操作页面元素功能只有d模式有调用某种模式独有的功能会自动切换到该模式 切换的时候会自动同步cookies
这些功能由DriverPage和SessionPage类实现 获取信息功能为两种模式共有操作页面元素功能只有d模式有
调用某种模式独有的功能会自动切换到该模式
""" """
def __init__(self, def __init__(self,
@ -39,8 +40,8 @@ class MixPage(Null, SessionPage, DriverPage):
driver_options: Union[dict, DriverOptions] = None, driver_options: Union[dict, DriverOptions] = None,
session_options: dict = None): session_options: dict = None):
"""初始化函数 \n """初始化函数 \n
:param drission: 整合了driver和session的类传入's''d'时快速配置相应模式 :param drission: Drission对象传入's''d'可自动创建Drission对象
:param mode: 默认使用selenium的d模式 :param mode: 'd' 's'即driver模式和session模式
:param driver_options: 浏览器设置没有传入drission参数时会用这个设置新建Drission对象 :param driver_options: 浏览器设置没有传入drission参数时会用这个设置新建Drission对象
:param session_options: requests设置没有传入drission参数时会用这个设置新建Drission对象 :param session_options: requests设置没有传入drission参数时会用这个设置新建Drission对象
""" """
@ -67,27 +68,24 @@ class MixPage(Null, SessionPage, DriverPage):
def url(self) -> Union[str, None]: def url(self) -> Union[str, None]:
"""返回当前url""" """返回当前url"""
if self._mode == 'd': if self._mode == 'd':
if not self._driver or not self._drission.driver.current_url.startswith('http'): return self._drission.driver.current_url if self._driver else None
return None
else:
return self._drission.driver.current_url
elif self._mode == 's': elif self._mode == 's':
return self.session_url return self._session_url
@property @property
def session_url(self) -> str: def _session_url(self) -> str:
"""返回session访问的url""" """返回session保存的url"""
return self._response.url if self._response else None return self._response.url if self._response else None
@property @property
def mode(self) -> str: def mode(self) -> str:
"""返回当前模式 \n """返回当前模式's''d' \n
:return: 's' 'd' :return: 's' 'd'
""" """
return self._mode return self._mode
def change_mode(self, mode: str = None, go: bool = True) -> None: def change_mode(self, mode: str = None, go: bool = True) -> None:
"""切换模式,接收字符串s或d除此以外的字符串会切换为d模式 \n """切换模式,接收's''d'除此以外的字符串会切换为d模式 \n
切换时会把当前模式的cookies复制到目标模式 \n 切换时会把当前模式的cookies复制到目标模式 \n
切换后如果go是True调用相应的get函数使访问的页面同步 \n 切换后如果go是True调用相应的get函数使访问的页面同步 \n
:param mode: 模式字符串 :param mode: 模式字符串
@ -95,17 +93,22 @@ class MixPage(Null, SessionPage, DriverPage):
""" """
if mode is not None and mode.lower() == self._mode: if mode is not None and mode.lower() == self._mode:
return return
self._mode = 's' if self._mode == 'd' else 'd' self._mode = 's' if self._mode == 'd' else 'd'
if self._mode == 'd': # s转d
# s模式转d模式
if self._mode == 'd':
self._driver = True self._driver = True
self._url = None if not self._driver else self._drission.driver.current_url self._url = None if not self._driver else self._drission.driver.current_url
if self.session_url: if self._session_url:
self.cookies_to_driver(self.session_url) self.cookies_to_driver(self._session_url)
if go: if go:
self.get(self.session_url) self.get(self._session_url)
elif self._mode == 's': # d转s
# d模式转s模式
elif self._mode == 's':
self._session = True self._session = True
self._url = self.session_url self._url = self._session_url
if self._driver: if self._driver:
self.cookies_to_session() self.cookies_to_session()
if go and self._drission.driver.current_url.startswith('http'): if go and self._drission.driver.current_url.startswith('http'):
@ -158,7 +161,7 @@ class MixPage(Null, SessionPage, DriverPage):
:param url: 目标域 :param url: 目标域
:return: None :return: None
""" """
u = url or self.session_url u = url or self._session_url
self._drission.cookies_to_driver(u) self._drission.cookies_to_driver(u)
def check_page(self, by_requests: bool = False) -> Union[bool, None]: def check_page(self, by_requests: bool = False) -> Union[bool, None]:
@ -167,8 +170,10 @@ class MixPage(Null, SessionPage, DriverPage):
:param by_requests: 是否用内置response检查 :param by_requests: 是否用内置response检查
:return: bool或NoneNone代表不知道结果 :return: bool或NoneNone代表不知道结果
""" """
if self.session_url and self.session_url == self.url: if self._session_url and self._session_url == self.url:
return self._response.ok return self._response.ok
# 使用requests访问url并判断可用性
if by_requests: if by_requests:
self.cookies_to_session() self.cookies_to_session()
r = self._make_response(self.url, **{'timeout': 3})[0] r = self._make_response(self.url, **{'timeout': 3})[0]
@ -182,8 +187,7 @@ class MixPage(Null, SessionPage, DriverPage):
go_anyway: bool = False, go_anyway: bool = False,
show_errmsg: bool = False, show_errmsg: bool = False,
**kwargs) -> Union[bool, None]: **kwargs) -> Union[bool, None]:
"""用post方式跳转到url \n """用post方式跳转到url会切换到s模式 \n
post前先转换模式但不跳转
:param url: 目标url :param url: 目标url
:param data: 提交的数据 :param data: 提交的数据
:param go_anyway: 若目标url与当前url一致是否强制跳转 :param go_anyway: 若目标url与当前url一致是否强制跳转
@ -280,8 +284,7 @@ class MixPage(Null, SessionPage, DriverPage):
def ele(self, def ele(self,
loc_or_ele: Union[Tuple[str, str], str, DriverElement, SessionElement, WebElement], loc_or_ele: Union[Tuple[str, str], str, DriverElement, SessionElement, WebElement],
mode: str = None, mode: str = None,
timeout: float = None, timeout: float = None) -> Union[DriverElement, SessionElement, str]:
show_errmsg: bool = False) -> Union[DriverElement, SessionElement, str]:
"""返回页面中符合条件的元素,默认返回第一个 \n """返回页面中符合条件的元素,默认返回第一个 \n
示例 \n 示例 \n
- 接收到元素对象时 \n - 接收到元素对象时 \n
@ -307,19 +310,17 @@ class MixPage(Null, SessionPage, DriverPage):
:param loc_or_ele: 元素的定位信息可以是元素对象loc元组或查询字符串 :param loc_or_ele: 元素的定位信息可以是元素对象loc元组或查询字符串
:param mode: 'single' 'all对应查找一个或全部 :param mode: 'single' 'all对应查找一个或全部
:param timeout: 查找元素超时时间d模式专用 :param timeout: 查找元素超时时间d模式专用
:param show_errmsg: 出现异常时是否打印信息
:return: 元素对象d模式为DriverElements模式为SessionElement :return: 元素对象d模式为DriverElements模式为SessionElement
""" """
if self._mode == 's': if self._mode == 's':
return super().ele(loc_or_ele, mode=mode, show_errmsg=show_errmsg) return super().ele(loc_or_ele, mode=mode)
elif self._mode == 'd': elif self._mode == 'd':
timeout = timeout or self.timeout timeout = timeout or self.timeout
return super(SessionPage, self).ele(loc_or_ele, mode=mode, timeout=timeout, show_errmsg=show_errmsg) return super(SessionPage, self).ele(loc_or_ele, mode=mode, timeout=timeout)
def eles(self, def eles(self,
loc_or_str: Union[Tuple[str, str], str], loc_or_str: Union[Tuple[str, str], str],
timeout: float = None, timeout: float = None) -> Union[List[DriverElement or str], List[SessionElement or str]]:
show_errmsg: bool = False) -> Union[List[DriverElement or str], List[SessionElement or str]]:
"""返回页面中所有符合条件的元素 \n """返回页面中所有符合条件的元素 \n
示例 \n 示例 \n
- 用loc元组查找 \n - 用loc元组查找 \n
@ -342,13 +343,12 @@ class MixPage(Null, SessionPage, DriverPage):
page.eles('css:div.ele_class') - 返回所有符合css selector的元素 \n page.eles('css:div.ele_class') - 返回所有符合css selector的元素 \n
:param loc_or_str: 元素的定位信息可以是loc元组或查询字符串 :param loc_or_str: 元素的定位信息可以是loc元组或查询字符串
:param timeout: 查找元素超时时间d模式专用 :param timeout: 查找元素超时时间d模式专用
:param show_errmsg: 出现异常时是否打印信息
:return: 元素对象组成的列表d模式下由DriverElement组成s模式下由SessionElement组成 :return: 元素对象组成的列表d模式下由DriverElement组成s模式下由SessionElement组成
""" """
if self._mode == 's': if self._mode == 's':
return super().eles(loc_or_str, show_errmsg) return super().eles(loc_or_str)
elif self._mode == 'd': elif self._mode == 'd':
return super(SessionPage, self).eles(loc_or_str, timeout=timeout, show_errmsg=show_errmsg) return super(SessionPage, self).eles(loc_or_str, timeout=timeout)
@property @property
def html(self) -> str: def html(self) -> str: