mirror of
https://gitee.com/g1879/DrissionPage.git
synced 2024-12-10 04:00:23 +08:00
修改注释
This commit is contained in:
parent
17ae5e83b1
commit
1b44dea669
@ -23,7 +23,7 @@ class ActionChains:
|
|||||||
self.curr_y = 0
|
self.curr_y = 0
|
||||||
|
|
||||||
def move_to(self, ele_or_loc, offset_x=0, offset_y=0):
|
def move_to(self, ele_or_loc, offset_x=0, offset_y=0):
|
||||||
"""鼠标移动到元素中点,或页面上的某个绝对坐标。可设置偏移量 \n
|
"""鼠标移动到元素中点,或页面上的某个绝对坐标。可设置偏移量
|
||||||
当带偏移量时,偏移量相对于元素左上角坐标
|
当带偏移量时,偏移量相对于元素左上角坐标
|
||||||
:param ele_or_loc: 元素对象、绝对坐标或文本定位符,坐标为tuple(int, int)形式
|
:param ele_or_loc: 元素对象、绝对坐标或文本定位符,坐标为tuple(int, int)形式
|
||||||
:param offset_x: 偏移量x
|
:param offset_x: 偏移量x
|
||||||
@ -64,7 +64,7 @@ class ActionChains:
|
|||||||
return self
|
return self
|
||||||
|
|
||||||
def move(self, offset_x=0, offset_y=0):
|
def move(self, offset_x=0, offset_y=0):
|
||||||
"""鼠标相对当前位置移动若干位置 \n
|
"""鼠标相对当前位置移动若干位置
|
||||||
:param offset_x: 偏移量x
|
:param offset_x: 偏移量x
|
||||||
:param offset_y: 偏移量y
|
:param offset_y: 偏移量y
|
||||||
:return: self
|
:return: self
|
||||||
@ -75,7 +75,7 @@ class ActionChains:
|
|||||||
return self
|
return self
|
||||||
|
|
||||||
def click(self, on_ele=None):
|
def click(self, on_ele=None):
|
||||||
"""点击鼠标左键,可先移动到元素上 \n
|
"""点击鼠标左键,可先移动到元素上
|
||||||
:param on_ele: ChromiumElement元素或文本定位符
|
:param on_ele: ChromiumElement元素或文本定位符
|
||||||
:return: self
|
:return: self
|
||||||
"""
|
"""
|
||||||
@ -85,7 +85,7 @@ class ActionChains:
|
|||||||
return self
|
return self
|
||||||
|
|
||||||
def r_click(self, on_ele=None):
|
def r_click(self, on_ele=None):
|
||||||
"""点击鼠标右键,可先移动到元素上 \n
|
"""点击鼠标右键,可先移动到元素上
|
||||||
:param on_ele: ChromiumElement元素或文本定位符
|
:param on_ele: ChromiumElement元素或文本定位符
|
||||||
:return: self
|
:return: self
|
||||||
"""
|
"""
|
||||||
@ -95,7 +95,7 @@ class ActionChains:
|
|||||||
return self
|
return self
|
||||||
|
|
||||||
def m_click(self, on_ele=None):
|
def m_click(self, on_ele=None):
|
||||||
"""点击鼠标中键,可先移动到元素上 \n
|
"""点击鼠标中键,可先移动到元素上
|
||||||
:param on_ele: ChromiumElement元素或文本定位符
|
:param on_ele: ChromiumElement元素或文本定位符
|
||||||
:return: self
|
:return: self
|
||||||
"""
|
"""
|
||||||
@ -105,7 +105,7 @@ class ActionChains:
|
|||||||
return self
|
return self
|
||||||
|
|
||||||
def hold(self, on_ele=None):
|
def hold(self, on_ele=None):
|
||||||
"""按住鼠标左键,可先移动到元素上 \n
|
"""按住鼠标左键,可先移动到元素上
|
||||||
:param on_ele: ChromiumElement元素或文本定位符
|
:param on_ele: ChromiumElement元素或文本定位符
|
||||||
:return: self
|
:return: self
|
||||||
"""
|
"""
|
||||||
@ -115,7 +115,7 @@ class ActionChains:
|
|||||||
return self
|
return self
|
||||||
|
|
||||||
def release(self, on_ele=None):
|
def release(self, on_ele=None):
|
||||||
"""释放鼠标左键,可先移动到元素上 \n
|
"""释放鼠标左键,可先移动到元素上
|
||||||
:param on_ele: ChromiumElement元素或文本定位符
|
:param on_ele: ChromiumElement元素或文本定位符
|
||||||
:return: self
|
:return: self
|
||||||
"""
|
"""
|
||||||
@ -125,7 +125,7 @@ class ActionChains:
|
|||||||
return self
|
return self
|
||||||
|
|
||||||
def r_hold(self, on_ele=None):
|
def r_hold(self, on_ele=None):
|
||||||
"""按住鼠标右键,可先移动到元素上 \n
|
"""按住鼠标右键,可先移动到元素上
|
||||||
:param on_ele: ChromiumElement元素或文本定位符
|
:param on_ele: ChromiumElement元素或文本定位符
|
||||||
:return: self
|
:return: self
|
||||||
"""
|
"""
|
||||||
@ -135,7 +135,7 @@ class ActionChains:
|
|||||||
return self
|
return self
|
||||||
|
|
||||||
def r_release(self, on_ele=None):
|
def r_release(self, on_ele=None):
|
||||||
"""释放鼠标右键,可先移动到元素上 \n
|
"""释放鼠标右键,可先移动到元素上
|
||||||
:param on_ele: ChromiumElement元素或文本定位符
|
:param on_ele: ChromiumElement元素或文本定位符
|
||||||
:return: self
|
:return: self
|
||||||
"""
|
"""
|
||||||
@ -145,7 +145,7 @@ class ActionChains:
|
|||||||
return self
|
return self
|
||||||
|
|
||||||
def m_hold(self, on_ele=None):
|
def m_hold(self, on_ele=None):
|
||||||
"""按住鼠标中键,可先移动到元素上 \n
|
"""按住鼠标中键,可先移动到元素上
|
||||||
:param on_ele: ChromiumElement元素或文本定位符
|
:param on_ele: ChromiumElement元素或文本定位符
|
||||||
:return: self
|
:return: self
|
||||||
"""
|
"""
|
||||||
@ -155,7 +155,7 @@ class ActionChains:
|
|||||||
return self
|
return self
|
||||||
|
|
||||||
def m_release(self, on_ele=None):
|
def m_release(self, on_ele=None):
|
||||||
"""释放鼠标中键,可先移动到元素上 \n
|
"""释放鼠标中键,可先移动到元素上
|
||||||
:param on_ele: ChromiumElement元素或文本定位符
|
:param on_ele: ChromiumElement元素或文本定位符
|
||||||
:return: self
|
:return: self
|
||||||
"""
|
"""
|
||||||
@ -165,7 +165,7 @@ class ActionChains:
|
|||||||
return self
|
return self
|
||||||
|
|
||||||
def _hold(self, button):
|
def _hold(self, button):
|
||||||
"""按下鼠标按键 \n
|
"""按下鼠标按键
|
||||||
:param button: 要按下的按键
|
:param button: 要按下的按键
|
||||||
:return: self
|
:return: self
|
||||||
"""
|
"""
|
||||||
@ -174,7 +174,7 @@ class ActionChains:
|
|||||||
return self
|
return self
|
||||||
|
|
||||||
def _release(self, button):
|
def _release(self, button):
|
||||||
"""释放鼠标按键 \n
|
"""释放鼠标按键
|
||||||
:param button: 要释放的按键
|
:param button: 要释放的按键
|
||||||
:return: self
|
:return: self
|
||||||
"""
|
"""
|
||||||
@ -183,7 +183,7 @@ class ActionChains:
|
|||||||
return self
|
return self
|
||||||
|
|
||||||
def scroll(self, delta_x=0, delta_y=0, on_ele=None):
|
def scroll(self, delta_x=0, delta_y=0, on_ele=None):
|
||||||
"""滚动鼠标滚轮,可先移动到元素上 \n
|
"""滚动鼠标滚轮,可先移动到元素上
|
||||||
:param delta_x: 滚轮变化值x
|
:param delta_x: 滚轮变化值x
|
||||||
:param delta_y: 滚轮变化值y
|
:param delta_y: 滚轮变化值y
|
||||||
:param on_ele: ChromiumElement元素
|
:param on_ele: ChromiumElement元素
|
||||||
@ -196,35 +196,35 @@ class ActionChains:
|
|||||||
return self
|
return self
|
||||||
|
|
||||||
def up(self, pixel):
|
def up(self, pixel):
|
||||||
"""鼠标向上移动若干像素 \n
|
"""鼠标向上移动若干像素
|
||||||
:param pixel: 鼠标移动的像素值
|
:param pixel: 鼠标移动的像素值
|
||||||
:return: self
|
:return: self
|
||||||
"""
|
"""
|
||||||
return self.move(0, -pixel)
|
return self.move(0, -pixel)
|
||||||
|
|
||||||
def down(self, pixel):
|
def down(self, pixel):
|
||||||
"""鼠标向下移动若干像素 \n
|
"""鼠标向下移动若干像素
|
||||||
:param pixel: 鼠标移动的像素值
|
:param pixel: 鼠标移动的像素值
|
||||||
:return: self
|
:return: self
|
||||||
"""
|
"""
|
||||||
return self.move(0, pixel)
|
return self.move(0, pixel)
|
||||||
|
|
||||||
def left(self, pixel):
|
def left(self, pixel):
|
||||||
"""鼠标向左移动若干像素 \n
|
"""鼠标向左移动若干像素
|
||||||
:param pixel: 鼠标移动的像素值
|
:param pixel: 鼠标移动的像素值
|
||||||
:return: self
|
:return: self
|
||||||
"""
|
"""
|
||||||
return self.move(-pixel, 0)
|
return self.move(-pixel, 0)
|
||||||
|
|
||||||
def right(self, pixel):
|
def right(self, pixel):
|
||||||
"""鼠标向右移动若干像素 \n
|
"""鼠标向右移动若干像素
|
||||||
:param pixel: 鼠标移动的像素值
|
:param pixel: 鼠标移动的像素值
|
||||||
:return: self
|
:return: self
|
||||||
"""
|
"""
|
||||||
return self.move(pixel, 0)
|
return self.move(pixel, 0)
|
||||||
|
|
||||||
def key_down(self, key):
|
def key_down(self, key):
|
||||||
"""按下键盘上的按键 \n
|
"""按下键盘上的按键
|
||||||
:param key: 按键,特殊字符见Keys
|
:param key: 按键,特殊字符见Keys
|
||||||
:return: self
|
:return: self
|
||||||
"""
|
"""
|
||||||
@ -237,7 +237,7 @@ class ActionChains:
|
|||||||
return self
|
return self
|
||||||
|
|
||||||
def key_up(self, key):
|
def key_up(self, key):
|
||||||
"""提起键盘上的按键 \n
|
"""提起键盘上的按键
|
||||||
:param key: 按键,特殊字符见Keys
|
:param key: 按键,特殊字符见Keys
|
||||||
:return: self
|
:return: self
|
||||||
"""
|
"""
|
||||||
@ -250,7 +250,7 @@ class ActionChains:
|
|||||||
return self
|
return self
|
||||||
|
|
||||||
def type(self, text):
|
def type(self, text):
|
||||||
"""输入文本 \n
|
"""输入文本
|
||||||
:param text: 要输入的文本
|
:param text: 要输入的文本
|
||||||
:return: self
|
:return: self
|
||||||
"""
|
"""
|
||||||
@ -266,7 +266,7 @@ class ActionChains:
|
|||||||
return self
|
return self
|
||||||
|
|
||||||
def _get_key_data(self, key, action):
|
def _get_key_data(self, key, action):
|
||||||
"""获取用于发送的按键信息 \n
|
"""获取用于发送的按键信息
|
||||||
:param key: 按键
|
:param key: 按键
|
||||||
:param action: 'keyDown' 或 'keyUp'
|
:param action: 'keyDown' 或 'keyUp'
|
||||||
:return: 按键信息
|
:return: 按键信息
|
||||||
|
@ -95,7 +95,7 @@ class DrissionElement(BaseElement):
|
|||||||
return self.eles('xpath:.//comment()')
|
return self.eles('xpath:.//comment()')
|
||||||
|
|
||||||
def texts(self, text_node_only=False):
|
def texts(self, text_node_only=False):
|
||||||
"""返回元素内所有直接子节点的文本,包括元素和文本节点 \n
|
"""返回元素内所有直接子节点的文本,包括元素和文本节点
|
||||||
:param text_node_only: 是否只返回文本节点
|
:param text_node_only: 是否只返回文本节点
|
||||||
:return: 文本列表
|
:return: 文本列表
|
||||||
"""
|
"""
|
||||||
@ -107,7 +107,7 @@ class DrissionElement(BaseElement):
|
|||||||
return [format_html(x.strip(' ').rstrip('\n')) for x in texts if x and sub('[\r\n\t ]', '', x) != '']
|
return [format_html(x.strip(' ').rstrip('\n')) for x in texts if x and sub('[\r\n\t ]', '', x) != '']
|
||||||
|
|
||||||
def parent(self, level_or_loc=1):
|
def parent(self, level_or_loc=1):
|
||||||
"""返回上面某一级父元素,可指定层数或用查询语法定位 \n
|
"""返回上面某一级父元素,可指定层数或用查询语法定位
|
||||||
:param level_or_loc: 第几级父元素,或定位符
|
:param level_or_loc: 第几级父元素,或定位符
|
||||||
:return: 上级元素对象
|
:return: 上级元素对象
|
||||||
"""
|
"""
|
||||||
@ -128,7 +128,7 @@ class DrissionElement(BaseElement):
|
|||||||
return self._ele(loc, timeout=0, relative=True)
|
return self._ele(loc, timeout=0, relative=True)
|
||||||
|
|
||||||
def prev(self, index=1, filter_loc='', timeout=0):
|
def prev(self, index=1, filter_loc='', timeout=0):
|
||||||
"""返回前面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 \n
|
"""返回前面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个
|
||||||
:param index: 前面第几个查询结果元素
|
:param index: 前面第几个查询结果元素
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
@ -138,7 +138,7 @@ class DrissionElement(BaseElement):
|
|||||||
return nodes[-1] if nodes else None
|
return nodes[-1] if nodes else None
|
||||||
|
|
||||||
def next(self, index=1, filter_loc='', timeout=0):
|
def next(self, index=1, filter_loc='', timeout=0):
|
||||||
"""返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 \n
|
"""返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个
|
||||||
:param index: 后面第几个查询结果元素
|
:param index: 后面第几个查询结果元素
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
@ -148,7 +148,7 @@ class DrissionElement(BaseElement):
|
|||||||
return nodes[0] if nodes else None
|
return nodes[0] if nodes else None
|
||||||
|
|
||||||
def before(self, index=1, filter_loc='', timeout=None):
|
def before(self, index=1, filter_loc='', timeout=None):
|
||||||
"""返回前面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 \n
|
"""返回前面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个
|
||||||
:param index: 前面第几个查询结果元素
|
:param index: 前面第几个查询结果元素
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
@ -158,7 +158,7 @@ class DrissionElement(BaseElement):
|
|||||||
return nodes[-1] if nodes else None
|
return nodes[-1] if nodes else None
|
||||||
|
|
||||||
def after(self, index=1, filter_loc='', timeout=None):
|
def after(self, index=1, filter_loc='', timeout=None):
|
||||||
"""返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 \n
|
"""返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个
|
||||||
:param index: 后面第几个查询结果元素
|
:param index: 后面第几个查询结果元素
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
@ -168,7 +168,7 @@ class DrissionElement(BaseElement):
|
|||||||
return nodes[0] if nodes else None
|
return nodes[0] if nodes else None
|
||||||
|
|
||||||
def prevs(self, filter_loc='', timeout=0):
|
def prevs(self, filter_loc='', timeout=0):
|
||||||
"""返回前面全部兄弟元素或节点组成的列表,可用查询语法筛选 \n
|
"""返回前面全部兄弟元素或节点组成的列表,可用查询语法筛选
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
:return: 兄弟元素或节点文本组成的列表
|
:return: 兄弟元素或节点文本组成的列表
|
||||||
@ -176,7 +176,7 @@ class DrissionElement(BaseElement):
|
|||||||
return self._get_brothers(filter_loc=filter_loc, direction='preceding', timeout=timeout)
|
return self._get_brothers(filter_loc=filter_loc, direction='preceding', timeout=timeout)
|
||||||
|
|
||||||
def nexts(self, filter_loc='', timeout=0):
|
def nexts(self, filter_loc='', timeout=0):
|
||||||
"""返回后面全部兄弟元素或节点组成的列表,可用查询语法筛选 \n
|
"""返回后面全部兄弟元素或节点组成的列表,可用查询语法筛选
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
:return: 兄弟元素或节点文本组成的列表
|
:return: 兄弟元素或节点文本组成的列表
|
||||||
@ -184,7 +184,7 @@ class DrissionElement(BaseElement):
|
|||||||
return self._get_brothers(filter_loc=filter_loc, direction='following', timeout=timeout)
|
return self._get_brothers(filter_loc=filter_loc, direction='following', timeout=timeout)
|
||||||
|
|
||||||
def befores(self, filter_loc='', timeout=None):
|
def befores(self, filter_loc='', timeout=None):
|
||||||
"""返回后面全部兄弟元素或节点组成的列表,可用查询语法筛选 \n
|
"""返回后面全部兄弟元素或节点组成的列表,可用查询语法筛选
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
:return: 本元素前面的元素或节点组成的列表
|
:return: 本元素前面的元素或节点组成的列表
|
||||||
@ -192,7 +192,7 @@ class DrissionElement(BaseElement):
|
|||||||
return self._get_brothers(filter_loc=filter_loc, direction='preceding', brother=False, timeout=timeout)
|
return self._get_brothers(filter_loc=filter_loc, direction='preceding', brother=False, timeout=timeout)
|
||||||
|
|
||||||
def afters(self, filter_loc='', timeout=None):
|
def afters(self, filter_loc='', timeout=None):
|
||||||
"""返回前面全部兄弟元素或节点组成的列表,可用查询语法筛选 \n
|
"""返回前面全部兄弟元素或节点组成的列表,可用查询语法筛选
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
:return: 本元素后面的元素或节点组成的列表
|
:return: 本元素后面的元素或节点组成的列表
|
||||||
@ -200,7 +200,7 @@ class DrissionElement(BaseElement):
|
|||||||
return self._get_brothers(filter_loc=filter_loc, direction='following', brother=False, timeout=timeout)
|
return self._get_brothers(filter_loc=filter_loc, direction='following', brother=False, timeout=timeout)
|
||||||
|
|
||||||
def _get_brothers(self, index=None, filter_loc='', direction='following', brother=True, timeout=.5):
|
def _get_brothers(self, index=None, filter_loc='', direction='following', brother=True, timeout=.5):
|
||||||
"""按要求返回兄弟元素或节点组成的列表 \n
|
"""按要求返回兄弟元素或节点组成的列表
|
||||||
:param index: 获取第几个,该参数不为None时只获取该编号的元素
|
:param index: 获取第几个,该参数不为None时只获取该编号的元素
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:param direction: 'following' 或 'preceding',查找的方向
|
:param direction: 'following' 或 'preceding',查找的方向
|
||||||
@ -295,7 +295,7 @@ class BasePage(BaseParser):
|
|||||||
return self._url_available
|
return self._url_available
|
||||||
|
|
||||||
def _before_connect(self, url, retry, interval):
|
def _before_connect(self, url, retry, interval):
|
||||||
"""连接前的准备 \n
|
"""连接前的准备
|
||||||
:param url: 要访问的url
|
:param url: 要访问的url
|
||||||
:param retry: 重试次数
|
:param retry: 重试次数
|
||||||
:param interval: 重试间隔
|
:param interval: 重试间隔
|
||||||
|
@ -38,7 +38,7 @@ class ChromiumBase(BasePage):
|
|||||||
super().__init__(timeout)
|
super().__init__(timeout)
|
||||||
|
|
||||||
def _connect_browser(self, addr_driver_opts=None, tab_id=None):
|
def _connect_browser(self, addr_driver_opts=None, tab_id=None):
|
||||||
"""连接浏览器,在第一次时运行 \n
|
"""连接浏览器,在第一次时运行
|
||||||
:param addr_driver_opts: 浏览器地址、ChromiumDriver对象或DriverOptions对象
|
:param addr_driver_opts: 浏览器地址、ChromiumDriver对象或DriverOptions对象
|
||||||
:param tab_id: 要控制的标签页id,不指定默认为激活的
|
:param tab_id: 要控制的标签页id,不指定默认为激活的
|
||||||
:return: None
|
:return: None
|
||||||
@ -183,8 +183,8 @@ class ChromiumBase(BasePage):
|
|||||||
self._debug_recorder.add_data((perf_counter(), '加载流程', 'navigated'))
|
self._debug_recorder.add_data((perf_counter(), '加载流程', 'navigated'))
|
||||||
|
|
||||||
def __call__(self, loc_or_str, timeout=None):
|
def __call__(self, loc_or_str, timeout=None):
|
||||||
"""在内部查找元素 \n
|
"""在内部查找元素
|
||||||
例:ele = page('@id=ele_id') \n
|
例:ele = page('@id=ele_id')
|
||||||
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
||||||
:param timeout: 超时时间
|
:param timeout: 超时时间
|
||||||
:return: ChromiumElement对象
|
:return: ChromiumElement对象
|
||||||
@ -281,7 +281,7 @@ class ChromiumBase(BasePage):
|
|||||||
return PageLoadStrategy(self)
|
return PageLoadStrategy(self)
|
||||||
|
|
||||||
def set_timeouts(self, implicit=None, page_load=None, script=None):
|
def set_timeouts(self, implicit=None, page_load=None, script=None):
|
||||||
"""设置超时时间,单位为秒 \n
|
"""设置超时时间,单位为秒
|
||||||
:param implicit: 查找元素超时时间
|
:param implicit: 查找元素超时时间
|
||||||
:param page_load: 页面加载超时时间
|
:param page_load: 页面加载超时时间
|
||||||
:param script: 脚本运行超时时间
|
:param script: 脚本运行超时时间
|
||||||
@ -297,7 +297,7 @@ class ChromiumBase(BasePage):
|
|||||||
self._timeouts.script = script
|
self._timeouts.script = script
|
||||||
|
|
||||||
def run_js(self, script, as_expr=False, *args):
|
def run_js(self, script, as_expr=False, *args):
|
||||||
"""运行javascript代码 \n
|
"""运行javascript代码
|
||||||
:param script: js文本
|
:param script: js文本
|
||||||
:param as_expr: 是否作为表达式运行,为True时args无效
|
:param as_expr: 是否作为表达式运行,为True时args无效
|
||||||
:param args: 参数,按顺序在js文本中对应argument[0]、argument[1]...
|
:param args: 参数,按顺序在js文本中对应argument[0]、argument[1]...
|
||||||
@ -307,7 +307,7 @@ class ChromiumBase(BasePage):
|
|||||||
return run_js(self, script, as_expr, self.timeouts.script, args)
|
return run_js(self, script, as_expr, self.timeouts.script, args)
|
||||||
|
|
||||||
def run_async_js(self, script, as_expr=False, *args):
|
def run_async_js(self, script, as_expr=False, *args):
|
||||||
"""以异步方式执行js代码 \n
|
"""以异步方式执行js代码
|
||||||
:param script: js文本
|
:param script: js文本
|
||||||
:param as_expr: 是否作为表达式运行,为True时args无效
|
:param as_expr: 是否作为表达式运行,为True时args无效
|
||||||
:param args: 参数,按顺序在js文本中对应argument[0]、argument[1]...
|
:param args: 参数,按顺序在js文本中对应argument[0]、argument[1]...
|
||||||
@ -318,7 +318,7 @@ class ChromiumBase(BasePage):
|
|||||||
Thread(target=run_js, args=(self, script, as_expr, self.timeouts.script, args)).start()
|
Thread(target=run_js, args=(self, script, as_expr, self.timeouts.script, args)).start()
|
||||||
|
|
||||||
def get(self, url, show_errmsg=False, retry=None, interval=None, timeout=None):
|
def get(self, url, show_errmsg=False, retry=None, interval=None, timeout=None):
|
||||||
"""访问url \n
|
"""访问url
|
||||||
:param url: 目标url
|
:param url: 目标url
|
||||||
:param show_errmsg: 是否显示和抛出异常
|
:param show_errmsg: 是否显示和抛出异常
|
||||||
:param retry: 重试次数
|
:param retry: 重试次数
|
||||||
@ -335,7 +335,7 @@ class ChromiumBase(BasePage):
|
|||||||
return self._url_available
|
return self._url_available
|
||||||
|
|
||||||
def wait_loading(self, timeout=1):
|
def wait_loading(self, timeout=1):
|
||||||
"""阻塞程序,等待页面进入加载状态 \n
|
"""阻塞程序,等待页面进入加载状态
|
||||||
:param timeout: 超时时间
|
:param timeout: 超时时间
|
||||||
:return: 等待结束时是否进入加载状态
|
:return: 等待结束时是否进入加载状态
|
||||||
"""
|
"""
|
||||||
@ -349,7 +349,7 @@ class ChromiumBase(BasePage):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
def get_cookies(self, as_dict=False):
|
def get_cookies(self, as_dict=False):
|
||||||
"""获取cookies信息 \n
|
"""获取cookies信息
|
||||||
:param as_dict: 为True时返回由{name: value}键值对组成的dict
|
:param as_dict: 为True时返回由{name: value}键值对组成的dict
|
||||||
:return: cookies信息
|
:return: cookies信息
|
||||||
"""
|
"""
|
||||||
@ -360,7 +360,7 @@ class ChromiumBase(BasePage):
|
|||||||
return cookies
|
return cookies
|
||||||
|
|
||||||
def set_cookies(self, cookies):
|
def set_cookies(self, cookies):
|
||||||
"""设置cookies值 \n
|
"""设置cookies值
|
||||||
:param cookies: cookies信息
|
:param cookies: cookies信息
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
@ -376,14 +376,14 @@ class ChromiumBase(BasePage):
|
|||||||
self._wait_driver.Network.setCookies(cookies=result_cookies)
|
self._wait_driver.Network.setCookies(cookies=result_cookies)
|
||||||
|
|
||||||
def set_headers(self, headers: dict) -> None:
|
def set_headers(self, headers: dict) -> None:
|
||||||
"""设置固定发送的headers \n
|
"""设置固定发送的headers
|
||||||
:param headers: dict格式的headers数据
|
:param headers: dict格式的headers数据
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
self.run_cdp('Network.setExtraHTTPHeaders', headers=headers, not_change=True)
|
self.run_cdp('Network.setExtraHTTPHeaders', headers=headers, not_change=True)
|
||||||
|
|
||||||
def ele(self, loc_or_ele, timeout=None):
|
def ele(self, loc_or_ele, timeout=None):
|
||||||
"""获取第一个符合条件的元素对象 \n
|
"""获取第一个符合条件的元素对象
|
||||||
:param loc_or_ele: 定位符或元素对象
|
:param loc_or_ele: 定位符或元素对象
|
||||||
:param timeout: 查找超时时间
|
:param timeout: 查找超时时间
|
||||||
:return: ChromiumElement对象
|
:return: ChromiumElement对象
|
||||||
@ -391,7 +391,7 @@ class ChromiumBase(BasePage):
|
|||||||
return self._ele(loc_or_ele, timeout=timeout)
|
return self._ele(loc_or_ele, timeout=timeout)
|
||||||
|
|
||||||
def eles(self, loc_or_str, timeout=None):
|
def eles(self, loc_or_str, timeout=None):
|
||||||
"""获取所有符合条件的元素对象 \n
|
"""获取所有符合条件的元素对象
|
||||||
:param loc_or_str: 定位符或元素对象
|
:param loc_or_str: 定位符或元素对象
|
||||||
:param timeout: 查找超时时间
|
:param timeout: 查找超时时间
|
||||||
:return: ChromiumElement对象组成的列表
|
:return: ChromiumElement对象组成的列表
|
||||||
@ -399,14 +399,14 @@ class ChromiumBase(BasePage):
|
|||||||
return self._ele(loc_or_str, timeout=timeout, single=False)
|
return self._ele(loc_or_str, timeout=timeout, single=False)
|
||||||
|
|
||||||
def s_ele(self, loc_or_ele=None):
|
def s_ele(self, loc_or_ele=None):
|
||||||
"""查找第一个符合条件的元素以SessionElement形式返回,处理复杂页面时效率很高 \n
|
"""查找第一个符合条件的元素以SessionElement形式返回,处理复杂页面时效率很高
|
||||||
:param loc_or_ele: 元素的定位信息,可以是loc元组,或查询字符串
|
:param loc_or_ele: 元素的定位信息,可以是loc元组,或查询字符串
|
||||||
:return: SessionElement对象或属性、文本
|
:return: SessionElement对象或属性、文本
|
||||||
"""
|
"""
|
||||||
return make_session_ele(self, loc_or_ele)
|
return make_session_ele(self, loc_or_ele)
|
||||||
|
|
||||||
def s_eles(self, loc_or_str):
|
def s_eles(self, loc_or_str):
|
||||||
"""查找所有符合条件的元素以SessionElement列表形式返回 \n
|
"""查找所有符合条件的元素以SessionElement列表形式返回
|
||||||
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
||||||
:return: SessionElement对象组成的列表
|
:return: SessionElement对象组成的列表
|
||||||
"""
|
"""
|
||||||
@ -457,7 +457,7 @@ class ChromiumBase(BasePage):
|
|||||||
return [make_chromium_ele(self, node_id=i) for i in nodeIds['nodeIds']]
|
return [make_chromium_ele(self, node_id=i) for i in nodeIds['nodeIds']]
|
||||||
|
|
||||||
def wait_ele(self, loc_or_ele, timeout=None):
|
def wait_ele(self, loc_or_ele, timeout=None):
|
||||||
"""返回用于等待元素到达某个状态的等待器对象 \n
|
"""返回用于等待元素到达某个状态的等待器对象
|
||||||
:param loc_or_ele: 可以是元素、查询字符串、loc元组
|
:param loc_or_ele: 可以是元素、查询字符串、loc元组
|
||||||
:param timeout: 等待超时时间
|
:param timeout: 等待超时时间
|
||||||
:return: 用于等待的ElementWaiter对象
|
:return: 用于等待的ElementWaiter对象
|
||||||
@ -465,7 +465,7 @@ class ChromiumBase(BasePage):
|
|||||||
return ChromiumElementWaiter(self, loc_or_ele, timeout)
|
return ChromiumElementWaiter(self, loc_or_ele, timeout)
|
||||||
|
|
||||||
def scroll_to_see(self, loc_or_ele):
|
def scroll_to_see(self, loc_or_ele):
|
||||||
"""滚动页面直到元素可见 \n
|
"""滚动页面直到元素可见
|
||||||
:param loc_or_ele: 元素的定位信息,可以是loc元组,或查询字符串(详见ele函数注释)
|
:param loc_or_ele: 元素的定位信息,可以是loc元组,或查询字符串(详见ele函数注释)
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
@ -480,7 +480,7 @@ class ChromiumBase(BasePage):
|
|||||||
offset_scroll(ele, 0, 0)
|
offset_scroll(ele, 0, 0)
|
||||||
|
|
||||||
def refresh(self, ignore_cache=False):
|
def refresh(self, ignore_cache=False):
|
||||||
"""刷新当前页面 \n
|
"""刷新当前页面
|
||||||
:param ignore_cache: 是否忽略缓存
|
:param ignore_cache: 是否忽略缓存
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
@ -488,14 +488,14 @@ class ChromiumBase(BasePage):
|
|||||||
self._driver.Page.reload(ignoreCache=ignore_cache)
|
self._driver.Page.reload(ignoreCache=ignore_cache)
|
||||||
|
|
||||||
def forward(self, steps=1):
|
def forward(self, steps=1):
|
||||||
"""在浏览历史中前进若干步 \n
|
"""在浏览历史中前进若干步
|
||||||
:param steps: 前进步数
|
:param steps: 前进步数
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
self._forward_or_back(steps)
|
self._forward_or_back(steps)
|
||||||
|
|
||||||
def back(self, steps=1):
|
def back(self, steps=1):
|
||||||
"""在浏览历史中后退若干步 \n
|
"""在浏览历史中后退若干步
|
||||||
:param steps: 后退步数
|
:param steps: 后退步数
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
@ -539,7 +539,7 @@ class ChromiumBase(BasePage):
|
|||||||
sleep(.1)
|
sleep(.1)
|
||||||
|
|
||||||
def run_cdp(self, cmd, **cmd_args):
|
def run_cdp(self, cmd, **cmd_args):
|
||||||
"""执行Chrome DevTools Protocol语句 \n
|
"""执行Chrome DevTools Protocol语句
|
||||||
:param cmd: 协议项目
|
:param cmd: 协议项目
|
||||||
:param cmd_args: 参数
|
:param cmd_args: 参数
|
||||||
:return: 执行的结果
|
:return: 执行的结果
|
||||||
@ -558,14 +558,14 @@ class ChromiumBase(BasePage):
|
|||||||
raise
|
raise
|
||||||
|
|
||||||
def set_user_agent(self, ua):
|
def set_user_agent(self, ua):
|
||||||
"""为当前tab设置user agent,只在当前tab有效 \n
|
"""为当前tab设置user agent,只在当前tab有效
|
||||||
:param ua: user agent字符串
|
:param ua: user agent字符串
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
self._wait_driver.Network.setUserAgentOverride(userAgent=ua)
|
self._wait_driver.Network.setUserAgentOverride(userAgent=ua)
|
||||||
|
|
||||||
def get_session_storage(self, item=None):
|
def get_session_storage(self, item=None):
|
||||||
"""获取sessionStorage信息,不设置item则获取全部 \n
|
"""获取sessionStorage信息,不设置item则获取全部
|
||||||
:param item: 要获取的项,不设置则返回全部
|
:param item: 要获取的项,不设置则返回全部
|
||||||
:return: sessionStorage一个或所有项内容
|
:return: sessionStorage一个或所有项内容
|
||||||
"""
|
"""
|
||||||
@ -573,7 +573,7 @@ class ChromiumBase(BasePage):
|
|||||||
return self.run_js(js, as_expr=True)
|
return self.run_js(js, as_expr=True)
|
||||||
|
|
||||||
def get_local_storage(self, item=None):
|
def get_local_storage(self, item=None):
|
||||||
"""获取localStorage信息,不设置item则获取全部 \n
|
"""获取localStorage信息,不设置item则获取全部
|
||||||
:param item: 要获取的项目,不设置则返回全部
|
:param item: 要获取的项目,不设置则返回全部
|
||||||
:return: localStorage一个或所有项内容
|
:return: localStorage一个或所有项内容
|
||||||
"""
|
"""
|
||||||
@ -581,7 +581,7 @@ class ChromiumBase(BasePage):
|
|||||||
return self.run_js(js, as_expr=True)
|
return self.run_js(js, as_expr=True)
|
||||||
|
|
||||||
def set_session_storage(self, item, value):
|
def set_session_storage(self, item, value):
|
||||||
"""设置或删除某项sessionStorage信息 \n
|
"""设置或删除某项sessionStorage信息
|
||||||
:param item: 要设置的项
|
:param item: 要设置的项
|
||||||
:param value: 项的值,设置为False时,删除该项
|
:param value: 项的值,设置为False时,删除该项
|
||||||
:return: None
|
:return: None
|
||||||
@ -591,7 +591,7 @@ class ChromiumBase(BasePage):
|
|||||||
return self.run_js(js, as_expr=True)
|
return self.run_js(js, as_expr=True)
|
||||||
|
|
||||||
def set_local_storage(self, item, value):
|
def set_local_storage(self, item, value):
|
||||||
"""设置或删除某项localStorage信息 \n
|
"""设置或删除某项localStorage信息
|
||||||
:param item: 要设置的项
|
:param item: 要设置的项
|
||||||
:param value: 项的值,设置为False时,删除该项
|
:param value: 项的值,设置为False时,删除该项
|
||||||
:return: None
|
:return: None
|
||||||
@ -600,7 +600,7 @@ class ChromiumBase(BasePage):
|
|||||||
return self.run_js(js, as_expr=True)
|
return self.run_js(js, as_expr=True)
|
||||||
|
|
||||||
def clear_cache(self, session_storage=True, local_storage=True, cache=True, cookies=True):
|
def clear_cache(self, session_storage=True, local_storage=True, cache=True, cookies=True):
|
||||||
"""清除缓存,可选要清除的项 \n
|
"""清除缓存,可选要清除的项
|
||||||
:param session_storage: 是否清除sessionStorage
|
:param session_storage: 是否清除sessionStorage
|
||||||
:param local_storage: 是否清除localStorage
|
:param local_storage: 是否清除localStorage
|
||||||
:param cache: 是否清除cache
|
:param cache: 是否清除cache
|
||||||
@ -617,7 +617,7 @@ class ChromiumBase(BasePage):
|
|||||||
self._wait_driver.Network.clearBrowserCookies()
|
self._wait_driver.Network.clearBrowserCookies()
|
||||||
|
|
||||||
def _d_connect(self, to_url, times=0, interval=1, show_errmsg=False, timeout=None):
|
def _d_connect(self, to_url, times=0, interval=1, show_errmsg=False, timeout=None):
|
||||||
"""尝试连接,重试若干次 \n
|
"""尝试连接,重试若干次
|
||||||
:param to_url: 要访问的url
|
:param to_url: 要访问的url
|
||||||
:param times: 重试次数
|
:param times: 重试次数
|
||||||
:param interval: 重试间隔(秒)
|
:param interval: 重试间隔(秒)
|
||||||
@ -694,7 +694,7 @@ class PageLoadStrategy(object):
|
|||||||
self._page = page
|
self._page = page
|
||||||
|
|
||||||
def __call__(self, value):
|
def __call__(self, value):
|
||||||
"""设置加载策略 \n
|
"""设置加载策略
|
||||||
:param value: 可选 'normal', 'eager', 'none'
|
:param value: 可选 'normal', 'eager', 'none'
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
|
@ -153,7 +153,7 @@ class ChromiumDriver(object):
|
|||||||
return attr
|
return attr
|
||||||
|
|
||||||
def call_method(self, _method, *args, **kwargs):
|
def call_method(self, _method, *args, **kwargs):
|
||||||
"""执行cdp方法 \n
|
"""执行cdp方法
|
||||||
:param _method: cdp方法名
|
:param _method: cdp方法名
|
||||||
:param args: cdp参数
|
:param args: cdp参数
|
||||||
:param kwargs: cdp参数
|
:param kwargs: cdp参数
|
||||||
@ -203,7 +203,7 @@ class ChromiumDriver(object):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def set_listener(self, event, callback):
|
def set_listener(self, event, callback):
|
||||||
"""绑定cdp event和回调方法 \n
|
"""绑定cdp event和回调方法
|
||||||
:param event: cdp event
|
:param event: cdp event
|
||||||
:param callback: 绑定到cdp event的回调方法
|
:param callback: 绑定到cdp event的回调方法
|
||||||
:return: 回调方法
|
:return: 回调方法
|
||||||
@ -217,7 +217,7 @@ class ChromiumDriver(object):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def get_listener(self, event):
|
def get_listener(self, event):
|
||||||
"""获取cdp event对应的回调方法 \n
|
"""获取cdp event对应的回调方法
|
||||||
:param event: cdp event
|
:param event: cdp event
|
||||||
:return: 回调方法
|
:return: 回调方法
|
||||||
"""
|
"""
|
||||||
|
@ -1090,7 +1090,7 @@ class ChromiumShadowRootElement(BaseElement):
|
|||||||
|
|
||||||
|
|
||||||
def find_in_chromium_ele(ele, loc, single=True, timeout=None, relative=True):
|
def find_in_chromium_ele(ele, loc, single=True, timeout=None, relative=True):
|
||||||
"""在chromium元素中查找 \n
|
"""在chromium元素中查找
|
||||||
:param ele: ChromiumElement对象
|
:param ele: ChromiumElement对象
|
||||||
:param loc: 元素定位元组
|
:param loc: 元素定位元组
|
||||||
:param single: True则返回第一个,False则返回全部
|
:param single: True则返回第一个,False则返回全部
|
||||||
@ -1203,7 +1203,7 @@ def _find_by_css(ele, selector, single, timeout):
|
|||||||
|
|
||||||
|
|
||||||
def make_chromium_ele(page, node_id=None, obj_id=None):
|
def make_chromium_ele(page, node_id=None, obj_id=None):
|
||||||
"""根据node id或object id生成相应元素对象 \n
|
"""根据node id或object id生成相应元素对象
|
||||||
:param page: ChromiumPage对象
|
:param page: ChromiumPage对象
|
||||||
:param node_id: 元素的node id
|
:param node_id: 元素的node id
|
||||||
:param obj_id: 元素的object id
|
:param obj_id: 元素的object id
|
||||||
@ -1259,7 +1259,7 @@ else{a.push(e.snapshotItem(i));}}"""
|
|||||||
|
|
||||||
|
|
||||||
def run_js(page_or_ele, script, as_expr=False, timeout=None, args=None, not_change=False):
|
def run_js(page_or_ele, script, as_expr=False, timeout=None, args=None, not_change=False):
|
||||||
"""运行javascript代码 \n
|
"""运行javascript代码
|
||||||
:param page_or_ele: 页面对象或元素对象
|
:param page_or_ele: 页面对象或元素对象
|
||||||
:param script: js文本
|
:param script: js文本
|
||||||
:param as_expr: 是否作为表达式运行,为True时args无效
|
:param as_expr: 是否作为表达式运行,为True时args无效
|
||||||
@ -1434,7 +1434,7 @@ class ChromiumScroll(object):
|
|||||||
self._run_js('{}.scrollTo(0, {}.scrollTop);')
|
self._run_js('{}.scrollTo(0, {}.scrollTop);')
|
||||||
|
|
||||||
def to_location(self, x, y):
|
def to_location(self, x, y):
|
||||||
"""滚动到指定位置 \n
|
"""滚动到指定位置
|
||||||
:param x: 水平距离
|
:param x: 水平距离
|
||||||
:param y: 垂直距离
|
:param y: 垂直距离
|
||||||
:return: None
|
:return: None
|
||||||
@ -1442,7 +1442,7 @@ class ChromiumScroll(object):
|
|||||||
self._run_js(f'{{}}.scrollTo({x}, {y});')
|
self._run_js(f'{{}}.scrollTo({x}, {y});')
|
||||||
|
|
||||||
def up(self, pixel=300):
|
def up(self, pixel=300):
|
||||||
"""向上滚动若干像素,水平位置不变 \n
|
"""向上滚动若干像素,水平位置不变
|
||||||
:param pixel: 滚动的像素
|
:param pixel: 滚动的像素
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
@ -1450,14 +1450,14 @@ class ChromiumScroll(object):
|
|||||||
self._run_js(f'{{}}.scrollBy(0, {pixel});')
|
self._run_js(f'{{}}.scrollBy(0, {pixel});')
|
||||||
|
|
||||||
def down(self, pixel=300):
|
def down(self, pixel=300):
|
||||||
"""向下滚动若干像素,水平位置不变 \n
|
"""向下滚动若干像素,水平位置不变
|
||||||
:param pixel: 滚动的像素
|
:param pixel: 滚动的像素
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
self._run_js(f'{{}}.scrollBy(0, {pixel});')
|
self._run_js(f'{{}}.scrollBy(0, {pixel});')
|
||||||
|
|
||||||
def left(self, pixel=300):
|
def left(self, pixel=300):
|
||||||
"""向左滚动若干像素,垂直位置不变 \n
|
"""向左滚动若干像素,垂直位置不变
|
||||||
:param pixel: 滚动的像素
|
:param pixel: 滚动的像素
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
@ -1465,7 +1465,7 @@ class ChromiumScroll(object):
|
|||||||
self._run_js(f'{{}}.scrollBy({pixel}, 0);')
|
self._run_js(f'{{}}.scrollBy({pixel}, 0);')
|
||||||
|
|
||||||
def right(self, pixel=300):
|
def right(self, pixel=300):
|
||||||
"""向右滚动若干像素,垂直位置不变 \n
|
"""向右滚动若干像素,垂直位置不变
|
||||||
:param pixel: 滚动的像素
|
:param pixel: 滚动的像素
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
@ -1485,7 +1485,7 @@ class ChromiumSelect(object):
|
|||||||
self._ele = ele
|
self._ele = ele
|
||||||
|
|
||||||
def __call__(self, text_or_index, timeout=None):
|
def __call__(self, text_or_index, timeout=None):
|
||||||
"""选定下拉列表中子元素 \n
|
"""选定下拉列表中子元素
|
||||||
:param text_or_index: 根据文本、值选或序号择选项,若允许多选,传入list或tuple可多选
|
:param text_or_index: 根据文本、值选或序号择选项,若允许多选,传入list或tuple可多选
|
||||||
:param timeout: 超时时间,不输入默认实用页面超时时间
|
:param timeout: 超时时间,不输入默认实用页面超时时间
|
||||||
:return: None
|
:return: None
|
||||||
@ -1507,7 +1507,7 @@ class ChromiumSelect(object):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def selected_option(self):
|
def selected_option(self):
|
||||||
"""返回第一个被选中的option元素 \n
|
"""返回第一个被选中的option元素
|
||||||
:return: ChromiumElement对象或None
|
:return: ChromiumElement对象或None
|
||||||
"""
|
"""
|
||||||
ele = self._ele.run_js('return this.options[this.selectedIndex];')
|
ele = self._ele.run_js('return this.options[this.selectedIndex];')
|
||||||
@ -1515,7 +1515,7 @@ class ChromiumSelect(object):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def selected_options(self):
|
def selected_options(self):
|
||||||
"""返回所有被选中的option元素列表 \n
|
"""返回所有被选中的option元素列表
|
||||||
:return: ChromiumElement对象组成的列表
|
:return: ChromiumElement对象组成的列表
|
||||||
"""
|
"""
|
||||||
return [x for x in self.options if x.is_selected]
|
return [x for x in self.options if x.is_selected]
|
||||||
@ -1529,7 +1529,7 @@ class ChromiumSelect(object):
|
|||||||
opt.click(by_js=True)
|
opt.click(by_js=True)
|
||||||
|
|
||||||
def by_text(self, text, timeout=None):
|
def by_text(self, text, timeout=None):
|
||||||
"""此方法用于根据text值选择项。当元素是多选列表时,可以接收list或tuple \n
|
"""此方法用于根据text值选择项。当元素是多选列表时,可以接收list或tuple
|
||||||
:param text: text属性值,传入list或tuple可选择多项
|
:param text: text属性值,传入list或tuple可选择多项
|
||||||
:param timeout: 超时时间,不输入默认实用页面超时时间
|
:param timeout: 超时时间,不输入默认实用页面超时时间
|
||||||
:return: 是否选择成功
|
:return: 是否选择成功
|
||||||
@ -1538,7 +1538,7 @@ class ChromiumSelect(object):
|
|||||||
return self._select(text, 'text', False, timeout)
|
return self._select(text, 'text', False, timeout)
|
||||||
|
|
||||||
def by_value(self, value, timeout=None):
|
def by_value(self, value, timeout=None):
|
||||||
"""此方法用于根据value值选择项。当元素是多选列表时,可以接收list或tuple \n
|
"""此方法用于根据value值选择项。当元素是多选列表时,可以接收list或tuple
|
||||||
:param value: value属性值,传入list或tuple可选择多项
|
:param value: value属性值,传入list或tuple可选择多项
|
||||||
:param timeout: 超时时间,不输入默认实用页面超时时间
|
:param timeout: 超时时间,不输入默认实用页面超时时间
|
||||||
:return: 是否选择成功
|
:return: 是否选择成功
|
||||||
@ -1547,7 +1547,7 @@ class ChromiumSelect(object):
|
|||||||
return self._select(value, 'value', False, timeout)
|
return self._select(value, 'value', False, timeout)
|
||||||
|
|
||||||
def by_index(self, index, timeout=None):
|
def by_index(self, index, timeout=None):
|
||||||
"""此方法用于根据index值选择项。当元素是多选列表时,可以接收list或tuple \n
|
"""此方法用于根据index值选择项。当元素是多选列表时,可以接收list或tuple
|
||||||
:param index: 序号,0开始,传入list或tuple可选择多项
|
:param index: 序号,0开始,传入list或tuple可选择多项
|
||||||
:param timeout: 超时时间,不输入默认实用页面超时时间
|
:param timeout: 超时时间,不输入默认实用页面超时时间
|
||||||
:return: 是否选择成功
|
:return: 是否选择成功
|
||||||
@ -1556,7 +1556,7 @@ class ChromiumSelect(object):
|
|||||||
return self._select(index, 'index', False, timeout)
|
return self._select(index, 'index', False, timeout)
|
||||||
|
|
||||||
def cancel_by_text(self, text, timeout=None):
|
def cancel_by_text(self, text, timeout=None):
|
||||||
"""此方法用于根据text值取消选择项。当元素是多选列表时,可以接收list或tuple \n
|
"""此方法用于根据text值取消选择项。当元素是多选列表时,可以接收list或tuple
|
||||||
:param text: 文本,传入list或tuple可取消多项
|
:param text: 文本,传入list或tuple可取消多项
|
||||||
:param timeout: 超时时间,不输入默认实用页面超时时间
|
:param timeout: 超时时间,不输入默认实用页面超时时间
|
||||||
:return: 是否取消成功
|
:return: 是否取消成功
|
||||||
@ -1565,7 +1565,7 @@ class ChromiumSelect(object):
|
|||||||
return self._select(text, 'text', True, timeout)
|
return self._select(text, 'text', True, timeout)
|
||||||
|
|
||||||
def cancel_by_value(self, value, timeout=None):
|
def cancel_by_value(self, value, timeout=None):
|
||||||
"""此方法用于根据value值取消选择项。当元素是多选列表时,可以接收list或tuple \n
|
"""此方法用于根据value值取消选择项。当元素是多选列表时,可以接收list或tuple
|
||||||
:param value: value属性值,传入list或tuple可取消多项
|
:param value: value属性值,传入list或tuple可取消多项
|
||||||
:param timeout: 超时时间,不输入默认实用页面超时时间
|
:param timeout: 超时时间,不输入默认实用页面超时时间
|
||||||
:return: 是否取消成功
|
:return: 是否取消成功
|
||||||
@ -1574,7 +1574,7 @@ class ChromiumSelect(object):
|
|||||||
return self._select(value, 'value', True, timeout)
|
return self._select(value, 'value', True, timeout)
|
||||||
|
|
||||||
def cancel_by_index(self, index, timeout=None):
|
def cancel_by_index(self, index, timeout=None):
|
||||||
"""此方法用于根据index值取消选择项。当元素是多选列表时,可以接收list或tuple \n
|
"""此方法用于根据index值取消选择项。当元素是多选列表时,可以接收list或tuple
|
||||||
:param index: 序号,0开始,传入list或tuple可取消多项
|
:param index: 序号,0开始,传入list或tuple可取消多项
|
||||||
:param timeout: 超时时间,不输入默认实用页面超时时间
|
:param timeout: 超时时间,不输入默认实用页面超时时间
|
||||||
:return: 是否取消成功
|
:return: 是否取消成功
|
||||||
@ -1591,7 +1591,7 @@ class ChromiumSelect(object):
|
|||||||
i.click(by_js=True)
|
i.click(by_js=True)
|
||||||
|
|
||||||
def _select(self, text_value_index=None, para_type='text', deselect=False, timeout=None):
|
def _select(self, text_value_index=None, para_type='text', deselect=False, timeout=None):
|
||||||
"""选定或取消选定下拉列表中子元素 \n
|
"""选定或取消选定下拉列表中子元素
|
||||||
:param text_value_index: 根据文本、值选或序号择选项,若允许多选,传入list或tuple可多选
|
:param text_value_index: 根据文本、值选或序号择选项,若允许多选,传入list或tuple可多选
|
||||||
:param para_type: 参数类型,可选 'text'、'value'、'index'
|
:param para_type: 参数类型,可选 'text'、'value'、'index'
|
||||||
:param deselect: 是否取消选择
|
:param deselect: 是否取消选择
|
||||||
@ -1636,7 +1636,7 @@ class ChromiumSelect(object):
|
|||||||
text_value_index=None,
|
text_value_index=None,
|
||||||
para_type='text',
|
para_type='text',
|
||||||
deselect=False):
|
deselect=False):
|
||||||
"""选定或取消选定下拉列表中多个子元素 \n
|
"""选定或取消选定下拉列表中多个子元素
|
||||||
:param text_value_index: 根据文本、值选或序号择选多项
|
:param text_value_index: 根据文本、值选或序号择选多项
|
||||||
:param para_type: 参数类型,可选 'text'、'value'、'index'
|
:param para_type: 参数类型,可选 'text'、'value'、'index'
|
||||||
:param deselect: 是否取消选择
|
:param deselect: 是否取消选择
|
||||||
@ -1664,7 +1664,7 @@ class ChromiumElementWaiter(object):
|
|||||||
"""等待元素在dom中某种状态,如删除、显示、隐藏"""
|
"""等待元素在dom中某种状态,如删除、显示、隐藏"""
|
||||||
|
|
||||||
def __init__(self, page_or_ele, loc_or_ele, timeout=None):
|
def __init__(self, page_or_ele, loc_or_ele, timeout=None):
|
||||||
"""等待元素在dom中某种状态,如删除、显示、隐藏 \n
|
"""等待元素在dom中某种状态,如删除、显示、隐藏
|
||||||
:param page_or_ele: 页面或父元素
|
:param page_or_ele: 页面或父元素
|
||||||
:param loc_or_ele: 要等待的元素,可以是已有元素、定位符
|
:param loc_or_ele: 要等待的元素,可以是已有元素、定位符
|
||||||
:param timeout: 超时时间,默认读取页面超时时间
|
:param timeout: 超时时间,默认读取页面超时时间
|
||||||
|
@ -30,8 +30,8 @@ class ChromiumFrame(ChromiumBase):
|
|||||||
self.doc_ele = ChromiumElement(self, obj_id=obj_id)
|
self.doc_ele = ChromiumElement(self, obj_id=obj_id)
|
||||||
|
|
||||||
def __call__(self, loc_or_str, timeout=None):
|
def __call__(self, loc_or_str, timeout=None):
|
||||||
"""在内部查找元素 \n
|
"""在内部查找元素
|
||||||
例:ele2 = ele1('@id=ele_id') \n
|
例:ele2 = ele1('@id=ele_id')
|
||||||
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
||||||
:param timeout: 超时时间
|
:param timeout: 超时时间
|
||||||
:return: ChromiumElement对象或属性、文本
|
:return: ChromiumElement对象或属性、文本
|
||||||
@ -255,7 +255,7 @@ class ChromiumFrame(ChromiumBase):
|
|||||||
self.doc_ele.run_js('this.location.reload();')
|
self.doc_ele.run_js('this.location.reload();')
|
||||||
|
|
||||||
def attr(self, attr):
|
def attr(self, attr):
|
||||||
"""返回frame元素attribute属性值 \n
|
"""返回frame元素attribute属性值
|
||||||
:param attr: 属性名
|
:param attr: 属性名
|
||||||
:return: 属性值文本,没有该属性返回None
|
:return: 属性值文本,没有该属性返回None
|
||||||
"""
|
"""
|
||||||
@ -263,7 +263,7 @@ class ChromiumFrame(ChromiumBase):
|
|||||||
return self.frame_ele.attr(attr)
|
return self.frame_ele.attr(attr)
|
||||||
|
|
||||||
def set_attr(self, attr, value):
|
def set_attr(self, attr, value):
|
||||||
"""设置frame元素attribute属性 \n
|
"""设置frame元素attribute属性
|
||||||
:param attr: 属性名
|
:param attr: 属性名
|
||||||
:param value: 属性值
|
:param value: 属性值
|
||||||
:return: None
|
:return: None
|
||||||
@ -272,7 +272,7 @@ class ChromiumFrame(ChromiumBase):
|
|||||||
self.frame_ele.set_attr(attr, value)
|
self.frame_ele.set_attr(attr, value)
|
||||||
|
|
||||||
def remove_attr(self, attr):
|
def remove_attr(self, attr):
|
||||||
"""删除frame元素attribute属性 \n
|
"""删除frame元素attribute属性
|
||||||
:param attr: 属性名
|
:param attr: 属性名
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
@ -280,7 +280,7 @@ class ChromiumFrame(ChromiumBase):
|
|||||||
self.frame_ele.remove_attr(attr)
|
self.frame_ele.remove_attr(attr)
|
||||||
|
|
||||||
def run_js(self, script, as_expr=False, *args):
|
def run_js(self, script, as_expr=False, *args):
|
||||||
"""运行javascript代码 \n
|
"""运行javascript代码
|
||||||
:param script: js文本
|
:param script: js文本
|
||||||
:param as_expr: 是否作为表达式运行,为True时args无效
|
:param as_expr: 是否作为表达式运行,为True时args无效
|
||||||
:param args: 参数,按顺序在js文本中对应argument[0]、argument[1]...
|
:param args: 参数,按顺序在js文本中对应argument[0]、argument[1]...
|
||||||
@ -290,7 +290,7 @@ class ChromiumFrame(ChromiumBase):
|
|||||||
return self.doc_ele.run_js(script, as_expr=as_expr, *args)
|
return self.doc_ele.run_js(script, as_expr=as_expr, *args)
|
||||||
|
|
||||||
def parent(self, level_or_loc=1):
|
def parent(self, level_or_loc=1):
|
||||||
"""返回上面某一级父元素,可指定层数或用查询语法定位 \n
|
"""返回上面某一级父元素,可指定层数或用查询语法定位
|
||||||
:param level_or_loc: 第几级父元素,或定位符
|
:param level_or_loc: 第几级父元素,或定位符
|
||||||
:return: 上级元素对象
|
:return: 上级元素对象
|
||||||
"""
|
"""
|
||||||
@ -298,7 +298,7 @@ class ChromiumFrame(ChromiumBase):
|
|||||||
return self.frame_ele.parent(level_or_loc)
|
return self.frame_ele.parent(level_or_loc)
|
||||||
|
|
||||||
def prev(self, filter_loc='', index=1, timeout=0):
|
def prev(self, filter_loc='', index=1, timeout=0):
|
||||||
"""返回前面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 \n
|
"""返回前面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:param index: 前面第几个查询结果元素
|
:param index: 前面第几个查询结果元素
|
||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
@ -308,7 +308,7 @@ class ChromiumFrame(ChromiumBase):
|
|||||||
return self.frame_ele.prev(filter_loc, index, timeout)
|
return self.frame_ele.prev(filter_loc, index, timeout)
|
||||||
|
|
||||||
def next(self, filter_loc='', index=1, timeout=0):
|
def next(self, filter_loc='', index=1, timeout=0):
|
||||||
"""返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 \n
|
"""返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:param index: 后面第几个查询结果元素
|
:param index: 后面第几个查询结果元素
|
||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
@ -318,7 +318,7 @@ class ChromiumFrame(ChromiumBase):
|
|||||||
return self.frame_ele.next(filter_loc, index, timeout)
|
return self.frame_ele.next(filter_loc, index, timeout)
|
||||||
|
|
||||||
def before(self, filter_loc='', index=1, timeout=None):
|
def before(self, filter_loc='', index=1, timeout=None):
|
||||||
"""返回当前元素前面的一个元素,可指定筛选条件和第几个。查找范围不限兄弟元素,而是整个DOM文档 \n
|
"""返回当前元素前面的一个元素,可指定筛选条件和第几个。查找范围不限兄弟元素,而是整个DOM文档
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:param index: 前面第几个查询结果元素
|
:param index: 前面第几个查询结果元素
|
||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
@ -328,7 +328,7 @@ class ChromiumFrame(ChromiumBase):
|
|||||||
return self.frame_ele.before(filter_loc, index, timeout)
|
return self.frame_ele.before(filter_loc, index, timeout)
|
||||||
|
|
||||||
def after(self, filter_loc='', index=1, timeout=None):
|
def after(self, filter_loc='', index=1, timeout=None):
|
||||||
"""返回当前元素后面的一个元素,可指定筛选条件和第几个。查找范围不限兄弟元素,而是整个DOM文档 \n
|
"""返回当前元素后面的一个元素,可指定筛选条件和第几个。查找范围不限兄弟元素,而是整个DOM文档
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:param index: 后面第几个查询结果元素
|
:param index: 后面第几个查询结果元素
|
||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
@ -338,7 +338,7 @@ class ChromiumFrame(ChromiumBase):
|
|||||||
return self.frame_ele.after(filter_loc, index, timeout)
|
return self.frame_ele.after(filter_loc, index, timeout)
|
||||||
|
|
||||||
def prevs(self, filter_loc='', timeout=0):
|
def prevs(self, filter_loc='', timeout=0):
|
||||||
"""返回前面全部兄弟元素或节点组成的列表,可用查询语法筛选 \n
|
"""返回前面全部兄弟元素或节点组成的列表,可用查询语法筛选
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
:return: 兄弟元素或节点文本组成的列表
|
:return: 兄弟元素或节点文本组成的列表
|
||||||
@ -347,7 +347,7 @@ class ChromiumFrame(ChromiumBase):
|
|||||||
return self.frame_ele.prevs(filter_loc, timeout)
|
return self.frame_ele.prevs(filter_loc, timeout)
|
||||||
|
|
||||||
def nexts(self, filter_loc='', timeout=0):
|
def nexts(self, filter_loc='', timeout=0):
|
||||||
"""返回后面全部兄弟元素或节点组成的列表,可用查询语法筛选 \n
|
"""返回后面全部兄弟元素或节点组成的列表,可用查询语法筛选
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
:return: 兄弟元素或节点文本组成的列表
|
:return: 兄弟元素或节点文本组成的列表
|
||||||
@ -356,7 +356,7 @@ class ChromiumFrame(ChromiumBase):
|
|||||||
return self.frame_ele.nexts(filter_loc, timeout)
|
return self.frame_ele.nexts(filter_loc, timeout)
|
||||||
|
|
||||||
def befores(self, filter_loc='', timeout=None):
|
def befores(self, filter_loc='', timeout=None):
|
||||||
"""返回当前元素后面符合条件的全部兄弟元素或节点组成的列表,可用查询语法筛选。查找范围不限兄弟元素,而是整个DOM文档 \n
|
"""返回当前元素后面符合条件的全部兄弟元素或节点组成的列表,可用查询语法筛选。查找范围不限兄弟元素,而是整个DOM文档
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
:return: 本元素前面的元素或节点组成的列表
|
:return: 本元素前面的元素或节点组成的列表
|
||||||
@ -365,7 +365,7 @@ class ChromiumFrame(ChromiumBase):
|
|||||||
return self.frame_ele.befores(filter_loc, timeout)
|
return self.frame_ele.befores(filter_loc, timeout)
|
||||||
|
|
||||||
def afters(self, filter_loc='', timeout=None):
|
def afters(self, filter_loc='', timeout=None):
|
||||||
"""返回当前元素后面符合条件的全部兄弟元素或节点组成的列表,可用查询语法筛选。查找范围不限兄弟元素,而是整个DOM文档 \n
|
"""返回当前元素后面符合条件的全部兄弟元素或节点组成的列表,可用查询语法筛选。查找范围不限兄弟元素,而是整个DOM文档
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
:return: 本元素前面的元素或节点组成的列表
|
:return: 本元素前面的元素或节点组成的列表
|
||||||
@ -374,7 +374,7 @@ class ChromiumFrame(ChromiumBase):
|
|||||||
return self.frame_ele.afters(filter_loc, timeout)
|
return self.frame_ele.afters(filter_loc, timeout)
|
||||||
|
|
||||||
def _ele(self, loc_or_ele, timeout=None, single=True, relative=False):
|
def _ele(self, loc_or_ele, timeout=None, single=True, relative=False):
|
||||||
"""在frame内查找单个元素 \n
|
"""在frame内查找单个元素
|
||||||
:param loc_or_ele: 定位符或元素对象
|
:param loc_or_ele: 定位符或元素对象
|
||||||
:param timeout: 查找超时时间
|
:param timeout: 查找超时时间
|
||||||
:return: ChromiumElement对象
|
:return: ChromiumElement对象
|
||||||
@ -388,7 +388,7 @@ class ChromiumFrame(ChromiumBase):
|
|||||||
return self.doc_ele.ele(loc_or_ele, timeout) if single else self.doc_ele.eles(loc_or_ele, timeout)
|
return self.doc_ele.ele(loc_or_ele, timeout) if single else self.doc_ele.eles(loc_or_ele, timeout)
|
||||||
|
|
||||||
def _d_connect(self, to_url, times=0, interval=1, show_errmsg=False, timeout=None):
|
def _d_connect(self, to_url, times=0, interval=1, show_errmsg=False, timeout=None):
|
||||||
"""尝试连接,重试若干次 \n
|
"""尝试连接,重试若干次
|
||||||
:param to_url: 要访问的url
|
:param to_url: 要访问的url
|
||||||
:param times: 重试次数
|
:param times: 重试次数
|
||||||
:param interval: 重试间隔(秒)
|
:param interval: 重试间隔(秒)
|
||||||
|
@ -28,7 +28,7 @@ class ChromiumPage(ChromiumBase):
|
|||||||
super().__init__(addr_driver_opts, tab_id, timeout)
|
super().__init__(addr_driver_opts, tab_id, timeout)
|
||||||
|
|
||||||
def _connect_browser(self, addr_driver_opts=None, tab_id=None):
|
def _connect_browser(self, addr_driver_opts=None, tab_id=None):
|
||||||
"""连接浏览器,在第一次时运行 \n
|
"""连接浏览器,在第一次时运行
|
||||||
:param addr_driver_opts: 浏览器地址、ChromiumDriver对象或DriverOptions对象
|
:param addr_driver_opts: 浏览器地址、ChromiumDriver对象或DriverOptions对象
|
||||||
:param tab_id: 要控制的标签页id,不指定默认为激活的
|
:param tab_id: 要控制的标签页id,不指定默认为激活的
|
||||||
:return: None
|
:return: None
|
||||||
@ -140,7 +140,7 @@ class ChromiumPage(ChromiumBase):
|
|||||||
return ChromiumDownloadSetter(self)
|
return ChromiumDownloadSetter(self)
|
||||||
|
|
||||||
def get_tab(self, tab_id=None):
|
def get_tab(self, tab_id=None):
|
||||||
"""获取一个标签页对象 \n
|
"""获取一个标签页对象
|
||||||
:param tab_id: 要获取的标签页id,为None时获取当前tab
|
:param tab_id: 要获取的标签页id,为None时获取当前tab
|
||||||
:return: 标签页对象
|
:return: 标签页对象
|
||||||
"""
|
"""
|
||||||
@ -148,7 +148,7 @@ class ChromiumPage(ChromiumBase):
|
|||||||
return ChromiumTab(self, tab_id)
|
return ChromiumTab(self, tab_id)
|
||||||
|
|
||||||
def get_screenshot(self, path=None, as_bytes=None, full_page=False, left_top=None, right_bottom=None):
|
def get_screenshot(self, path=None, as_bytes=None, full_page=False, left_top=None, right_bottom=None):
|
||||||
"""对页面进行截图,可对整个网页、可见网页、指定范围截图。对可视范围外截图需要90以上版本浏览器支持 \n
|
"""对页面进行截图,可对整个网页、可见网页、指定范围截图。对可视范围外截图需要90以上版本浏览器支持
|
||||||
:param path: 完整路径,后缀可选 'jpg','jpeg','png','webp'
|
:param path: 完整路径,后缀可选 'jpg','jpeg','png','webp'
|
||||||
:param as_bytes: 是否已字节形式返回图片,可选 'jpg','jpeg','png','webp',生效时path参数无效
|
:param as_bytes: 是否已字节形式返回图片,可选 'jpg','jpeg','png','webp',生效时path参数无效
|
||||||
:param full_page: 是否整页截图,为True截取整个网页,为False截取可视窗口
|
:param full_page: 是否整页截图,为True截取整个网页,为False截取可视窗口
|
||||||
@ -204,7 +204,7 @@ class ChromiumPage(ChromiumBase):
|
|||||||
self._control_session.get(f'http://{self.address}/json/activate/{self.tab_id}')
|
self._control_session.get(f'http://{self.address}/json/activate/{self.tab_id}')
|
||||||
|
|
||||||
def new_tab(self, url=None, switch_to=True):
|
def new_tab(self, url=None, switch_to=True):
|
||||||
"""新建一个标签页,该标签页在最后面 \n
|
"""新建一个标签页,该标签页在最后面
|
||||||
:param url: 新标签页跳转到的网址
|
:param url: 新标签页跳转到的网址
|
||||||
:param switch_to: 新建标签页后是否把焦点移过去
|
:param switch_to: 新建标签页后是否把焦点移过去
|
||||||
:return: None
|
:return: None
|
||||||
@ -231,7 +231,7 @@ class ChromiumPage(ChromiumBase):
|
|||||||
self.run_cdp('Target.createTarget', url='')
|
self.run_cdp('Target.createTarget', url='')
|
||||||
|
|
||||||
def set_main_tab(self, tab_id=None):
|
def set_main_tab(self, tab_id=None):
|
||||||
"""设置主tab \n
|
"""设置主tab
|
||||||
:param tab_id: 标签页id,不传入则设置当前tab
|
:param tab_id: 标签页id,不传入则设置当前tab
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
@ -242,7 +242,7 @@ class ChromiumPage(ChromiumBase):
|
|||||||
self.to_tab(self._main_tab)
|
self.to_tab(self._main_tab)
|
||||||
|
|
||||||
def to_tab(self, tab_id=None, activate=True):
|
def to_tab(self, tab_id=None, activate=True):
|
||||||
"""跳转到标签页 \n
|
"""跳转到标签页
|
||||||
:param tab_id: 标签页id字符串,默认跳转到main_tab
|
:param tab_id: 标签页id字符串,默认跳转到main_tab
|
||||||
:param activate: 切换后是否变为活动状态
|
:param activate: 切换后是否变为活动状态
|
||||||
:return: None
|
:return: None
|
||||||
@ -250,7 +250,7 @@ class ChromiumPage(ChromiumBase):
|
|||||||
self._to_tab(tab_id, activate)
|
self._to_tab(tab_id, activate)
|
||||||
|
|
||||||
def _to_tab(self, tab_id=None, activate=True, read_doc=True):
|
def _to_tab(self, tab_id=None, activate=True, read_doc=True):
|
||||||
"""跳转到标签页 \n
|
"""跳转到标签页
|
||||||
:param tab_id: 标签页id字符串,默认跳转到main_tab
|
:param tab_id: 标签页id字符串,默认跳转到main_tab
|
||||||
:param activate: 切换后是否变为活动状态
|
:param activate: 切换后是否变为活动状态
|
||||||
:param read_doc: 切换后是否读取文档
|
:param read_doc: 切换后是否读取文档
|
||||||
@ -274,7 +274,7 @@ class ChromiumPage(ChromiumBase):
|
|||||||
self._get_document()
|
self._get_document()
|
||||||
|
|
||||||
def close_tabs(self, tab_ids=None, others=False):
|
def close_tabs(self, tab_ids=None, others=False):
|
||||||
"""关闭传入的标签页,默认关闭当前页。可传入多个 \n
|
"""关闭传入的标签页,默认关闭当前页。可传入多个
|
||||||
:param tab_ids: 要关闭的标签页id,可传入id组成的列表或元组,为None时关闭当前页
|
:param tab_ids: 要关闭的标签页id,可传入id组成的列表或元组,为None时关闭当前页
|
||||||
:param others: 是否关闭指定标签页之外的
|
:param others: 是否关闭指定标签页之外的
|
||||||
:return: None
|
:return: None
|
||||||
@ -309,14 +309,14 @@ class ChromiumPage(ChromiumBase):
|
|||||||
self.to_tab()
|
self.to_tab()
|
||||||
|
|
||||||
def close_other_tabs(self, tab_ids=None):
|
def close_other_tabs(self, tab_ids=None):
|
||||||
"""关闭传入的标签页以外标签页,默认保留当前页。可传入多个 \n
|
"""关闭传入的标签页以外标签页,默认保留当前页。可传入多个
|
||||||
:param tab_ids: 要保留的标签页id,可传入id组成的列表或元组,为None时保存当前页
|
:param tab_ids: 要保留的标签页id,可传入id组成的列表或元组,为None时保存当前页
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
self.close_tabs(tab_ids, True)
|
self.close_tabs(tab_ids, True)
|
||||||
|
|
||||||
def handle_alert(self, accept=True, send=None, timeout=None):
|
def handle_alert(self, accept=True, send=None, timeout=None):
|
||||||
"""处理提示框,可以自动等待提示框出现 \n
|
"""处理提示框,可以自动等待提示框出现
|
||||||
:param accept: True表示确认,False表示取消,其它值不会按按钮但依然返回文本值
|
:param accept: True表示确认,False表示取消,其它值不会按按钮但依然返回文本值
|
||||||
:param send: 处理prompt提示框时可输入文本
|
:param send: 处理prompt提示框时可输入文本
|
||||||
:param timeout: 等待提示框出现的超时时间,为None则使用self.timeout属性的值
|
:param timeout: 等待提示框出现的超时时间,为None则使用self.timeout属性的值
|
||||||
@ -426,7 +426,7 @@ class WindowSetter(object):
|
|||||||
self._perform({'windowState': 'normal'})
|
self._perform({'windowState': 'normal'})
|
||||||
|
|
||||||
def size(self, width=None, height=None):
|
def size(self, width=None, height=None):
|
||||||
"""设置窗口大小 \n
|
"""设置窗口大小
|
||||||
:param width: 窗口宽度
|
:param width: 窗口宽度
|
||||||
:param height: 窗口高度
|
:param height: 窗口高度
|
||||||
:return: None
|
:return: None
|
||||||
@ -438,7 +438,7 @@ class WindowSetter(object):
|
|||||||
self._perform({'width': width, 'height': height})
|
self._perform({'width': width, 'height': height})
|
||||||
|
|
||||||
def location(self, x=None, y=None):
|
def location(self, x=None, y=None):
|
||||||
"""设置窗口在屏幕中的位置,相对左上角坐标 \n
|
"""设置窗口在屏幕中的位置,相对左上角坐标
|
||||||
:param x: 距离顶部距离
|
:param x: 距离顶部距离
|
||||||
:param y: 距离左边距离
|
:param y: 距离左边距离
|
||||||
:return: None
|
:return: None
|
||||||
|
@ -307,11 +307,12 @@ class ChromiumOptions(object):
|
|||||||
|
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def auto_port(self, data_path):
|
def auto_port(self, data_path=None):
|
||||||
"""自动获取可用端口 \n
|
"""自动获取可用端口 \n
|
||||||
:param data_path: 用户文件夹保存路径
|
:param data_path: 用户文件夹保存路径,为None则保存在当前路径
|
||||||
:return: 当前对象
|
:return: 当前对象
|
||||||
"""
|
"""
|
||||||
|
data_path = data_path or ''
|
||||||
port, path = PortFinder().get_port(data_path)
|
port, path = PortFinder().get_port(data_path)
|
||||||
self.set_paths(local_port=port, user_data_path=path)
|
self.set_paths(local_port=port, user_data_path=path)
|
||||||
return self
|
return self
|
||||||
|
@ -93,7 +93,7 @@ class ChromiumOptions(object):
|
|||||||
debugger_address: str = None, download_path: Union[str, Path] = None,
|
debugger_address: str = None, download_path: Union[str, Path] = None,
|
||||||
user_data_path: Union[str, Path] = None, cache_path: Union[str, Path] = None) -> ChromiumOptions: ...
|
user_data_path: Union[str, Path] = None, cache_path: Union[str, Path] = None) -> ChromiumOptions: ...
|
||||||
|
|
||||||
def auto_port(self, data_path: Union[str, Path]) -> ChromiumOptions: ...
|
def auto_port(self, data_path: Union[str, Path]=None) -> ChromiumOptions: ...
|
||||||
|
|
||||||
def save(self, path: Union[str, Path] = None) -> str: ...
|
def save(self, path: Union[str, Path] = None) -> str: ...
|
||||||
|
|
||||||
|
@ -75,7 +75,7 @@ class SessionOptions(object):
|
|||||||
return self._download_path
|
return self._download_path
|
||||||
|
|
||||||
def set_paths(self, download_path=None):
|
def set_paths(self, download_path=None):
|
||||||
"""设置默认下载路径 \n
|
"""设置默认下载路径
|
||||||
:param download_path: 下载路径
|
:param download_path: 下载路径
|
||||||
:return: 返回当前对象
|
:return: 返回当前对象
|
||||||
"""
|
"""
|
||||||
@ -104,7 +104,7 @@ class SessionOptions(object):
|
|||||||
return self._proxies
|
return self._proxies
|
||||||
|
|
||||||
def set_proxies(self, http, https=None):
|
def set_proxies(self, http, https=None):
|
||||||
"""设置proxies参数 \n
|
"""设置proxies参数
|
||||||
:param http: http代理地址
|
:param http: http代理地址
|
||||||
:param https: https代理地址
|
:param https: https代理地址
|
||||||
:return: 返回当前对象
|
:return: 返回当前对象
|
||||||
@ -123,7 +123,7 @@ class SessionOptions(object):
|
|||||||
return self._headers
|
return self._headers
|
||||||
|
|
||||||
def set_headers(self, headers):
|
def set_headers(self, headers):
|
||||||
"""设置headers参数 \n
|
"""设置headers参数
|
||||||
:param headers: 参数值,传入None可在ini文件标记删除
|
:param headers: 参数值,传入None可在ini文件标记删除
|
||||||
:return: 返回当前对象
|
:return: 返回当前对象
|
||||||
"""
|
"""
|
||||||
@ -135,7 +135,7 @@ class SessionOptions(object):
|
|||||||
return self
|
return self
|
||||||
|
|
||||||
def set_a_header(self, attr, value):
|
def set_a_header(self, attr, value):
|
||||||
"""设置headers中一个项 \n
|
"""设置headers中一个项
|
||||||
:param attr: 设置名称
|
:param attr: 设置名称
|
||||||
:param value: 设置值
|
:param value: 设置值
|
||||||
:return: 返回当前对象
|
:return: 返回当前对象
|
||||||
@ -147,7 +147,7 @@ class SessionOptions(object):
|
|||||||
return self
|
return self
|
||||||
|
|
||||||
def remove_a_header(self, attr):
|
def remove_a_header(self, attr):
|
||||||
"""从headers中删除一个设置 \n
|
"""从headers中删除一个设置
|
||||||
:param attr: 要删除的设置
|
:param attr: 要删除的设置
|
||||||
:return: 返回当前对象
|
:return: 返回当前对象
|
||||||
"""
|
"""
|
||||||
@ -168,7 +168,7 @@ class SessionOptions(object):
|
|||||||
return self._cookies
|
return self._cookies
|
||||||
|
|
||||||
def set_cookies(self, cookies):
|
def set_cookies(self, cookies):
|
||||||
"""设置cookies信息 \n
|
"""设置cookies信息
|
||||||
:param cookies: cookies,可为CookieJar, list, tuple, str, dict,传入None可在ini文件标记删除
|
:param cookies: cookies,可为CookieJar, list, tuple, str, dict,传入None可在ini文件标记删除
|
||||||
:return: 返回当前对象
|
:return: 返回当前对象
|
||||||
"""
|
"""
|
||||||
@ -182,7 +182,7 @@ class SessionOptions(object):
|
|||||||
return self._auth
|
return self._auth
|
||||||
|
|
||||||
def set_auth(self, auth):
|
def set_auth(self, auth):
|
||||||
"""设置认证元组或对象 \n
|
"""设置认证元组或对象
|
||||||
:param auth: 认证元组或对象
|
:param auth: 认证元组或对象
|
||||||
:return: 返回当前对象
|
:return: 返回当前对象
|
||||||
"""
|
"""
|
||||||
@ -197,7 +197,7 @@ class SessionOptions(object):
|
|||||||
return self._hooks
|
return self._hooks
|
||||||
|
|
||||||
def set_hooks(self, hooks):
|
def set_hooks(self, hooks):
|
||||||
"""设置回调方法 \n
|
"""设置回调方法
|
||||||
:param hooks:
|
:param hooks:
|
||||||
:return: 返回当前对象
|
:return: 返回当前对象
|
||||||
"""
|
"""
|
||||||
@ -212,7 +212,7 @@ class SessionOptions(object):
|
|||||||
return self._params
|
return self._params
|
||||||
|
|
||||||
def set_params(self, params):
|
def set_params(self, params):
|
||||||
"""设置查询参数字典 \n
|
"""设置查询参数字典
|
||||||
:param params: 查询参数字典
|
:param params: 查询参数字典
|
||||||
:return: 返回当前对象
|
:return: 返回当前对象
|
||||||
"""
|
"""
|
||||||
@ -225,7 +225,7 @@ class SessionOptions(object):
|
|||||||
return self._verify
|
return self._verify
|
||||||
|
|
||||||
def set_verify(self, on_off):
|
def set_verify(self, on_off):
|
||||||
"""设置是否验证SSL证书 \n
|
"""设置是否验证SSL证书
|
||||||
:param on_off: 是否验证 SSL 证书
|
:param on_off: 是否验证 SSL 证书
|
||||||
:return: 返回当前对象
|
:return: 返回当前对象
|
||||||
"""
|
"""
|
||||||
@ -238,7 +238,7 @@ class SessionOptions(object):
|
|||||||
return self._cert
|
return self._cert
|
||||||
|
|
||||||
def set_cert(self, cert):
|
def set_cert(self, cert):
|
||||||
"""SSL客户端证书文件的路径(.pem格式),或(‘cert’, ‘key’)元组 \n
|
"""SSL客户端证书文件的路径(.pem格式),或(‘cert’, ‘key’)元组
|
||||||
:param cert: 证书路径或元组
|
:param cert: 证书路径或元组
|
||||||
:return: 返回当前对象
|
:return: 返回当前对象
|
||||||
"""
|
"""
|
||||||
@ -253,7 +253,7 @@ class SessionOptions(object):
|
|||||||
return self._adapters
|
return self._adapters
|
||||||
|
|
||||||
def add_adapter(self, url, adapter):
|
def add_adapter(self, url, adapter):
|
||||||
"""添加适配器 \n
|
"""添加适配器
|
||||||
:param url: 适配器对应url
|
:param url: 适配器对应url
|
||||||
:param adapter: 适配器对象
|
:param adapter: 适配器对象
|
||||||
:return: 返回当前对象
|
:return: 返回当前对象
|
||||||
@ -267,7 +267,7 @@ class SessionOptions(object):
|
|||||||
return self._stream
|
return self._stream
|
||||||
|
|
||||||
def set_stream(self, on_off):
|
def set_stream(self, on_off):
|
||||||
"""设置是否使用流式响应内容 \n
|
"""设置是否使用流式响应内容
|
||||||
:param on_off: 是否使用流式响应内容
|
:param on_off: 是否使用流式响应内容
|
||||||
:return: 返回当前对象
|
:return: 返回当前对象
|
||||||
"""
|
"""
|
||||||
@ -280,7 +280,7 @@ class SessionOptions(object):
|
|||||||
return self._trust_env
|
return self._trust_env
|
||||||
|
|
||||||
def set_trust_env(self, on_off):
|
def set_trust_env(self, on_off):
|
||||||
"""设置是否信任环境 \n
|
"""设置是否信任环境
|
||||||
:param on_off: 是否信任环境
|
:param on_off: 是否信任环境
|
||||||
:return: 返回当前对象
|
:return: 返回当前对象
|
||||||
"""
|
"""
|
||||||
@ -293,7 +293,7 @@ class SessionOptions(object):
|
|||||||
return self._max_redirects
|
return self._max_redirects
|
||||||
|
|
||||||
def set_max_redirects(self, times):
|
def set_max_redirects(self, times):
|
||||||
"""设置最大重定向次数 \n
|
"""设置最大重定向次数
|
||||||
:param times: 最大重定向次数
|
:param times: 最大重定向次数
|
||||||
:return: 返回当前对象
|
:return: 返回当前对象
|
||||||
"""
|
"""
|
||||||
@ -315,7 +315,7 @@ class SessionOptions(object):
|
|||||||
self._del_set.remove(arg)
|
self._del_set.remove(arg)
|
||||||
|
|
||||||
def save(self, path=None):
|
def save(self, path=None):
|
||||||
"""保存设置到文件 \n
|
"""保存设置到文件
|
||||||
:param path: ini文件的路径,传入 'default' 保存到默认ini文件
|
:param path: ini文件的路径,传入 'default' 保存到默认ini文件
|
||||||
:return: 保存文件的绝对路径
|
:return: 保存文件的绝对路径
|
||||||
"""
|
"""
|
||||||
@ -373,7 +373,7 @@ class SessionOptions(object):
|
|||||||
|
|
||||||
|
|
||||||
def session_options_to_dict(options):
|
def session_options_to_dict(options):
|
||||||
"""把session配置对象转换为字典 \n
|
"""把session配置对象转换为字典
|
||||||
:param options: session配置对象或字典
|
:param options: session配置对象或字典
|
||||||
:return: 配置字典
|
:return: 配置字典
|
||||||
"""
|
"""
|
||||||
|
@ -25,7 +25,7 @@ class Drission(object):
|
|||||||
"""Drission类用于管理WebDriver对象和Session对象,是驱动器的角色"""
|
"""Drission类用于管理WebDriver对象和Session对象,是驱动器的角色"""
|
||||||
|
|
||||||
def __init__(self, driver_or_options=None, session_or_options=None, ini_path=None, proxy=None):
|
def __init__(self, driver_or_options=None, session_or_options=None, ini_path=None, proxy=None):
|
||||||
"""初始化,可接收现成的WebDriver和Session对象,或接收它们的配置信息生成对象 \n
|
"""初始化,可接收现成的WebDriver和Session对象,或接收它们的配置信息生成对象
|
||||||
:param driver_or_options: driver对象或DriverOptions、Options类,传入False则创建空配置对象
|
:param driver_or_options: driver对象或DriverOptions、Options类,传入False则创建空配置对象
|
||||||
:param session_or_options: Session对象或设置字典,传入False则创建空配置对象
|
:param session_or_options: Session对象或设置字典,传入False则创建空配置对象
|
||||||
:param ini_path: ini文件路径
|
:param ini_path: ini文件路径
|
||||||
@ -93,7 +93,7 @@ class Drission(object):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def driver(self):
|
def driver(self):
|
||||||
"""返回WebDriver对象,如未初始化则按配置信息创建。 \n
|
"""返回WebDriver对象,如未初始化则按配置信息创建。
|
||||||
如设置了本地调试浏览器,可自动接入或打开浏览器进程。
|
如设置了本地调试浏览器,可自动接入或打开浏览器进程。
|
||||||
"""
|
"""
|
||||||
if self._driver is None:
|
if self._driver is None:
|
||||||
@ -130,7 +130,7 @@ class Drission(object):
|
|||||||
|
|
||||||
@session_options.setter
|
@session_options.setter
|
||||||
def session_options(self, options):
|
def session_options(self, options):
|
||||||
"""设置session配置 \n
|
"""设置session配置
|
||||||
:param options: session配置字典
|
:param options: session配置字典
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
@ -144,7 +144,7 @@ class Drission(object):
|
|||||||
|
|
||||||
@proxy.setter
|
@proxy.setter
|
||||||
def proxy(self, proxies=None):
|
def proxy(self, proxies=None):
|
||||||
"""设置代理信息 \n
|
"""设置代理信息
|
||||||
:param proxies: 代理信息字典
|
:param proxies: 代理信息字典
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
@ -226,7 +226,7 @@ class Drission(object):
|
|||||||
ShowWindow(hd, sw)
|
ShowWindow(hd, sw)
|
||||||
|
|
||||||
def set_cookies(self, cookies, set_session=False, set_driver=False):
|
def set_cookies(self, cookies, set_session=False, set_driver=False):
|
||||||
"""设置cookies \n
|
"""设置cookies
|
||||||
:param cookies: cookies信息,可为CookieJar, list, tuple, str, dict
|
:param cookies: cookies信息,可为CookieJar, list, tuple, str, dict
|
||||||
:param set_session: 是否设置session的cookies
|
:param set_session: 是否设置session的cookies
|
||||||
:param set_driver: 是否设置driver的cookies
|
:param set_driver: 是否设置driver的cookies
|
||||||
@ -283,7 +283,7 @@ class Drission(object):
|
|||||||
self.driver.add_cookie(cookie)
|
self.driver.add_cookie(cookie)
|
||||||
|
|
||||||
def _set_session(self, data):
|
def _set_session(self, data):
|
||||||
"""根据传入字典对session进行设置 \n
|
"""根据传入字典对session进行设置
|
||||||
:param data: session配置字典
|
:param data: session配置字典
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
@ -302,7 +302,7 @@ class Drission(object):
|
|||||||
self._session.__setattr__(i, data[i])
|
self._session.__setattr__(i, data[i])
|
||||||
|
|
||||||
def cookies_to_session(self, copy_user_agent=False):
|
def cookies_to_session(self, copy_user_agent=False):
|
||||||
"""把driver对象的cookies复制到session对象 \n
|
"""把driver对象的cookies复制到session对象
|
||||||
:param copy_user_agent: 是否复制ua信息
|
:param copy_user_agent: 是否复制ua信息
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
@ -312,7 +312,7 @@ class Drission(object):
|
|||||||
self.set_cookies(self.driver.get_cookies(), set_session=True)
|
self.set_cookies(self.driver.get_cookies(), set_session=True)
|
||||||
|
|
||||||
def cookies_to_driver(self, url):
|
def cookies_to_driver(self, url):
|
||||||
"""把session对象的cookies复制到driver对象 \n
|
"""把session对象的cookies复制到driver对象
|
||||||
:param url: 作用域
|
:param url: 作用域
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
@ -362,7 +362,7 @@ class Drission(object):
|
|||||||
|
|
||||||
|
|
||||||
def user_agent_to_session(driver, session):
|
def user_agent_to_session(driver, session):
|
||||||
"""把driver的user-agent复制到session \n
|
"""把driver的user-agent复制到session
|
||||||
:param driver: 来源driver对象
|
:param driver: 来源driver对象
|
||||||
:param session: 目标session对象
|
:param session: 目标session对象
|
||||||
:return: None
|
:return: None
|
||||||
@ -374,7 +374,7 @@ def user_agent_to_session(driver, session):
|
|||||||
|
|
||||||
|
|
||||||
def create_driver(chrome_path, driver_path, options):
|
def create_driver(chrome_path, driver_path, options):
|
||||||
"""创建 WebDriver 对象 \n
|
"""创建 WebDriver 对象
|
||||||
:param chrome_path: chrome.exe 路径
|
:param chrome_path: chrome.exe 路径
|
||||||
:param driver_path: chromedriver.exe 路径
|
:param driver_path: chromedriver.exe 路径
|
||||||
:param options: Options 对象
|
:param options: Options 对象
|
||||||
@ -431,7 +431,7 @@ def get_chrome_hwnds_from_pid(pid):
|
|||||||
|
|
||||||
|
|
||||||
def kill_progress(pid=None, port=None):
|
def kill_progress(pid=None, port=None):
|
||||||
"""关闭浏览器进程 \n
|
"""关闭浏览器进程
|
||||||
:param pid: 进程id
|
:param pid: 进程id
|
||||||
:param port: 端口号,如没有进程id,从端口号获取
|
:param port: 端口号,如没有进程id,从端口号获取
|
||||||
:return: 是否成功
|
:return: 是否成功
|
||||||
|
@ -25,7 +25,7 @@ class DriverElement(DrissionElement):
|
|||||||
"""driver模式的元素对象,包装了一个WebElement对象,并封装了常用功能"""
|
"""driver模式的元素对象,包装了一个WebElement对象,并封装了常用功能"""
|
||||||
|
|
||||||
def __init__(self, ele, page=None):
|
def __init__(self, ele, page=None):
|
||||||
"""初始化对象 \n
|
"""初始化对象
|
||||||
:param ele: 被包装的WebElement元素
|
:param ele: 被包装的WebElement元素
|
||||||
:param page: 元素所在页面
|
:param page: 元素所在页面
|
||||||
"""
|
"""
|
||||||
@ -39,8 +39,8 @@ class DriverElement(DrissionElement):
|
|||||||
return f'<DriverElement {self.tag} {" ".join(attrs)}>'
|
return f'<DriverElement {self.tag} {" ".join(attrs)}>'
|
||||||
|
|
||||||
def __call__(self, loc_or_str, timeout=None):
|
def __call__(self, loc_or_str, timeout=None):
|
||||||
"""在内部查找元素 \n
|
"""在内部查找元素
|
||||||
例:ele2 = ele1('@id=ele_id') \n
|
例:ele2 = ele1('@id=ele_id')
|
||||||
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
||||||
:param timeout: 超时时间
|
:param timeout: 超时时间
|
||||||
:return: DriverElement对象或属性、文本
|
:return: DriverElement对象或属性、文本
|
||||||
@ -97,7 +97,7 @@ class DriverElement(DrissionElement):
|
|||||||
return self.inner_ele.get_attribute('innerText')
|
return self.inner_ele.get_attribute('innerText')
|
||||||
|
|
||||||
def attr(self, attr):
|
def attr(self, attr):
|
||||||
"""获取attribute属性值 \n
|
"""获取attribute属性值
|
||||||
:param attr: 属性名
|
:param attr: 属性名
|
||||||
:return: 属性值文本
|
:return: 属性值文本
|
||||||
"""
|
"""
|
||||||
@ -113,7 +113,7 @@ class DriverElement(DrissionElement):
|
|||||||
return format_html(self.inner_ele.get_attribute(attr))
|
return format_html(self.inner_ele.get_attribute(attr))
|
||||||
|
|
||||||
def ele(self, loc_or_str, timeout=None):
|
def ele(self, loc_or_str, timeout=None):
|
||||||
"""返回当前元素下级符合条件的第一个元素、属性或节点文本 \n
|
"""返回当前元素下级符合条件的第一个元素、属性或节点文本
|
||||||
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
||||||
:param timeout: 查找元素超时时间,默认与元素所在页面等待时间一致
|
:param timeout: 查找元素超时时间,默认与元素所在页面等待时间一致
|
||||||
:return: DriverElement对象或属性、文本
|
:return: DriverElement对象或属性、文本
|
||||||
@ -121,7 +121,7 @@ class DriverElement(DrissionElement):
|
|||||||
return self._ele(loc_or_str, timeout)
|
return self._ele(loc_or_str, timeout)
|
||||||
|
|
||||||
def eles(self, loc_or_str, timeout=None):
|
def eles(self, loc_or_str, timeout=None):
|
||||||
"""返回当前元素下级所有符合条件的子元素、属性或节点文本 \n
|
"""返回当前元素下级所有符合条件的子元素、属性或节点文本
|
||||||
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
||||||
:param timeout: 查找元素超时时间,默认与元素所在页面等待时间一致
|
:param timeout: 查找元素超时时间,默认与元素所在页面等待时间一致
|
||||||
:return: DriverElement对象或属性、文本组成的列表
|
:return: DriverElement对象或属性、文本组成的列表
|
||||||
@ -129,21 +129,21 @@ class DriverElement(DrissionElement):
|
|||||||
return self._ele(loc_or_str, timeout=timeout, single=False)
|
return self._ele(loc_or_str, timeout=timeout, single=False)
|
||||||
|
|
||||||
def s_ele(self, loc_or_str=None):
|
def s_ele(self, loc_or_str=None):
|
||||||
"""查找第一个符合条件的元素以SessionElement形式返回,处理复杂页面时效率很高 \n
|
"""查找第一个符合条件的元素以SessionElement形式返回,处理复杂页面时效率很高
|
||||||
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
||||||
:return: SessionElement对象或属性、文本
|
:return: SessionElement对象或属性、文本
|
||||||
"""
|
"""
|
||||||
return make_session_ele(self, loc_or_str)
|
return make_session_ele(self, loc_or_str)
|
||||||
|
|
||||||
def s_eles(self, loc_or_str):
|
def s_eles(self, loc_or_str):
|
||||||
"""查找所有符合条件的元素以SessionElement列表形式返回 \n
|
"""查找所有符合条件的元素以SessionElement列表形式返回
|
||||||
:param loc_or_str: 定位符
|
:param loc_or_str: 定位符
|
||||||
:return: SessionElement或属性、文本组成的列表
|
:return: SessionElement或属性、文本组成的列表
|
||||||
"""
|
"""
|
||||||
return make_session_ele(self, loc_or_str, single=False)
|
return make_session_ele(self, loc_or_str, single=False)
|
||||||
|
|
||||||
def _ele(self, loc_or_str, timeout=None, single=True, relative=False):
|
def _ele(self, loc_or_str, timeout=None, single=True, relative=False):
|
||||||
"""返回当前元素下级符合条件的子元素、属性或节点文本,默认返回第一个 \n
|
"""返回当前元素下级符合条件的子元素、属性或节点文本,默认返回第一个
|
||||||
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
||||||
:param timeout: 查找元素超时时间
|
:param timeout: 查找元素超时时间
|
||||||
:param single: True则返回第一个,False则返回全部
|
:param single: True则返回第一个,False则返回全部
|
||||||
@ -247,14 +247,14 @@ class DriverElement(DrissionElement):
|
|||||||
return self._scroll
|
return self._scroll
|
||||||
|
|
||||||
def parent(self, level_or_loc=1):
|
def parent(self, level_or_loc=1):
|
||||||
"""返回上面某一级父元素,可指定层数或用查询语法定位 \n
|
"""返回上面某一级父元素,可指定层数或用查询语法定位
|
||||||
:param level_or_loc: 第几级父元素,或定位符
|
:param level_or_loc: 第几级父元素,或定位符
|
||||||
:return: 上级元素对象
|
:return: 上级元素对象
|
||||||
"""
|
"""
|
||||||
return super().parent(level_or_loc)
|
return super().parent(level_or_loc)
|
||||||
|
|
||||||
def prev(self, index=1, filter_loc='', timeout=0):
|
def prev(self, index=1, filter_loc='', timeout=0):
|
||||||
"""返回前面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 \n
|
"""返回前面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个
|
||||||
:param index: 前面第几个查询结果元素
|
:param index: 前面第几个查询结果元素
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
@ -264,7 +264,7 @@ class DriverElement(DrissionElement):
|
|||||||
return super().prev(index, filter_loc, timeout)
|
return super().prev(index, filter_loc, timeout)
|
||||||
|
|
||||||
def next(self, index=1, filter_loc='', timeout=0):
|
def next(self, index=1, filter_loc='', timeout=0):
|
||||||
"""返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 \n
|
"""返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个
|
||||||
:param index: 后面第几个查询结果元素
|
:param index: 后面第几个查询结果元素
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
@ -274,7 +274,7 @@ class DriverElement(DrissionElement):
|
|||||||
return super().next(index, filter_loc, timeout)
|
return super().next(index, filter_loc, timeout)
|
||||||
|
|
||||||
def before(self, index=1, filter_loc='', timeout=None):
|
def before(self, index=1, filter_loc='', timeout=None):
|
||||||
"""返回当前元素前面的一个元素,可指定筛选条件和第几个。查找范围不限兄弟元,而是整个DOM文档 \n
|
"""返回当前元素前面的一个元素,可指定筛选条件和第几个。查找范围不限兄弟元,而是整个DOM文档
|
||||||
:param index: 前面第几个查询结果元素
|
:param index: 前面第几个查询结果元素
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
@ -284,7 +284,7 @@ class DriverElement(DrissionElement):
|
|||||||
return super().before(index, filter_loc, timeout)
|
return super().before(index, filter_loc, timeout)
|
||||||
|
|
||||||
def after(self, index=1, filter_loc='', timeout=None):
|
def after(self, index=1, filter_loc='', timeout=None):
|
||||||
"""返回当前元素后面的一个元素,可指定筛选条件和第几个。查找范围不限兄弟元,而是整个DOM文档 \n
|
"""返回当前元素后面的一个元素,可指定筛选条件和第几个。查找范围不限兄弟元,而是整个DOM文档
|
||||||
:param index: 后面第几个查询结果元素
|
:param index: 后面第几个查询结果元素
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
@ -294,7 +294,7 @@ class DriverElement(DrissionElement):
|
|||||||
return super().after(index, filter_loc, timeout)
|
return super().after(index, filter_loc, timeout)
|
||||||
|
|
||||||
def prevs(self, filter_loc='', timeout=0):
|
def prevs(self, filter_loc='', timeout=0):
|
||||||
"""返回前面全部兄弟元素或节点组成的列表,可用查询语法筛选 \n
|
"""返回前面全部兄弟元素或节点组成的列表,可用查询语法筛选
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
:return: 兄弟元素或节点文本组成的列表
|
:return: 兄弟元素或节点文本组成的列表
|
||||||
@ -302,7 +302,7 @@ class DriverElement(DrissionElement):
|
|||||||
return super().prevs(filter_loc, timeout)
|
return super().prevs(filter_loc, timeout)
|
||||||
|
|
||||||
def nexts(self, filter_loc='', timeout=0):
|
def nexts(self, filter_loc='', timeout=0):
|
||||||
"""返回后面全部兄弟元素或节点组成的列表,可用查询语法筛选 \n
|
"""返回后面全部兄弟元素或节点组成的列表,可用查询语法筛选
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
:return: 兄弟元素或节点文本组成的列表
|
:return: 兄弟元素或节点文本组成的列表
|
||||||
@ -310,7 +310,7 @@ class DriverElement(DrissionElement):
|
|||||||
return super().nexts(filter_loc, timeout)
|
return super().nexts(filter_loc, timeout)
|
||||||
|
|
||||||
def befores(self, filter_loc='', timeout=None):
|
def befores(self, filter_loc='', timeout=None):
|
||||||
"""返回当前元素后面符合条件的全部兄弟元素或节点组成的列表,可用查询语法筛选。查找范围不限兄弟元,而是整个DOM文档 \n
|
"""返回当前元素后面符合条件的全部兄弟元素或节点组成的列表,可用查询语法筛选。查找范围不限兄弟元,而是整个DOM文档
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
:return: 本元素前面的元素或节点组成的列表
|
:return: 本元素前面的元素或节点组成的列表
|
||||||
@ -318,7 +318,7 @@ class DriverElement(DrissionElement):
|
|||||||
return super().befores(filter_loc, timeout)
|
return super().befores(filter_loc, timeout)
|
||||||
|
|
||||||
def afters(self, filter_loc='', timeout=None):
|
def afters(self, filter_loc='', timeout=None):
|
||||||
"""返回当前元素前面符合条件的全部兄弟元素或节点组成的列表,可用查询语法筛选。查找范围不限兄弟元,而是整个DOM文档 \n
|
"""返回当前元素前面符合条件的全部兄弟元素或节点组成的列表,可用查询语法筛选。查找范围不限兄弟元,而是整个DOM文档
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
:return: 本元素后面的元素或节点组成的列表
|
:return: 本元素后面的元素或节点组成的列表
|
||||||
@ -326,7 +326,7 @@ class DriverElement(DrissionElement):
|
|||||||
return super().afters(filter_loc, timeout)
|
return super().afters(filter_loc, timeout)
|
||||||
|
|
||||||
def left(self, index=1, filter_loc=''):
|
def left(self, index=1, filter_loc=''):
|
||||||
"""获取网页上显示在当前元素左边的某个元素,可设置选取条件,可指定结果中第几个 \n
|
"""获取网页上显示在当前元素左边的某个元素,可设置选取条件,可指定结果中第几个
|
||||||
:param index: 获取第几个
|
:param index: 获取第几个
|
||||||
:param filter_loc: 筛选条件,可用selenium的(By, str),也可用本库定位语法
|
:param filter_loc: 筛选条件,可用selenium的(By, str),也可用本库定位语法
|
||||||
:return: DriverElement对象
|
:return: DriverElement对象
|
||||||
@ -335,7 +335,7 @@ class DriverElement(DrissionElement):
|
|||||||
return eles[index - 1] if index <= len(eles) else None
|
return eles[index - 1] if index <= len(eles) else None
|
||||||
|
|
||||||
def right(self, index=1, filter_loc=''):
|
def right(self, index=1, filter_loc=''):
|
||||||
"""获取网页上显示在当前元素右边的某个元素,可设置选取条件,可指定结果中第几个 \n
|
"""获取网页上显示在当前元素右边的某个元素,可设置选取条件,可指定结果中第几个
|
||||||
:param index: 获取第几个
|
:param index: 获取第几个
|
||||||
:param filter_loc: 筛选条件,可用selenium的(By, str),也可用本库定位语法
|
:param filter_loc: 筛选条件,可用selenium的(By, str),也可用本库定位语法
|
||||||
:return: DriverElement对象
|
:return: DriverElement对象
|
||||||
@ -344,7 +344,7 @@ class DriverElement(DrissionElement):
|
|||||||
return eles[index - 1] if index <= len(eles) else None
|
return eles[index - 1] if index <= len(eles) else None
|
||||||
|
|
||||||
def above(self, index=1, filter_loc=''):
|
def above(self, index=1, filter_loc=''):
|
||||||
"""获取网页上显示在当前元素上边的某个元素,可设置选取条件,可指定结果中第几个 \n
|
"""获取网页上显示在当前元素上边的某个元素,可设置选取条件,可指定结果中第几个
|
||||||
:param index: 获取第几个
|
:param index: 获取第几个
|
||||||
:param filter_loc: 筛选条件,可用selenium的(By, str),也可用本库定位语法
|
:param filter_loc: 筛选条件,可用selenium的(By, str),也可用本库定位语法
|
||||||
:return: DriverElement对象
|
:return: DriverElement对象
|
||||||
@ -353,7 +353,7 @@ class DriverElement(DrissionElement):
|
|||||||
return eles[index - 1] if index <= len(eles) else None
|
return eles[index - 1] if index <= len(eles) else None
|
||||||
|
|
||||||
def below(self, index=1, filter_loc=''):
|
def below(self, index=1, filter_loc=''):
|
||||||
"""获取网页上显示在当前元素下边的某个元素,可设置选取条件,可指定结果中第几个 \n
|
"""获取网页上显示在当前元素下边的某个元素,可设置选取条件,可指定结果中第几个
|
||||||
:param index: 获取第几个
|
:param index: 获取第几个
|
||||||
:param filter_loc: 筛选条件,可用selenium的(By, str),也可用本库定位语法
|
:param filter_loc: 筛选条件,可用selenium的(By, str),也可用本库定位语法
|
||||||
:return: DriverElement对象
|
:return: DriverElement对象
|
||||||
@ -362,7 +362,7 @@ class DriverElement(DrissionElement):
|
|||||||
return eles[index - 1] if index <= len(eles) else None
|
return eles[index - 1] if index <= len(eles) else None
|
||||||
|
|
||||||
def near(self, index=1, filter_loc=''):
|
def near(self, index=1, filter_loc=''):
|
||||||
"""获取网页上显示在当前元素最近的某个元素,可设置选取条件,可指定结果中第几个 \n
|
"""获取网页上显示在当前元素最近的某个元素,可设置选取条件,可指定结果中第几个
|
||||||
:param index: 获取第几个
|
:param index: 获取第几个
|
||||||
:param filter_loc: 筛选条件,可用selenium的(By, str),也可用本库定位语法
|
:param filter_loc: 筛选条件,可用selenium的(By, str),也可用本库定位语法
|
||||||
:return: DriverElement对象
|
:return: DriverElement对象
|
||||||
@ -371,42 +371,42 @@ class DriverElement(DrissionElement):
|
|||||||
return eles[index - 1] if index <= len(eles) else None
|
return eles[index - 1] if index <= len(eles) else None
|
||||||
|
|
||||||
def lefts(self, filter_loc=''):
|
def lefts(self, filter_loc=''):
|
||||||
"""获取网页上显示在当前元素左边的所有元素,可设置选取条件,从近到远排列 \n
|
"""获取网页上显示在当前元素左边的所有元素,可设置选取条件,从近到远排列
|
||||||
:param filter_loc: 筛选条件,可用selenium的(By, str),也可用本库定位语法
|
:param filter_loc: 筛选条件,可用selenium的(By, str),也可用本库定位语法
|
||||||
:return: DriverElement对象组成的列表
|
:return: DriverElement对象组成的列表
|
||||||
"""
|
"""
|
||||||
return self._get_relative_eles('left', filter_loc)
|
return self._get_relative_eles('left', filter_loc)
|
||||||
|
|
||||||
def rights(self, filter_loc=''):
|
def rights(self, filter_loc=''):
|
||||||
"""获取网页上显示在当前元素右边的所有元,可设置选取条件,从近到远排列 \n
|
"""获取网页上显示在当前元素右边的所有元,可设置选取条件,从近到远排列
|
||||||
:param filter_loc: 筛选条件,可用selenium的(By, str),也可用本库定位语法
|
:param filter_loc: 筛选条件,可用selenium的(By, str),也可用本库定位语法
|
||||||
:return: DriverElement对象组成的列表
|
:return: DriverElement对象组成的列表
|
||||||
"""
|
"""
|
||||||
return self._get_relative_eles('right', filter_loc)
|
return self._get_relative_eles('right', filter_loc)
|
||||||
|
|
||||||
def aboves(self, filter_loc=''):
|
def aboves(self, filter_loc=''):
|
||||||
"""获取网页上显示在当前元素上边的所有元素,可设置选取条件,从近到远排列 \n
|
"""获取网页上显示在当前元素上边的所有元素,可设置选取条件,从近到远排列
|
||||||
:param filter_loc: 筛选条件,可用selenium的(By, str),也可用本库定位语法
|
:param filter_loc: 筛选条件,可用selenium的(By, str),也可用本库定位语法
|
||||||
:return: DriverElement对象组成的列表
|
:return: DriverElement对象组成的列表
|
||||||
"""
|
"""
|
||||||
return self._get_relative_eles('left', filter_loc)
|
return self._get_relative_eles('left', filter_loc)
|
||||||
|
|
||||||
def belows(self, filter_loc=''):
|
def belows(self, filter_loc=''):
|
||||||
"""获取网页上显示在当前元素下边的所有元素,可设置选取条件,从近到远排列 \n
|
"""获取网页上显示在当前元素下边的所有元素,可设置选取条件,从近到远排列
|
||||||
:param filter_loc: 筛选条件,可用selenium的(By, str),也可用本库定位语法
|
:param filter_loc: 筛选条件,可用selenium的(By, str),也可用本库定位语法
|
||||||
:return: DriverElement对象组成的列表
|
:return: DriverElement对象组成的列表
|
||||||
"""
|
"""
|
||||||
return self._get_relative_eles('left', filter_loc)
|
return self._get_relative_eles('left', filter_loc)
|
||||||
|
|
||||||
def nears(self, filter_loc=''):
|
def nears(self, filter_loc=''):
|
||||||
"""获取网页上显示在当前元素附近元素,可设置选取条件,从近到远排列 \n
|
"""获取网页上显示在当前元素附近元素,可设置选取条件,从近到远排列
|
||||||
:param filter_loc: 筛选条件,可用selenium的(By, str),也可用本库定位语法
|
:param filter_loc: 筛选条件,可用selenium的(By, str),也可用本库定位语法
|
||||||
:return: DriverElement对象组成的列表
|
:return: DriverElement对象组成的列表
|
||||||
"""
|
"""
|
||||||
return self._get_relative_eles('near', filter_loc)
|
return self._get_relative_eles('near', filter_loc)
|
||||||
|
|
||||||
def wait_ele(self, loc_or_ele, timeout=None):
|
def wait_ele(self, loc_or_ele, timeout=None):
|
||||||
"""等待子元素从dom删除、显示、隐藏 \n
|
"""等待子元素从dom删除、显示、隐藏
|
||||||
:param loc_or_ele: 可以是元素、查询字符串、loc元组
|
:param loc_or_ele: 可以是元素、查询字符串、loc元组
|
||||||
:param timeout: 等待超时时间
|
:param timeout: 等待超时时间
|
||||||
:return: 等待是否成功
|
:return: 等待是否成功
|
||||||
@ -414,7 +414,7 @@ class DriverElement(DrissionElement):
|
|||||||
return ElementWaiter(self, loc_or_ele, timeout)
|
return ElementWaiter(self, loc_or_ele, timeout)
|
||||||
|
|
||||||
def style(self, style, pseudo_ele=''):
|
def style(self, style, pseudo_ele=''):
|
||||||
"""返回元素样式属性值,可获取伪元素属性值 \n
|
"""返回元素样式属性值,可获取伪元素属性值
|
||||||
:param style: 样式属性名称
|
:param style: 样式属性名称
|
||||||
:param pseudo_ele: 伪元素名称(如有)
|
:param pseudo_ele: 伪元素名称(如有)
|
||||||
:return: 样式属性的值
|
:return: 样式属性的值
|
||||||
@ -426,8 +426,8 @@ class DriverElement(DrissionElement):
|
|||||||
return None if r == 'none' else r
|
return None if r == 'none' else r
|
||||||
|
|
||||||
def click(self, by_js=None, timeout=None):
|
def click(self, by_js=None, timeout=None):
|
||||||
"""点击元素 \n
|
"""点击元素
|
||||||
尝试点击直到超时,若都失败就改用js点击 \n
|
尝试点击直到超时,若都失败就改用js点击
|
||||||
:param by_js: 是否用js点击,为True时直接用js点击,为False时重试失败也不会改用js
|
:param by_js: 是否用js点击,为True时直接用js点击,为False时重试失败也不会改用js
|
||||||
:param timeout: 尝试点击的超时时间,不指定则使用父页面的超时时间
|
:param timeout: 尝试点击的超时时间,不指定则使用父页面的超时时间
|
||||||
:return: 是否点击成功
|
:return: 是否点击成功
|
||||||
@ -458,7 +458,7 @@ class DriverElement(DrissionElement):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
def click_at(self, x=None, y=None, by_js=False):
|
def click_at(self, x=None, y=None, by_js=False):
|
||||||
"""带偏移量点击本元素,相对于左上角坐标。不传入x或y值时点击元素中点 \n
|
"""带偏移量点击本元素,相对于左上角坐标。不传入x或y值时点击元素中点
|
||||||
:param x: 相对元素左上角坐标的x轴偏移量
|
:param x: 相对元素左上角坐标的x轴偏移量
|
||||||
:param y: 相对元素左上角坐标的y轴偏移量
|
:param y: 相对元素左上角坐标的y轴偏移量
|
||||||
:param by_js: 是否用js点击
|
:param by_js: 是否用js点击
|
||||||
@ -489,7 +489,7 @@ class DriverElement(DrissionElement):
|
|||||||
ActionChains(self.page.driver).context_click(self.inner_ele).perform()
|
ActionChains(self.page.driver).context_click(self.inner_ele).perform()
|
||||||
|
|
||||||
def r_click_at(self, x=None, y=None):
|
def r_click_at(self, x=None, y=None):
|
||||||
"""带偏移量右键单击本元素,相对于左上角坐标。不传入x或y值时点击元素中点 \n
|
"""带偏移量右键单击本元素,相对于左上角坐标。不传入x或y值时点击元素中点
|
||||||
:param x: 相对元素左上角坐标的x轴偏移量
|
:param x: 相对元素左上角坐标的x轴偏移量
|
||||||
:param y: 相对元素左上角坐标的y轴偏移量
|
:param y: 相对元素左上角坐标的y轴偏移量
|
||||||
:return: None
|
:return: None
|
||||||
@ -500,7 +500,7 @@ class DriverElement(DrissionElement):
|
|||||||
ActionChains(self.page.driver).move_to_element_with_offset(self.inner_ele, x, y).context_click().perform()
|
ActionChains(self.page.driver).move_to_element_with_offset(self.inner_ele, x, y).context_click().perform()
|
||||||
|
|
||||||
def input(self, vals, clear=True, insure=True, timeout=None):
|
def input(self, vals, clear=True, insure=True, timeout=None):
|
||||||
"""输入文本或组合键,也可用于输入文件路径到input元素(文件间用\n间隔) \n
|
"""输入文本或组合键,也可用于输入文件路径到input元素(文件间用\n间隔)
|
||||||
:param vals: 文本值或按键组合
|
:param vals: 文本值或按键组合
|
||||||
:param clear: 输入前是否清空文本框
|
:param clear: 输入前是否清空文本框
|
||||||
:param insure: 确保输入正确,解决文本框有时输入失效的问题,不能用于输入组合键
|
:param insure: 确保输入正确,解决文本框有时输入失效的问题,不能用于输入组合键
|
||||||
@ -546,7 +546,7 @@ class DriverElement(DrissionElement):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def run_script(self, script, *args):
|
def run_script(self, script, *args):
|
||||||
"""执行js代码,代码中用arguments[0]表示自己 \n
|
"""执行js代码,代码中用arguments[0]表示自己
|
||||||
:param script: js文本
|
:param script: js文本
|
||||||
:param args: 传入的参数
|
:param args: 传入的参数
|
||||||
:return: js执行结果
|
:return: js执行结果
|
||||||
@ -562,7 +562,7 @@ class DriverElement(DrissionElement):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
def clear(self, insure=True):
|
def clear(self, insure=True):
|
||||||
"""清空元素文本 \n
|
"""清空元素文本
|
||||||
:param insure: 是否确保清空
|
:param insure: 是否确保清空
|
||||||
:return: 是否清空成功,不能清空的元素返回None
|
:return: 是否清空成功,不能清空的元素返回None
|
||||||
"""
|
"""
|
||||||
@ -597,7 +597,7 @@ class DriverElement(DrissionElement):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
def screenshot(self, path=None, filename=None, as_bytes=False):
|
def screenshot(self, path=None, filename=None, as_bytes=False):
|
||||||
"""对元素进行截图 \n
|
"""对元素进行截图
|
||||||
:param path: 保存路径
|
:param path: 保存路径
|
||||||
:param filename: 图片文件名,不传入时以元素tag name命名
|
:param filename: 图片文件名,不传入时以元素tag name命名
|
||||||
:param as_bytes: 是否已字节形式返回图片,为True时上面两个参数失效
|
:param as_bytes: 是否已字节形式返回图片,为True时上面两个参数失效
|
||||||
@ -627,14 +627,14 @@ class DriverElement(DrissionElement):
|
|||||||
return img_path
|
return img_path
|
||||||
|
|
||||||
def prop(self, prop):
|
def prop(self, prop):
|
||||||
"""获取property属性值 \n
|
"""获取property属性值
|
||||||
:param prop: 属性名
|
:param prop: 属性名
|
||||||
:return: 属性值文本
|
:return: 属性值文本
|
||||||
"""
|
"""
|
||||||
return format_html(self.inner_ele.get_property(prop))
|
return format_html(self.inner_ele.get_property(prop))
|
||||||
|
|
||||||
def set_prop(self, prop, value):
|
def set_prop(self, prop, value):
|
||||||
"""设置元素property属性 \n
|
"""设置元素property属性
|
||||||
:param prop: 属性名
|
:param prop: 属性名
|
||||||
:param value: 属性值
|
:param value: 属性值
|
||||||
:return: 是否设置成功
|
:return: 是否设置成功
|
||||||
@ -647,7 +647,7 @@ class DriverElement(DrissionElement):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
def set_attr(self, attr, value):
|
def set_attr(self, attr, value):
|
||||||
"""设置元素attribute属性 \n
|
"""设置元素attribute属性
|
||||||
:param attr: 属性名
|
:param attr: 属性名
|
||||||
:param value: 属性值
|
:param value: 属性值
|
||||||
:return: 是否设置成功
|
:return: 是否设置成功
|
||||||
@ -659,7 +659,7 @@ class DriverElement(DrissionElement):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
def remove_attr(self, attr):
|
def remove_attr(self, attr):
|
||||||
"""删除元素attribute属性 \n
|
"""删除元素attribute属性
|
||||||
:param attr: 属性名
|
:param attr: 属性名
|
||||||
:return: 是否删除成功
|
:return: 是否删除成功
|
||||||
"""
|
"""
|
||||||
@ -670,7 +670,7 @@ class DriverElement(DrissionElement):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
def drag(self, x, y, speed=40, shake=True):
|
def drag(self, x, y, speed=40, shake=True):
|
||||||
"""拖拽当前元素到相对位置 \n
|
"""拖拽当前元素到相对位置
|
||||||
:param x: x变化值
|
:param x: x变化值
|
||||||
:param y: y变化值
|
:param y: y变化值
|
||||||
:param speed: 拖动的速度,传入0即瞬间到达
|
:param speed: 拖动的速度,传入0即瞬间到达
|
||||||
@ -682,7 +682,7 @@ class DriverElement(DrissionElement):
|
|||||||
self.drag_to((x, y), speed, shake)
|
self.drag_to((x, y), speed, shake)
|
||||||
|
|
||||||
def drag_to(self, ele_or_loc, speed=40, shake=True):
|
def drag_to(self, ele_or_loc, speed=40, shake=True):
|
||||||
"""拖拽当前元素,目标为另一个元素或坐标元组 \n
|
"""拖拽当前元素,目标为另一个元素或坐标元组
|
||||||
:param ele_or_loc: 另一个元素或坐标元组,坐标为元素中点的坐标
|
:param ele_or_loc: 另一个元素或坐标元组,坐标为元素中点的坐标
|
||||||
:param speed: 拖动的速度,传入0即瞬间到达
|
:param speed: 拖动的速度,传入0即瞬间到达
|
||||||
:param shake: 是否随机抖动
|
:param shake: 是否随机抖动
|
||||||
@ -722,7 +722,7 @@ class DriverElement(DrissionElement):
|
|||||||
actions.release().perform()
|
actions.release().perform()
|
||||||
|
|
||||||
def hover(self, x=None, y=None):
|
def hover(self, x=None, y=None):
|
||||||
"""鼠标悬停,可接受偏移量,偏移量相对于元素左上角坐标。不传入x或y值时悬停在元素中点 \n
|
"""鼠标悬停,可接受偏移量,偏移量相对于元素左上角坐标。不传入x或y值时悬停在元素中点
|
||||||
:param x: 相对元素左上角坐标的x轴偏移量
|
:param x: 相对元素左上角坐标的x轴偏移量
|
||||||
:param y: 相对元素左上角坐标的y轴偏移量
|
:param y: 相对元素左上角坐标的y轴偏移量
|
||||||
:return: None
|
:return: None
|
||||||
@ -733,7 +733,7 @@ class DriverElement(DrissionElement):
|
|||||||
ActionChains(self.page.driver).move_to_element_with_offset(self.inner_ele, x, y).perform()
|
ActionChains(self.page.driver).move_to_element_with_offset(self.inner_ele, x, y).perform()
|
||||||
|
|
||||||
def _get_relative_eles(self, mode, loc=''):
|
def _get_relative_eles(self, mode, loc=''):
|
||||||
"""获取网页上相对于当前元素周围的某个元素,可设置选取条件 \n
|
"""获取网页上相对于当前元素周围的某个元素,可设置选取条件
|
||||||
:param mode: 可选:'left', 'right', 'above', 'below', 'near'
|
:param mode: 可选:'left', 'right', 'above', 'below', 'near'
|
||||||
:param loc: 筛选条件,可用selenium的(By, str),也可用本库定位语法
|
:param loc: 筛选条件,可用selenium的(By, str),也可用本库定位语法
|
||||||
:return: DriverElement对象
|
:return: DriverElement对象
|
||||||
@ -762,8 +762,8 @@ class DriverElement(DrissionElement):
|
|||||||
|
|
||||||
|
|
||||||
def make_driver_ele(page_or_ele, loc, single=True, timeout=None):
|
def make_driver_ele(page_or_ele, loc, single=True, timeout=None):
|
||||||
"""执行driver模式元素的查找 \n
|
"""执行driver模式元素的查找
|
||||||
页面查找元素及元素查找下级元素皆使用此方法 \n
|
页面查找元素及元素查找下级元素皆使用此方法
|
||||||
:param page_or_ele: DriverPage对象或DriverElement对象
|
:param page_or_ele: DriverPage对象或DriverElement对象
|
||||||
:param loc: 元素定位元组
|
:param loc: 元素定位元组
|
||||||
:param single: True则返回第一个,False则返回全部
|
:param single: True则返回第一个,False则返回全部
|
||||||
@ -939,7 +939,7 @@ class Select(object):
|
|||||||
self.select_ele = SeleniumSelect(ele.inner_ele)
|
self.select_ele = SeleniumSelect(ele.inner_ele)
|
||||||
|
|
||||||
def __call__(self, text_or_index, timeout=None):
|
def __call__(self, text_or_index, timeout=None):
|
||||||
"""选定下拉列表中子元素 \n
|
"""选定下拉列表中子元素
|
||||||
:param text_or_index: 根据文本、值选或序号择选项,若允许多选,传入list或tuple可多选
|
:param text_or_index: 根据文本、值选或序号择选项,若允许多选,传入list或tuple可多选
|
||||||
:param timeout: 超时时间,不输入默认实用页面超时时间
|
:param timeout: 超时时间,不输入默认实用页面超时时间
|
||||||
:return: None
|
:return: None
|
||||||
@ -959,7 +959,7 @@ class Select(object):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def selected_option(self):
|
def selected_option(self):
|
||||||
"""返回第一个被选中的option元素 \n
|
"""返回第一个被选中的option元素
|
||||||
:return: DriverElement对象或None
|
:return: DriverElement对象或None
|
||||||
"""
|
"""
|
||||||
ele = self.inner_ele.run_script('return arguments[0].options[arguments[0].selectedIndex];')
|
ele = self.inner_ele.run_script('return arguments[0].options[arguments[0].selectedIndex];')
|
||||||
@ -967,7 +967,7 @@ class Select(object):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def selected_options(self):
|
def selected_options(self):
|
||||||
"""返回所有被选中的option元素列表 \n
|
"""返回所有被选中的option元素列表
|
||||||
:return: DriverElement对象组成的列表
|
:return: DriverElement对象组成的列表
|
||||||
"""
|
"""
|
||||||
return [x for x in self.options if x.is_selected()]
|
return [x for x in self.options if x.is_selected()]
|
||||||
@ -977,7 +977,7 @@ class Select(object):
|
|||||||
self.select_ele.deselect_all()
|
self.select_ele.deselect_all()
|
||||||
|
|
||||||
def select(self, text_or_index, timeout=None):
|
def select(self, text_or_index, timeout=None):
|
||||||
"""选定下拉列表中子元素 \n
|
"""选定下拉列表中子元素
|
||||||
:param text_or_index: 根据文本、值选或序号择选项,若允许多选,传入list或tuple可多选
|
:param text_or_index: 根据文本、值选或序号择选项,若允许多选,传入list或tuple可多选
|
||||||
:param timeout: 超时时间,不输入默认实用页面超时时间
|
:param timeout: 超时时间,不输入默认实用页面超时时间
|
||||||
:return: 是否选择成功
|
:return: 是否选择成功
|
||||||
@ -987,7 +987,7 @@ class Select(object):
|
|||||||
return self._select(text_or_index, i, False, timeout)
|
return self._select(text_or_index, i, False, timeout)
|
||||||
|
|
||||||
def select_by_value(self, value, timeout=None):
|
def select_by_value(self, value, timeout=None):
|
||||||
"""此方法用于根据value值选择项。当元素是多选列表时,可以接收list或tuple \n
|
"""此方法用于根据value值选择项。当元素是多选列表时,可以接收list或tuple
|
||||||
:param value: value属性值,传入list或tuple可选择多项
|
:param value: value属性值,传入list或tuple可选择多项
|
||||||
:param timeout: 超时时间,不输入默认实用页面超时时间
|
:param timeout: 超时时间,不输入默认实用页面超时时间
|
||||||
:return: None
|
:return: None
|
||||||
@ -996,7 +996,7 @@ class Select(object):
|
|||||||
return self._select(value, 'value', False, timeout)
|
return self._select(value, 'value', False, timeout)
|
||||||
|
|
||||||
def deselect(self, text_or_index, timeout=None):
|
def deselect(self, text_or_index, timeout=None):
|
||||||
"""取消选定下拉列表中子元素 \n
|
"""取消选定下拉列表中子元素
|
||||||
:param text_or_index: 根据文本或序号取消择选项,若允许多选,传入list或tuple可取消多项
|
:param text_or_index: 根据文本或序号取消择选项,若允许多选,传入list或tuple可取消多项
|
||||||
:param timeout: 超时时间,不输入默认实用页面超时时间
|
:param timeout: 超时时间,不输入默认实用页面超时时间
|
||||||
:return: None
|
:return: None
|
||||||
@ -1006,7 +1006,7 @@ class Select(object):
|
|||||||
return self._select(text_or_index, i, True, timeout)
|
return self._select(text_or_index, i, True, timeout)
|
||||||
|
|
||||||
def deselect_by_value(self, value, timeout=None):
|
def deselect_by_value(self, value, timeout=None):
|
||||||
"""此方法用于根据value值取消选择项。当元素是多选列表时,可以接收list或tuple \n
|
"""此方法用于根据value值取消选择项。当元素是多选列表时,可以接收list或tuple
|
||||||
:param value: value属性值,传入list或tuple可取消多项
|
:param value: value属性值,传入list或tuple可取消多项
|
||||||
:param timeout: 超时时间,不输入默认实用页面超时时间
|
:param timeout: 超时时间,不输入默认实用页面超时时间
|
||||||
:return: None
|
:return: None
|
||||||
@ -1023,7 +1023,7 @@ class Select(object):
|
|||||||
i.click(by_js=True)
|
i.click(by_js=True)
|
||||||
|
|
||||||
def _select(self, text_value_index, para_type='text', deselect=False, timeout=None):
|
def _select(self, text_value_index, para_type='text', deselect=False, timeout=None):
|
||||||
"""选定或取消选定下拉列表中子元素 \n
|
"""选定或取消选定下拉列表中子元素
|
||||||
:param text_value_index: 根据文本、值选或序号择选项,若允许多选,传入list或tuple可多选
|
:param text_value_index: 根据文本、值选或序号择选项,若允许多选,传入list或tuple可多选
|
||||||
:param para_type: 参数类型,可选 'text'、'value'、'index'
|
:param para_type: 参数类型,可选 'text'、'value'、'index'
|
||||||
:param deselect: 是否取消选择
|
:param deselect: 是否取消选择
|
||||||
@ -1072,7 +1072,7 @@ class Select(object):
|
|||||||
raise TypeError('只能传入str、int、list和tuple类型。')
|
raise TypeError('只能传入str、int、list和tuple类型。')
|
||||||
|
|
||||||
def _select_multi(self, text_value_index=None, para_type='text', deselect=False) -> bool:
|
def _select_multi(self, text_value_index=None, para_type='text', deselect=False) -> bool:
|
||||||
"""选定或取消选定下拉列表中多个子元素 \n
|
"""选定或取消选定下拉列表中多个子元素
|
||||||
:param text_value_index: 根据文本、值选或序号择选多项
|
:param text_value_index: 根据文本、值选或序号择选多项
|
||||||
:param para_type: 参数类型,可选 'text'、'value'、'index'
|
:param para_type: 参数类型,可选 'text'、'value'、'index'
|
||||||
:param deselect: 是否取消选择
|
:param deselect: 是否取消选择
|
||||||
@ -1100,7 +1100,7 @@ class ElementWaiter(object):
|
|||||||
"""等待元素在dom中某种状态,如删除、显示、隐藏"""
|
"""等待元素在dom中某种状态,如删除、显示、隐藏"""
|
||||||
|
|
||||||
def __init__(self, page_or_ele, loc_or_ele, timeout=None):
|
def __init__(self, page_or_ele, loc_or_ele, timeout=None):
|
||||||
"""等待元素在dom中某种状态,如删除、显示、隐藏 \n
|
"""等待元素在dom中某种状态,如删除、显示、隐藏
|
||||||
:param page_or_ele: 页面或父元素
|
:param page_or_ele: 页面或父元素
|
||||||
:param loc_or_ele: 要等待的元素,可以是已有元素、定位符
|
:param loc_or_ele: 要等待的元素,可以是已有元素、定位符
|
||||||
:param timeout: 超时时间,默认读取页面超时时间
|
:param timeout: 超时时间,默认读取页面超时时间
|
||||||
@ -1142,7 +1142,7 @@ class ElementWaiter(object):
|
|||||||
return self._wait_ele('hidden')
|
return self._wait_ele('hidden')
|
||||||
|
|
||||||
def _wait_ele(self, mode):
|
def _wait_ele(self, mode):
|
||||||
"""执行等待 \n
|
"""执行等待
|
||||||
:param mode: 等待模式
|
:param mode: 等待模式
|
||||||
:return: 是否等待成功
|
:return: 是否等待成功
|
||||||
"""
|
"""
|
||||||
@ -1215,7 +1215,7 @@ class Scroll(object):
|
|||||||
self.driver.run_script(f'{self.t1}.scrollTo(0,{self.t2}.scrollTop);')
|
self.driver.run_script(f'{self.t1}.scrollTo(0,{self.t2}.scrollTop);')
|
||||||
|
|
||||||
def to_location(self, x, y):
|
def to_location(self, x, y):
|
||||||
"""滚动到指定位置 \n
|
"""滚动到指定位置
|
||||||
:param x: 水平距离
|
:param x: 水平距离
|
||||||
:param y: 垂直距离
|
:param y: 垂直距离
|
||||||
:return: None
|
:return: None
|
||||||
@ -1223,7 +1223,7 @@ class Scroll(object):
|
|||||||
self.driver.run_script(f'{self.t1}.scrollTo({x},{y});')
|
self.driver.run_script(f'{self.t1}.scrollTo({x},{y});')
|
||||||
|
|
||||||
def up(self, pixel=300):
|
def up(self, pixel=300):
|
||||||
"""向上滚动若干像素,水平位置不变 \n
|
"""向上滚动若干像素,水平位置不变
|
||||||
:param pixel: 滚动的像素
|
:param pixel: 滚动的像素
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
@ -1231,14 +1231,14 @@ class Scroll(object):
|
|||||||
self.driver.run_script(f'{self.t1}.scrollBy(0,{pixel});')
|
self.driver.run_script(f'{self.t1}.scrollBy(0,{pixel});')
|
||||||
|
|
||||||
def down(self, pixel=300):
|
def down(self, pixel=300):
|
||||||
"""向下滚动若干像素,水平位置不变 \n
|
"""向下滚动若干像素,水平位置不变
|
||||||
:param pixel: 滚动的像素
|
:param pixel: 滚动的像素
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
self.driver.run_script(f'{self.t1}.scrollBy(0,{pixel});')
|
self.driver.run_script(f'{self.t1}.scrollBy(0,{pixel});')
|
||||||
|
|
||||||
def left(self, pixel=300):
|
def left(self, pixel=300):
|
||||||
"""向左滚动若干像素,垂直位置不变 \n
|
"""向左滚动若干像素,垂直位置不变
|
||||||
:param pixel: 滚动的像素
|
:param pixel: 滚动的像素
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
@ -1246,7 +1246,7 @@ class Scroll(object):
|
|||||||
self.driver.run_script(f'{self.t1}.scrollBy({pixel},0);')
|
self.driver.run_script(f'{self.t1}.scrollBy({pixel},0);')
|
||||||
|
|
||||||
def right(self, pixel=300):
|
def right(self, pixel=300):
|
||||||
"""向右滚动若干像素,垂直位置不变 \n
|
"""向右滚动若干像素,垂直位置不变
|
||||||
:param pixel: 滚动的像素
|
:param pixel: 滚动的像素
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
|
@ -29,8 +29,8 @@ class DriverPage(BasePage):
|
|||||||
self._scroll = None
|
self._scroll = None
|
||||||
|
|
||||||
def __call__(self, loc_or_str, timeout=None):
|
def __call__(self, loc_or_str, timeout=None):
|
||||||
"""在内部查找元素 \n
|
"""在内部查找元素
|
||||||
例:ele = page('@id=ele_id') \n
|
例:ele = page('@id=ele_id')
|
||||||
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
||||||
:param timeout: 超时时间
|
:param timeout: 超时时间
|
||||||
:return: DriverElement对象或属性、文本
|
:return: DriverElement对象或属性、文本
|
||||||
@ -58,7 +58,7 @@ class DriverPage(BasePage):
|
|||||||
return loads(self('t:pre').text)
|
return loads(self('t:pre').text)
|
||||||
|
|
||||||
def get(self, url, show_errmsg=False, retry=None, interval=None):
|
def get(self, url, show_errmsg=False, retry=None, interval=None):
|
||||||
"""访问url \n
|
"""访问url
|
||||||
:param url: 目标url
|
:param url: 目标url
|
||||||
:param show_errmsg: 是否显示和抛出异常
|
:param show_errmsg: 是否显示和抛出异常
|
||||||
:param retry: 重试次数
|
:param retry: 重试次数
|
||||||
@ -70,7 +70,7 @@ class DriverPage(BasePage):
|
|||||||
return self._url_available
|
return self._url_available
|
||||||
|
|
||||||
def ele(self, loc_or_ele, timeout=None):
|
def ele(self, loc_or_ele, timeout=None):
|
||||||
"""返回页面中符合条件的第一个元素 \n
|
"""返回页面中符合条件的第一个元素
|
||||||
:param loc_or_ele: 元素的定位信息,可以是元素对象,loc元组,或查询字符串
|
:param loc_or_ele: 元素的定位信息,可以是元素对象,loc元组,或查询字符串
|
||||||
:param timeout: 查找元素超时时间,默认与页面等待时间一致
|
:param timeout: 查找元素超时时间,默认与页面等待时间一致
|
||||||
:return: DriverElement对象或属性、文本
|
:return: DriverElement对象或属性、文本
|
||||||
@ -78,7 +78,7 @@ class DriverPage(BasePage):
|
|||||||
return self._ele(loc_or_ele, timeout)
|
return self._ele(loc_or_ele, timeout)
|
||||||
|
|
||||||
def eles(self, loc_or_str, timeout=None):
|
def eles(self, loc_or_str, timeout=None):
|
||||||
"""返回页面中所有符合条件的元素 \n
|
"""返回页面中所有符合条件的元素
|
||||||
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
||||||
:param timeout: 查找元素超时时间,默认与页面等待时间一致
|
:param timeout: 查找元素超时时间,默认与页面等待时间一致
|
||||||
:return: DriverElement对象或属性、文本组成的列表
|
:return: DriverElement对象或属性、文本组成的列表
|
||||||
@ -86,7 +86,7 @@ class DriverPage(BasePage):
|
|||||||
return self._ele(loc_or_str, timeout, single=False)
|
return self._ele(loc_or_str, timeout, single=False)
|
||||||
|
|
||||||
def s_ele(self, loc_or_ele=None):
|
def s_ele(self, loc_or_ele=None):
|
||||||
"""查找第一个符合条件的元素以SessionElement形式返回,处理复杂页面时效率很高 \n
|
"""查找第一个符合条件的元素以SessionElement形式返回,处理复杂页面时效率很高
|
||||||
:param loc_or_ele: 元素的定位信息,可以是loc元组,或查询字符串
|
:param loc_or_ele: 元素的定位信息,可以是loc元组,或查询字符串
|
||||||
:return: SessionElement对象或属性、文本
|
:return: SessionElement对象或属性、文本
|
||||||
"""
|
"""
|
||||||
@ -96,14 +96,14 @@ class DriverPage(BasePage):
|
|||||||
return make_session_ele(self, loc_or_ele)
|
return make_session_ele(self, loc_or_ele)
|
||||||
|
|
||||||
def s_eles(self, loc_or_str):
|
def s_eles(self, loc_or_str):
|
||||||
"""查找所有符合条件的元素以SessionElement列表形式返回 \n
|
"""查找所有符合条件的元素以SessionElement列表形式返回
|
||||||
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
||||||
:return: SessionElement对象组成的列表
|
:return: SessionElement对象组成的列表
|
||||||
"""
|
"""
|
||||||
return make_session_ele(self, loc_or_str, single=False)
|
return make_session_ele(self, loc_or_str, single=False)
|
||||||
|
|
||||||
def _ele(self, loc_or_ele, timeout=None, single=True):
|
def _ele(self, loc_or_ele, timeout=None, single=True):
|
||||||
"""返回页面中符合条件的元素,默认返回第一个 \n
|
"""返回页面中符合条件的元素,默认返回第一个
|
||||||
:param loc_or_ele: 元素的定位信息,可以是元素对象,loc元组,或查询字符串
|
:param loc_or_ele: 元素的定位信息,可以是元素对象,loc元组,或查询字符串
|
||||||
:param timeout: 查找元素超时时间
|
:param timeout: 查找元素超时时间
|
||||||
:param single: True则返回第一个,False则返回全部
|
:param single: True则返回第一个,False则返回全部
|
||||||
@ -144,7 +144,7 @@ class DriverPage(BasePage):
|
|||||||
self._wait_object = None
|
self._wait_object = None
|
||||||
|
|
||||||
def _d_connect(self, to_url, times=0, interval=1, show_errmsg=False):
|
def _d_connect(self, to_url, times=0, interval=1, show_errmsg=False):
|
||||||
"""尝试连接,重试若干次 \n
|
"""尝试连接,重试若干次
|
||||||
:param to_url: 要访问的url
|
:param to_url: 要访问的url
|
||||||
:param times: 重试次数
|
:param times: 重试次数
|
||||||
:param interval: 重试间隔(秒)
|
:param interval: 重试间隔(秒)
|
||||||
@ -234,21 +234,21 @@ class DriverPage(BasePage):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def to_frame(self):
|
def to_frame(self):
|
||||||
"""用于跳转到frame的对象,调用其方法实现跳转 \n
|
"""用于跳转到frame的对象,调用其方法实现跳转
|
||||||
示例: \n
|
示例:
|
||||||
page.to_frame.by_loc('tag:iframe') - 通过传入frame的查询字符串定位 \n
|
page.to_frame.by_loc('tag:iframe') - 通过传入frame的查询字符串定位
|
||||||
page.to_frame.by_loc((By.TAG_NAME, 'iframe')) - 通过传入定位符定位 \n
|
page.to_frame.by_loc((By.TAG_NAME, 'iframe')) - 通过传入定位符定位
|
||||||
page.to_frame.by_id('iframe_id') - 通过frame的id属性定位 \n
|
page.to_frame.by_id('iframe_id') - 通过frame的id属性定位
|
||||||
page.to_frame('iframe_name') - 通过frame的name属性定位 \n
|
page.to_frame('iframe_name') - 通过frame的name属性定位
|
||||||
page.to_frame(iframe_element) - 通过传入元素对象定位 \n
|
page.to_frame(iframe_element) - 通过传入元素对象定位
|
||||||
page.to_frame(0) - 通过frame的序号定位 \n
|
page.to_frame(0) - 通过frame的序号定位
|
||||||
page.to_frame.main() - 跳到最顶层 \n
|
page.to_frame.main() - 跳到最顶层
|
||||||
page.to_frame.parent() - 跳到上一层
|
page.to_frame.parent() - 跳到上一层
|
||||||
"""
|
"""
|
||||||
return ToFrame(self)
|
return ToFrame(self)
|
||||||
|
|
||||||
def set_timeouts(self, implicit=None, pageLoad=None, script=None):
|
def set_timeouts(self, implicit=None, pageLoad=None, script=None):
|
||||||
"""设置超时时间,单位为秒,selenium4以上版本有效 \n
|
"""设置超时时间,单位为秒,selenium4以上版本有效
|
||||||
:param implicit: 查找元素超时时间
|
:param implicit: 查找元素超时时间
|
||||||
:param pageLoad: 页面加载超时时间
|
:param pageLoad: 页面加载超时时间
|
||||||
:param script: 脚本运行超时时间
|
:param script: 脚本运行超时时间
|
||||||
@ -264,7 +264,7 @@ class DriverPage(BasePage):
|
|||||||
self.driver.set_script_timeout(script)
|
self.driver.set_script_timeout(script)
|
||||||
|
|
||||||
def wait_ele(self, loc_or_ele, timeout=None):
|
def wait_ele(self, loc_or_ele, timeout=None):
|
||||||
"""等待元素从dom删除、显示、隐藏 \n
|
"""等待元素从dom删除、显示、隐藏
|
||||||
:param loc_or_ele: 可以是元素、查询字符串、loc元组
|
:param loc_or_ele: 可以是元素、查询字符串、loc元组
|
||||||
:param timeout: 等待超时时间
|
:param timeout: 等待超时时间
|
||||||
:return: 用于等待的ElementWaiter对象
|
:return: 用于等待的ElementWaiter对象
|
||||||
@ -272,13 +272,13 @@ class DriverPage(BasePage):
|
|||||||
return ElementWaiter(self, loc_or_ele, timeout)
|
return ElementWaiter(self, loc_or_ele, timeout)
|
||||||
|
|
||||||
def check_page(self):
|
def check_page(self):
|
||||||
"""检查页面是否符合预期 \n
|
"""检查页面是否符合预期
|
||||||
由子类自行实现各页面的判定规则
|
由子类自行实现各页面的判定规则
|
||||||
"""
|
"""
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def run_script(self, script, *args):
|
def run_script(self, script, *args):
|
||||||
"""执行js代码 \n
|
"""执行js代码
|
||||||
:param script: js文本
|
:param script: js文本
|
||||||
:param args: 传入的参数
|
:param args: 传入的参数
|
||||||
:return: js执行结果
|
:return: js执行结果
|
||||||
@ -286,7 +286,7 @@ class DriverPage(BasePage):
|
|||||||
return self.driver.execute_script(script, *args)
|
return self.driver.execute_script(script, *args)
|
||||||
|
|
||||||
def run_async_script(self, script, *args):
|
def run_async_script(self, script, *args):
|
||||||
"""以异步方式执行js代码 \n
|
"""以异步方式执行js代码
|
||||||
:param script: js文本
|
:param script: js文本
|
||||||
:param args: 传入的参数
|
:param args: 传入的参数
|
||||||
:return: js执行结果
|
:return: js执行结果
|
||||||
@ -302,7 +302,7 @@ class DriverPage(BasePage):
|
|||||||
return self.driver.execute_cdp_cmd(cmd, cmd_args)
|
return self.driver.execute_cdp_cmd(cmd, cmd_args)
|
||||||
|
|
||||||
def create_tab(self, url=''):
|
def create_tab(self, url=''):
|
||||||
"""新建并定位到一个标签页,该标签页在最后面 \n
|
"""新建并定位到一个标签页,该标签页在最后面
|
||||||
:param url: 新标签页跳转到的网址
|
:param url: 新标签页跳转到的网址
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
@ -311,8 +311,8 @@ class DriverPage(BasePage):
|
|||||||
self.get(url)
|
self.get(url)
|
||||||
|
|
||||||
def close_tabs(self, num_or_handles=None):
|
def close_tabs(self, num_or_handles=None):
|
||||||
"""关闭传入的标签页,默认关闭当前页。可传入多个 \n
|
"""关闭传入的标签页,默认关闭当前页。可传入多个
|
||||||
注意:当程序使用的是接管的浏览器,获取到的 handle 顺序和视觉效果不一致,不能按序号关闭。 \n
|
注意:当程序使用的是接管的浏览器,获取到的 handle 顺序和视觉效果不一致,不能按序号关闭。
|
||||||
:param num_or_handles:要关闭的标签页序号或handle,可传入handle和序号组成的列表或元组,为None时关闭当前页
|
:param num_or_handles:要关闭的标签页序号或handle,可传入handle和序号组成的列表或元组,为None时关闭当前页
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
@ -324,8 +324,8 @@ class DriverPage(BasePage):
|
|||||||
self.to_tab(0)
|
self.to_tab(0)
|
||||||
|
|
||||||
def close_other_tabs(self, num_or_handles=None):
|
def close_other_tabs(self, num_or_handles=None):
|
||||||
"""关闭传入的标签页以外标签页,默认保留当前页。可传入多个 \n
|
"""关闭传入的标签页以外标签页,默认保留当前页。可传入多个
|
||||||
注意:当程序使用的是接管的浏览器,获取到的 handle 顺序和视觉效果不一致,不能按序号关闭。 \n
|
注意:当程序使用的是接管的浏览器,获取到的 handle 顺序和视觉效果不一致,不能按序号关闭。
|
||||||
:param num_or_handles: 要保留的标签页序号或handle,可传入handle和序号组成的列表或元组,为None时保存当前页
|
:param num_or_handles: 要保留的标签页序号或handle,可传入handle和序号组成的列表或元组,为None时保存当前页
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
@ -339,8 +339,8 @@ class DriverPage(BasePage):
|
|||||||
self.to_tab(0)
|
self.to_tab(0)
|
||||||
|
|
||||||
def to_tab(self, num_or_handle=0):
|
def to_tab(self, num_or_handle=0):
|
||||||
"""跳转到标签页 \n
|
"""跳转到标签页
|
||||||
注意:当程序使用的是接管的浏览器,获取到的 handle 顺序和视觉效果不一致 \n
|
注意:当程序使用的是接管的浏览器,获取到的 handle 顺序和视觉效果不一致
|
||||||
:param num_or_handle: 标签页序号或handle字符串,序号第一个为0,最后为-1
|
:param num_or_handle: 标签页序号或handle字符串,序号第一个为0,最后为-1
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
@ -353,14 +353,14 @@ class DriverPage(BasePage):
|
|||||||
self.driver.switch_to.window(tab)
|
self.driver.switch_to.window(tab)
|
||||||
|
|
||||||
def set_ua_to_tab(self, ua):
|
def set_ua_to_tab(self, ua):
|
||||||
"""为当前tab设置user agent,只在当前tab有效 \n
|
"""为当前tab设置user agent,只在当前tab有效
|
||||||
:param ua: user agent字符串
|
:param ua: user agent字符串
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
self.driver.execute_cdp_cmd("Network.setUserAgentOverride", {"userAgent": ua})
|
self.driver.execute_cdp_cmd("Network.setUserAgentOverride", {"userAgent": ua})
|
||||||
|
|
||||||
def get_session_storage(self, item=None):
|
def get_session_storage(self, item=None):
|
||||||
"""获取sessionStorage信息,不设置item则获取全部 \n
|
"""获取sessionStorage信息,不设置item则获取全部
|
||||||
:param item: 要获取的项,不设置则返回全部
|
:param item: 要获取的项,不设置则返回全部
|
||||||
:return: sessionStorage一个或所有项内容
|
:return: sessionStorage一个或所有项内容
|
||||||
"""
|
"""
|
||||||
@ -368,7 +368,7 @@ class DriverPage(BasePage):
|
|||||||
return self.run_script(js)
|
return self.run_script(js)
|
||||||
|
|
||||||
def get_local_storage(self, item=None):
|
def get_local_storage(self, item=None):
|
||||||
"""获取localStorage信息,不设置item则获取全部 \n
|
"""获取localStorage信息,不设置item则获取全部
|
||||||
:param item: 要获取的项目,不设置则返回全部
|
:param item: 要获取的项目,不设置则返回全部
|
||||||
:return: localStorage一个或所有项内容
|
:return: localStorage一个或所有项内容
|
||||||
"""
|
"""
|
||||||
@ -376,7 +376,7 @@ class DriverPage(BasePage):
|
|||||||
return self.run_script(js)
|
return self.run_script(js)
|
||||||
|
|
||||||
def set_session_storage(self, item, value):
|
def set_session_storage(self, item, value):
|
||||||
"""设置或删除某项sessionStorage信息 \n
|
"""设置或删除某项sessionStorage信息
|
||||||
:param item: 要设置的项
|
:param item: 要设置的项
|
||||||
:param value: 项的值,设置为False时,删除该项
|
:param value: 项的值,设置为False时,删除该项
|
||||||
:return: None
|
:return: None
|
||||||
@ -385,7 +385,7 @@ class DriverPage(BasePage):
|
|||||||
self.run_script(s)
|
self.run_script(s)
|
||||||
|
|
||||||
def set_local_storage(self, item, value):
|
def set_local_storage(self, item, value):
|
||||||
"""设置或删除某项localStorage信息 \n
|
"""设置或删除某项localStorage信息
|
||||||
:param item: 要设置的项
|
:param item: 要设置的项
|
||||||
:param value: 项的值,设置为False时,删除该项
|
:param value: 项的值,设置为False时,删除该项
|
||||||
:return: None
|
:return: None
|
||||||
@ -394,7 +394,7 @@ class DriverPage(BasePage):
|
|||||||
self.run_script(s)
|
self.run_script(s)
|
||||||
|
|
||||||
def clean_cache(self, session_storage=True, local_storage=True, cache=True, cookies=True):
|
def clean_cache(self, session_storage=True, local_storage=True, cache=True, cookies=True):
|
||||||
"""清除缓存,可选要清除的项 \n
|
"""清除缓存,可选要清除的项
|
||||||
:param session_storage: 是否清除sessionStorage
|
:param session_storage: 是否清除sessionStorage
|
||||||
:param local_storage: 是否清除localStorage
|
:param local_storage: 是否清除localStorage
|
||||||
:param cache: 是否清除cache
|
:param cache: 是否清除cache
|
||||||
@ -411,7 +411,7 @@ class DriverPage(BasePage):
|
|||||||
self.run_cdp('Network.clearBrowserCookies')
|
self.run_cdp('Network.clearBrowserCookies')
|
||||||
|
|
||||||
def screenshot(self, path=None, filename=None, as_bytes=False):
|
def screenshot(self, path=None, filename=None, as_bytes=False):
|
||||||
"""截取页面可见范围截图 \n
|
"""截取页面可见范围截图
|
||||||
:param path: 保存路径
|
:param path: 保存路径
|
||||||
:param filename: 图片文件名,不传入时以页面title命名
|
:param filename: 图片文件名,不传入时以页面title命名
|
||||||
:param as_bytes: 是否已字节形式返回图片,为True时上面两个参数失效
|
:param as_bytes: 是否已字节形式返回图片,为True时上面两个参数失效
|
||||||
@ -430,7 +430,7 @@ class DriverPage(BasePage):
|
|||||||
return img_path
|
return img_path
|
||||||
|
|
||||||
def scroll_to_see(self, loc_or_ele):
|
def scroll_to_see(self, loc_or_ele):
|
||||||
"""滚动页面直到元素可见 \n
|
"""滚动页面直到元素可见
|
||||||
:param loc_or_ele: 元素的定位信息,可以是loc元组,或查询字符串(详见ele函数注释)
|
:param loc_or_ele: 元素的定位信息,可以是loc元组,或查询字符串(详见ele函数注释)
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
@ -454,7 +454,7 @@ class DriverPage(BasePage):
|
|||||||
self.driver.forward()
|
self.driver.forward()
|
||||||
|
|
||||||
def set_window_size(self, width=None, height=None):
|
def set_window_size(self, width=None, height=None):
|
||||||
"""设置浏览器窗口大小,默认最大化,任一参数为0最小化 \n
|
"""设置浏览器窗口大小,默认最大化,任一参数为0最小化
|
||||||
:param width: 浏览器窗口高
|
:param width: 浏览器窗口高
|
||||||
:param height: 浏览器窗口宽
|
:param height: 浏览器窗口宽
|
||||||
:return: None
|
:return: None
|
||||||
@ -474,14 +474,14 @@ class DriverPage(BasePage):
|
|||||||
self.driver.set_window_size(new_x, new_y)
|
self.driver.set_window_size(new_x, new_y)
|
||||||
|
|
||||||
def chrome_downloading(self, download_path):
|
def chrome_downloading(self, download_path):
|
||||||
"""返回浏览器下载中的文件列表 \n
|
"""返回浏览器下载中的文件列表
|
||||||
:param download_path: 下载文件夹路径
|
:param download_path: 下载文件夹路径
|
||||||
:return: 文件列表
|
:return: 文件列表
|
||||||
"""
|
"""
|
||||||
return glob(f'{download_path}{sep}*.crdownload')
|
return glob(f'{download_path}{sep}*.crdownload')
|
||||||
|
|
||||||
def process_alert(self, ok=True, send=None, timeout=None):
|
def process_alert(self, ok=True, send=None, timeout=None):
|
||||||
"""处理提示框 \n
|
"""处理提示框
|
||||||
:param ok: True表示确认,False表示取消,其它值不会按按钮但依然返回文本值
|
:param ok: True表示确认,False表示取消,其它值不会按按钮但依然返回文本值
|
||||||
:param send: 处理prompt提示框时可输入文本
|
:param send: 处理prompt提示框时可输入文本
|
||||||
:param timeout: 等待提示框出现的超时时间
|
:param timeout: 等待提示框出现的超时时间
|
||||||
@ -523,7 +523,7 @@ class ToFrame(object):
|
|||||||
self.page = page
|
self.page = page
|
||||||
|
|
||||||
def __call__(self, condition='main'):
|
def __call__(self, condition='main'):
|
||||||
"""跳转到(i)frame,可传入id、name、序号、元素对象、定位符 \n
|
"""跳转到(i)frame,可传入id、name、序号、元素对象、定位符
|
||||||
:param condition: (i)frame,可传入id、name、序号、元素对象、定位符
|
:param condition: (i)frame,可传入id、name、序号、元素对象、定位符
|
||||||
:return: 当前页面对象
|
:return: 当前页面对象
|
||||||
"""
|
"""
|
||||||
@ -544,7 +544,7 @@ class ToFrame(object):
|
|||||||
return self.page
|
return self.page
|
||||||
|
|
||||||
def parent(self, level=1):
|
def parent(self, level=1):
|
||||||
"""焦点跳转到上级框架,可指定上级层数 \n
|
"""焦点跳转到上级框架,可指定上级层数
|
||||||
:param level: 上面第几层框架
|
:param level: 上面第几层框架
|
||||||
:return: 框架所在页面对象
|
:return: 框架所在页面对象
|
||||||
"""
|
"""
|
||||||
@ -555,7 +555,7 @@ class ToFrame(object):
|
|||||||
return self.page
|
return self.page
|
||||||
|
|
||||||
def by_id(self, id_):
|
def by_id(self, id_):
|
||||||
"""焦点跳转到id为该值的(i)frame \n
|
"""焦点跳转到id为该值的(i)frame
|
||||||
:param id_: (i)frame的id属性值
|
:param id_: (i)frame的id属性值
|
||||||
:return: 框架所在页面对象
|
:return: 框架所在页面对象
|
||||||
"""
|
"""
|
||||||
@ -563,7 +563,7 @@ class ToFrame(object):
|
|||||||
return self.page
|
return self.page
|
||||||
|
|
||||||
def by_name(self, name):
|
def by_name(self, name):
|
||||||
"""焦点跳转到name为该值的(i)frame \n
|
"""焦点跳转到name为该值的(i)frame
|
||||||
:param name: (i)frame的name属性值
|
:param name: (i)frame的name属性值
|
||||||
:return: 框架所在页面对象
|
:return: 框架所在页面对象
|
||||||
"""
|
"""
|
||||||
@ -571,7 +571,7 @@ class ToFrame(object):
|
|||||||
return self.page
|
return self.page
|
||||||
|
|
||||||
def by_index(self, index):
|
def by_index(self, index):
|
||||||
"""焦点跳转到页面中第几个(i)frame \n
|
"""焦点跳转到页面中第几个(i)frame
|
||||||
:param index: 页面中第几个(i)frame
|
:param index: 页面中第几个(i)frame
|
||||||
:return: 框架所在页面对象
|
:return: 框架所在页面对象
|
||||||
"""
|
"""
|
||||||
@ -579,7 +579,7 @@ class ToFrame(object):
|
|||||||
return self.page
|
return self.page
|
||||||
|
|
||||||
def by_loc(self, loc):
|
def by_loc(self, loc):
|
||||||
"""焦点跳转到根据定位符获取到的(i)frame \n
|
"""焦点跳转到根据定位符获取到的(i)frame
|
||||||
:param loc: 定位符,支持selenium原生和DriverPage定位符
|
:param loc: 定位符,支持selenium原生和DriverPage定位符
|
||||||
:return: 框架所在页面对象
|
:return: 框架所在页面对象
|
||||||
"""
|
"""
|
||||||
@ -587,7 +587,7 @@ class ToFrame(object):
|
|||||||
return self.page
|
return self.page
|
||||||
|
|
||||||
def by_ele(self, ele):
|
def by_ele(self, ele):
|
||||||
"""焦点跳转到传入的(i)frame元素对象 \n
|
"""焦点跳转到传入的(i)frame元素对象
|
||||||
:param ele: (i)frame元素对象
|
:param ele: (i)frame元素对象
|
||||||
:return: 框架所在页面对象
|
:return: 框架所在页面对象
|
||||||
"""
|
"""
|
||||||
|
@ -18,7 +18,7 @@ class MixPage(SessionPage, DriverPage, BasePage):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, mode='d', drission=None, timeout=None, driver_options=None, session_options=None):
|
def __init__(self, mode='d', drission=None, timeout=None, driver_options=None, session_options=None):
|
||||||
"""初始化函数 \n
|
"""初始化函数
|
||||||
:param mode: 'd' 或 's',即driver模式和session模式
|
:param mode: 'd' 或 's',即driver模式和session模式
|
||||||
:param drission: Drission对象,不传入时会自动创建,有传入时driver_options和session_options参数无效
|
:param drission: Drission对象,不传入时会自动创建,有传入时driver_options和session_options参数无效
|
||||||
:param timeout: 超时时间,d模式时为寻找元素时间,s模式时为连接时间,默认10秒
|
:param timeout: 超时时间,d模式时为寻找元素时间,s模式时为连接时间,默认10秒
|
||||||
@ -46,8 +46,8 @@ class MixPage(SessionPage, DriverPage, BasePage):
|
|||||||
self.timeout = timeout if timeout is not None else 10
|
self.timeout = timeout if timeout is not None else 10
|
||||||
|
|
||||||
def __call__(self, loc_or_str, timeout=None):
|
def __call__(self, loc_or_str, timeout=None):
|
||||||
"""在内部查找元素 \n
|
"""在内部查找元素
|
||||||
例:ele = page('@id=ele_id') \n
|
例:ele = page('@id=ele_id')
|
||||||
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
||||||
:param timeout: 超时时间
|
:param timeout: 超时时间
|
||||||
:return: 子元素对象或属性文本
|
:return: 子元素对象或属性文本
|
||||||
@ -91,7 +91,7 @@ class MixPage(SessionPage, DriverPage, BasePage):
|
|||||||
return super(SessionPage, self).json
|
return super(SessionPage, self).json
|
||||||
|
|
||||||
def get(self, url, show_errmsg=False, retry=None, interval=None, **kwargs):
|
def get(self, url, show_errmsg=False, retry=None, interval=None, **kwargs):
|
||||||
"""跳转到一个url \n
|
"""跳转到一个url
|
||||||
:param url: 目标url
|
:param url: 目标url
|
||||||
:param show_errmsg: 是否显示和抛出异常
|
:param show_errmsg: 是否显示和抛出异常
|
||||||
:param retry: 重试次数
|
:param retry: 重试次数
|
||||||
@ -105,7 +105,7 @@ class MixPage(SessionPage, DriverPage, BasePage):
|
|||||||
return super().get(url, show_errmsg, retry, interval, **kwargs)
|
return super().get(url, show_errmsg, retry, interval, **kwargs)
|
||||||
|
|
||||||
def ele(self, loc_or_ele, timeout=None):
|
def ele(self, loc_or_ele, timeout=None):
|
||||||
"""返回第一个符合条件的元素、属性或节点文本 \n
|
"""返回第一个符合条件的元素、属性或节点文本
|
||||||
:param loc_or_ele: 元素的定位信息,可以是元素对象,loc元组,或查询字符串
|
:param loc_or_ele: 元素的定位信息,可以是元素对象,loc元组,或查询字符串
|
||||||
:param timeout: 查找元素超时时间,默认与页面等待时间一致
|
:param timeout: 查找元素超时时间,默认与页面等待时间一致
|
||||||
:return: 元素对象或属性、文本节点文本
|
:return: 元素对象或属性、文本节点文本
|
||||||
@ -116,7 +116,7 @@ class MixPage(SessionPage, DriverPage, BasePage):
|
|||||||
return super(SessionPage, self).ele(loc_or_ele, timeout=timeout)
|
return super(SessionPage, self).ele(loc_or_ele, timeout=timeout)
|
||||||
|
|
||||||
def eles(self, loc_or_str, timeout=None):
|
def eles(self, loc_or_str, timeout=None):
|
||||||
"""返回页面中所有符合条件的元素、属性或节点文本 \n
|
"""返回页面中所有符合条件的元素、属性或节点文本
|
||||||
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
||||||
:param timeout: 查找元素超时时间,默认与页面等待时间一致
|
:param timeout: 查找元素超时时间,默认与页面等待时间一致
|
||||||
:return: 元素对象或属性、文本组成的列表
|
:return: 元素对象或属性、文本组成的列表
|
||||||
@ -127,7 +127,7 @@ class MixPage(SessionPage, DriverPage, BasePage):
|
|||||||
return super(SessionPage, self).eles(loc_or_str, timeout=timeout)
|
return super(SessionPage, self).eles(loc_or_str, timeout=timeout)
|
||||||
|
|
||||||
def s_ele(self, loc_or_ele=None):
|
def s_ele(self, loc_or_ele=None):
|
||||||
"""查找第一个符合条件的元素以SessionElement形式返回,d模式处理复杂页面时效率很高 \n
|
"""查找第一个符合条件的元素以SessionElement形式返回,d模式处理复杂页面时效率很高
|
||||||
:param loc_or_ele: 元素的定位信息,可以是loc元组,或查询字符串
|
:param loc_or_ele: 元素的定位信息,可以是loc元组,或查询字符串
|
||||||
:return: SessionElement对象或属性、文本
|
:return: SessionElement对象或属性、文本
|
||||||
"""
|
"""
|
||||||
@ -137,7 +137,7 @@ class MixPage(SessionPage, DriverPage, BasePage):
|
|||||||
return super(SessionPage, self).s_ele(loc_or_ele)
|
return super(SessionPage, self).s_ele(loc_or_ele)
|
||||||
|
|
||||||
def s_eles(self, loc_or_str):
|
def s_eles(self, loc_or_str):
|
||||||
"""查找所有符合条件的元素以SessionElement形式返回,d模式处理复杂页面时效率很高 \n
|
"""查找所有符合条件的元素以SessionElement形式返回,d模式处理复杂页面时效率很高
|
||||||
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
||||||
:return: SessionElement对象或属性、文本组成的列表
|
:return: SessionElement对象或属性、文本组成的列表
|
||||||
"""
|
"""
|
||||||
@ -147,7 +147,7 @@ class MixPage(SessionPage, DriverPage, BasePage):
|
|||||||
return super(SessionPage, self).s_eles(loc_or_str)
|
return super(SessionPage, self).s_eles(loc_or_str)
|
||||||
|
|
||||||
def _ele(self, loc_or_ele, timeout=None, single=True):
|
def _ele(self, loc_or_ele, timeout=None, single=True):
|
||||||
"""返回页面中符合条件的元素、属性或节点文本,默认返回第一个 \n
|
"""返回页面中符合条件的元素、属性或节点文本,默认返回第一个
|
||||||
:param loc_or_ele: 元素的定位信息,可以是元素对象,loc元组,或查询字符串
|
:param loc_or_ele: 元素的定位信息,可以是元素对象,loc元组,或查询字符串
|
||||||
:param timeout: 查找元素超时时间,d模式专用
|
:param timeout: 查找元素超时时间,d模式专用
|
||||||
:param single: True则返回第一个,False则返回全部
|
:param single: True则返回第一个,False则返回全部
|
||||||
@ -159,7 +159,7 @@ class MixPage(SessionPage, DriverPage, BasePage):
|
|||||||
return super(SessionPage, self)._ele(loc_or_ele, timeout=timeout, single=single)
|
return super(SessionPage, self)._ele(loc_or_ele, timeout=timeout, single=single)
|
||||||
|
|
||||||
def get_cookies(self, as_dict=False, all_domains=False):
|
def get_cookies(self, as_dict=False, all_domains=False):
|
||||||
"""返回cookies \n
|
"""返回cookies
|
||||||
:param as_dict: 是否以字典方式返回
|
:param as_dict: 是否以字典方式返回
|
||||||
:param all_domains: 是否返回所有域的cookies
|
:param all_domains: 是否返回所有域的cookies
|
||||||
:return: cookies信息
|
:return: cookies信息
|
||||||
@ -177,7 +177,7 @@ class MixPage(SessionPage, DriverPage, BasePage):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def driver(self):
|
def driver(self):
|
||||||
"""返回 driver 对象,如没有则创建 \n
|
"""返回 driver 对象,如没有则创建
|
||||||
每次访问时切换到 d 模式,用于独有函数及外部调用
|
每次访问时切换到 d 模式,用于独有函数及外部调用
|
||||||
:return: WebDriver对象
|
:return: WebDriver对象
|
||||||
"""
|
"""
|
||||||
@ -206,10 +206,10 @@ class MixPage(SessionPage, DriverPage, BasePage):
|
|||||||
return self._response.url if self._response else None
|
return self._response.url if self._response else None
|
||||||
|
|
||||||
def change_mode(self, mode=None, go=True, copy_cookies=True):
|
def change_mode(self, mode=None, go=True, copy_cookies=True):
|
||||||
"""切换模式,接收's'或'd',除此以外的字符串会切换为 d 模式 \n
|
"""切换模式,接收's'或'd',除此以外的字符串会切换为 d 模式
|
||||||
切换时会把当前模式的cookies复制到目标模式 \n
|
切换时会把当前模式的cookies复制到目标模式
|
||||||
切换后,如果go是True,调用相应的get函数使访问的页面同步 \n
|
切换后,如果go是True,调用相应的get函数使访问的页面同步
|
||||||
注意:s转d时,若浏览器当前网址域名和s模式不一样,必须会跳转 \n
|
注意:s转d时,若浏览器当前网址域名和s模式不一样,必须会跳转
|
||||||
:param mode: 模式字符串
|
:param mode: 模式字符串
|
||||||
:param go: 是否跳转到原模式的url
|
:param go: 是否跳转到原模式的url
|
||||||
:param copy_cookies: 是否复制cookies到目标模式
|
:param copy_cookies: 是否复制cookies到目标模式
|
||||||
@ -244,7 +244,7 @@ class MixPage(SessionPage, DriverPage, BasePage):
|
|||||||
self.get(self._drission.driver.current_url)
|
self.get(self._drission.driver.current_url)
|
||||||
|
|
||||||
def set_cookies(self, cookies, refresh=True):
|
def set_cookies(self, cookies, refresh=True):
|
||||||
"""设置cookies \n
|
"""设置cookies
|
||||||
:param cookies: cookies信息,可为CookieJar, list, tuple, str, dict
|
:param cookies: cookies信息,可为CookieJar, list, tuple, str, dict
|
||||||
:param refresh: 设置cookies后是否刷新页面
|
:param refresh: 设置cookies后是否刷新页面
|
||||||
:return: None
|
:return: None
|
||||||
@ -257,14 +257,14 @@ class MixPage(SessionPage, DriverPage, BasePage):
|
|||||||
self.refresh()
|
self.refresh()
|
||||||
|
|
||||||
def cookies_to_session(self, copy_user_agent=False):
|
def cookies_to_session(self, copy_user_agent=False):
|
||||||
"""从driver复制cookies到session \n
|
"""从driver复制cookies到session
|
||||||
:param copy_user_agent : 是否复制user agent信息
|
:param copy_user_agent : 是否复制user agent信息
|
||||||
"""
|
"""
|
||||||
self._drission.cookies_to_session(copy_user_agent)
|
self._drission.cookies_to_session(copy_user_agent)
|
||||||
|
|
||||||
def cookies_to_driver(self, url=None):
|
def cookies_to_driver(self, url=None):
|
||||||
"""从session复制cookies到driver \n
|
"""从session复制cookies到driver
|
||||||
chrome需要指定域才能接收cookies \n
|
chrome需要指定域才能接收cookies
|
||||||
:param url: 目标域
|
:param url: 目标域
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
@ -272,8 +272,8 @@ class MixPage(SessionPage, DriverPage, BasePage):
|
|||||||
self._drission.cookies_to_driver(url)
|
self._drission.cookies_to_driver(url)
|
||||||
|
|
||||||
def check_page(self, by_requests=False):
|
def check_page(self, by_requests=False):
|
||||||
"""d模式时检查网页是否符合预期 \n
|
"""d模式时检查网页是否符合预期
|
||||||
默认由response状态检查,可重载实现针对性检查 \n
|
默认由response状态检查,可重载实现针对性检查
|
||||||
:param by_requests: 是否用内置response检查
|
:param by_requests: 是否用内置response检查
|
||||||
:return: bool或None,None代表不知道结果
|
:return: bool或None,None代表不知道结果
|
||||||
"""
|
"""
|
||||||
@ -299,7 +299,7 @@ class MixPage(SessionPage, DriverPage, BasePage):
|
|||||||
|
|
||||||
# ----------------重写SessionPage的函数-----------------------
|
# ----------------重写SessionPage的函数-----------------------
|
||||||
def post(self, url, data=None, show_errmsg=False, retry=None, interval=None, **kwargs):
|
def post(self, url, data=None, show_errmsg=False, retry=None, interval=None, **kwargs):
|
||||||
"""用post方式跳转到url,会切换到s模式 \n
|
"""用post方式跳转到url,会切换到s模式
|
||||||
:param url: 目标url
|
:param url: 目标url
|
||||||
:param data: post方式时提交的数据
|
:param data: post方式时提交的数据
|
||||||
:param show_errmsg: 是否显示和抛出异常
|
:param show_errmsg: 是否显示和抛出异常
|
||||||
@ -319,7 +319,7 @@ class MixPage(SessionPage, DriverPage, BasePage):
|
|||||||
return super().download
|
return super().download
|
||||||
|
|
||||||
def chrome_downloading(self, path=None):
|
def chrome_downloading(self, path=None):
|
||||||
"""返回浏览器下载中的文件列表 \n
|
"""返回浏览器下载中的文件列表
|
||||||
:param path: 下载文件夹路径,默认读取配置信息
|
:param path: 下载文件夹路径,默认读取配置信息
|
||||||
:return: 正在下载的文件列表
|
:return: 正在下载的文件列表
|
||||||
"""
|
"""
|
||||||
|
@ -18,7 +18,7 @@ class SessionElement(DrissionElement):
|
|||||||
"""session模式的元素对象,包装了一个lxml的Element对象,并封装了常用功能"""
|
"""session模式的元素对象,包装了一个lxml的Element对象,并封装了常用功能"""
|
||||||
|
|
||||||
def __init__(self, ele, page=None):
|
def __init__(self, ele, page=None):
|
||||||
"""初始化对象 \n
|
"""初始化对象
|
||||||
:param ele: 被包装的HtmlElement元素
|
:param ele: 被包装的HtmlElement元素
|
||||||
:param page: 元素所在页面对象,如果是从 html 文本生成的元素,则为 None
|
:param page: 元素所在页面对象,如果是从 html 文本生成的元素,则为 None
|
||||||
"""
|
"""
|
||||||
@ -34,8 +34,8 @@ class SessionElement(DrissionElement):
|
|||||||
return f'<SessionElement {self.tag} {" ".join(attrs)}>'
|
return f'<SessionElement {self.tag} {" ".join(attrs)}>'
|
||||||
|
|
||||||
def __call__(self, loc_or_str, timeout=None):
|
def __call__(self, loc_or_str, timeout=None):
|
||||||
"""在内部查找元素 \n
|
"""在内部查找元素
|
||||||
例:ele2 = ele1('@id=ele_id') \n
|
例:ele2 = ele1('@id=ele_id')
|
||||||
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
||||||
:param timeout: 不起实际作用,用于和DriverElement对应,便于无差别调用
|
:param timeout: 不起实际作用,用于和DriverElement对应,便于无差别调用
|
||||||
:return: SessionElement对象或属性、文本
|
:return: SessionElement对象或属性、文本
|
||||||
@ -75,14 +75,14 @@ class SessionElement(DrissionElement):
|
|||||||
return str(self._inner_ele.text_content())
|
return str(self._inner_ele.text_content())
|
||||||
|
|
||||||
def parent(self, level_or_loc=1):
|
def parent(self, level_or_loc=1):
|
||||||
"""返回上面某一级父元素,可指定层数或用查询语法定位 \n
|
"""返回上面某一级父元素,可指定层数或用查询语法定位
|
||||||
:param level_or_loc: 第几级父元素,或定位符
|
:param level_or_loc: 第几级父元素,或定位符
|
||||||
:return: 上级元素对象
|
:return: 上级元素对象
|
||||||
"""
|
"""
|
||||||
return super().parent(level_or_loc)
|
return super().parent(level_or_loc)
|
||||||
|
|
||||||
def prev(self, filter_loc='', index=1, timeout=0):
|
def prev(self, filter_loc='', index=1, timeout=0):
|
||||||
"""返回前面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 \n
|
"""返回前面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:param index: 前面第几个查询结果元素
|
:param index: 前面第几个查询结果元素
|
||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
@ -91,7 +91,7 @@ class SessionElement(DrissionElement):
|
|||||||
return super().prev(index, filter_loc, timeout)
|
return super().prev(index, filter_loc, timeout)
|
||||||
|
|
||||||
def next(self, filter_loc='', index=1, timeout=0):
|
def next(self, filter_loc='', index=1, timeout=0):
|
||||||
"""返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 \n
|
"""返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:param index: 后面第几个查询结果元素
|
:param index: 后面第几个查询结果元素
|
||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
@ -100,7 +100,7 @@ class SessionElement(DrissionElement):
|
|||||||
return super().next(index, filter_loc, timeout)
|
return super().next(index, filter_loc, timeout)
|
||||||
|
|
||||||
def before(self, filter_loc='', index=1, timeout=None):
|
def before(self, filter_loc='', index=1, timeout=None):
|
||||||
"""返回前面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 \n
|
"""返回前面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:param index: 前面第几个查询结果元素
|
:param index: 前面第几个查询结果元素
|
||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
@ -109,7 +109,7 @@ class SessionElement(DrissionElement):
|
|||||||
return super().before(index, filter_loc, timeout)
|
return super().before(index, filter_loc, timeout)
|
||||||
|
|
||||||
def after(self, filter_loc='', index=1, timeout=None):
|
def after(self, filter_loc='', index=1, timeout=None):
|
||||||
"""返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 \n
|
"""返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:param index: 后面第几个查询结果元素
|
:param index: 后面第几个查询结果元素
|
||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
@ -118,7 +118,7 @@ class SessionElement(DrissionElement):
|
|||||||
return super().after(index, filter_loc, timeout)
|
return super().after(index, filter_loc, timeout)
|
||||||
|
|
||||||
def prevs(self, filter_loc='', timeout=0):
|
def prevs(self, filter_loc='', timeout=0):
|
||||||
"""返回前面全部兄弟元素或节点组成的列表,可用查询语法筛选 \n
|
"""返回前面全部兄弟元素或节点组成的列表,可用查询语法筛选
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
:return: 兄弟元素或节点文本组成的列表
|
:return: 兄弟元素或节点文本组成的列表
|
||||||
@ -126,7 +126,7 @@ class SessionElement(DrissionElement):
|
|||||||
return super().prevs(filter_loc, timeout)
|
return super().prevs(filter_loc, timeout)
|
||||||
|
|
||||||
def nexts(self, filter_loc='', timeout=0):
|
def nexts(self, filter_loc='', timeout=0):
|
||||||
"""返回后面全部兄弟元素或节点组成的列表,可用查询语法筛选 \n
|
"""返回后面全部兄弟元素或节点组成的列表,可用查询语法筛选
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
:return: 兄弟元素或节点文本组成的列表
|
:return: 兄弟元素或节点文本组成的列表
|
||||||
@ -134,7 +134,7 @@ class SessionElement(DrissionElement):
|
|||||||
return super().nexts(filter_loc, timeout)
|
return super().nexts(filter_loc, timeout)
|
||||||
|
|
||||||
def befores(self, filter_loc='', timeout=None):
|
def befores(self, filter_loc='', timeout=None):
|
||||||
"""返回后面全部兄弟元素或节点组成的列表,可用查询语法筛选 \n
|
"""返回后面全部兄弟元素或节点组成的列表,可用查询语法筛选
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
:return: 本元素前面的元素或节点组成的列表
|
:return: 本元素前面的元素或节点组成的列表
|
||||||
@ -142,7 +142,7 @@ class SessionElement(DrissionElement):
|
|||||||
return super().befores(filter_loc, timeout)
|
return super().befores(filter_loc, timeout)
|
||||||
|
|
||||||
def afters(self, filter_loc='', timeout=None):
|
def afters(self, filter_loc='', timeout=None):
|
||||||
"""返回前面全部兄弟元素或节点组成的列表,可用查询语法筛选 \n
|
"""返回前面全部兄弟元素或节点组成的列表,可用查询语法筛选
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:param timeout: 查找元素的超时时间
|
:param timeout: 查找元素的超时时间
|
||||||
:return: 本元素后面的元素或节点组成的列表
|
:return: 本元素后面的元素或节点组成的列表
|
||||||
@ -150,7 +150,7 @@ class SessionElement(DrissionElement):
|
|||||||
return super().afters(filter_loc, timeout)
|
return super().afters(filter_loc, timeout)
|
||||||
|
|
||||||
def attr(self, attr):
|
def attr(self, attr):
|
||||||
"""返回attribute属性值 \n
|
"""返回attribute属性值
|
||||||
:param attr: 属性名
|
:param attr: 属性名
|
||||||
:return: 属性值文本,没有该属性返回None
|
:return: 属性值文本,没有该属性返回None
|
||||||
"""
|
"""
|
||||||
@ -183,7 +183,7 @@ class SessionElement(DrissionElement):
|
|||||||
return self.inner_ele.get(attr)
|
return self.inner_ele.get(attr)
|
||||||
|
|
||||||
def ele(self, loc_or_str, timeout=None):
|
def ele(self, loc_or_str, timeout=None):
|
||||||
"""返回当前元素下级符合条件的第一个元素、属性或节点文本 \n
|
"""返回当前元素下级符合条件的第一个元素、属性或节点文本
|
||||||
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
||||||
:param timeout: 不起实际作用,用于和DriverElement对应,便于无差别调用
|
:param timeout: 不起实际作用,用于和DriverElement对应,便于无差别调用
|
||||||
:return: SessionElement对象或属性、文本
|
:return: SessionElement对象或属性、文本
|
||||||
@ -191,7 +191,7 @@ class SessionElement(DrissionElement):
|
|||||||
return self._ele(loc_or_str)
|
return self._ele(loc_or_str)
|
||||||
|
|
||||||
def eles(self, loc_or_str, timeout=None):
|
def eles(self, loc_or_str, timeout=None):
|
||||||
"""返回当前元素下级所有符合条件的子元素、属性或节点文本 \n
|
"""返回当前元素下级所有符合条件的子元素、属性或节点文本
|
||||||
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
||||||
:param timeout: 不起实际作用,用于和DriverElement对应,便于无差别调用
|
:param timeout: 不起实际作用,用于和DriverElement对应,便于无差别调用
|
||||||
:return: SessionElement对象或属性、文本组成的列表
|
:return: SessionElement对象或属性、文本组成的列表
|
||||||
@ -199,21 +199,21 @@ class SessionElement(DrissionElement):
|
|||||||
return self._ele(loc_or_str, single=False)
|
return self._ele(loc_or_str, single=False)
|
||||||
|
|
||||||
def s_ele(self, loc_or_str=None):
|
def s_ele(self, loc_or_str=None):
|
||||||
"""返回当前元素下级符合条件的第一个元素、属性或节点文本 \n
|
"""返回当前元素下级符合条件的第一个元素、属性或节点文本
|
||||||
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
||||||
:return: SessionElement对象或属性、文本
|
:return: SessionElement对象或属性、文本
|
||||||
"""
|
"""
|
||||||
return self._ele(loc_or_str)
|
return self._ele(loc_or_str)
|
||||||
|
|
||||||
def s_eles(self, loc_or_str):
|
def s_eles(self, loc_or_str):
|
||||||
"""返回当前元素下级所有符合条件的子元素、属性或节点文本 \n
|
"""返回当前元素下级所有符合条件的子元素、属性或节点文本
|
||||||
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
||||||
:return: SessionElement对象或属性、文本组成的列表
|
:return: SessionElement对象或属性、文本组成的列表
|
||||||
"""
|
"""
|
||||||
return self._ele(loc_or_str, single=False)
|
return self._ele(loc_or_str, single=False)
|
||||||
|
|
||||||
def _ele(self, loc_or_str, timeout=None, single=True, relative=False):
|
def _ele(self, loc_or_str, timeout=None, single=True, relative=False):
|
||||||
"""返回当前元素下级符合条件的子元素、属性或节点文本,默认返回第一个 \n
|
"""返回当前元素下级符合条件的子元素、属性或节点文本,默认返回第一个
|
||||||
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
||||||
:param timeout: 不起实际作用,用于和父类对应
|
:param timeout: 不起实际作用,用于和父类对应
|
||||||
:param single: True则返回第一个,False则返回全部
|
:param single: True则返回第一个,False则返回全部
|
||||||
@ -244,8 +244,8 @@ class SessionElement(DrissionElement):
|
|||||||
|
|
||||||
|
|
||||||
def make_session_ele(html_or_ele, loc=None, single=True):
|
def make_session_ele(html_or_ele, loc=None, single=True):
|
||||||
"""从接收到的对象或html文本中查找元素,返回SessionElement对象 \n
|
"""从接收到的对象或html文本中查找元素,返回SessionElement对象
|
||||||
如要直接从html生成SessionElement而不在下级查找,loc输入None即可 \n
|
如要直接从html生成SessionElement而不在下级查找,loc输入None即可
|
||||||
:param html_or_ele: html文本、BaseParser对象
|
:param html_or_ele: html文本、BaseParser对象
|
||||||
:param loc: 定位元组或字符串,为None时不在下级查找,返回根元素
|
:param loc: 定位元组或字符串,为None时不在下级查找,返回根元素
|
||||||
:param single: True则返回第一个,False则返回全部
|
:param single: True则返回第一个,False则返回全部
|
||||||
|
@ -48,7 +48,7 @@ class SessionPage(BasePage):
|
|||||||
self._set_options()
|
self._set_options()
|
||||||
|
|
||||||
def _set_session(self, opt):
|
def _set_session(self, opt):
|
||||||
"""根据传入字典对session进行设置 \n
|
"""根据传入字典对session进行设置
|
||||||
:param opt: session配置字典
|
:param opt: session配置字典
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
@ -90,7 +90,7 @@ class SessionPage(BasePage):
|
|||||||
self.session.cookies.set(cookie['name'], cookie['value'], **kwargs)
|
self.session.cookies.set(cookie['name'], cookie['value'], **kwargs)
|
||||||
|
|
||||||
def set_headers(self, headers):
|
def set_headers(self, headers):
|
||||||
"""设置通用的headers,设置的headers值回逐个覆盖原有的,不会清理原来的 \n
|
"""设置通用的headers,设置的headers值回逐个覆盖原有的,不会清理原来的
|
||||||
:param headers: dict形式的headers
|
:param headers: dict形式的headers
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
@ -99,8 +99,8 @@ class SessionPage(BasePage):
|
|||||||
self.session.headers[i] = headers[i]
|
self.session.headers[i] = headers[i]
|
||||||
|
|
||||||
def __call__(self, loc_or_str, timeout=None):
|
def __call__(self, loc_or_str, timeout=None):
|
||||||
"""在内部查找元素 \n
|
"""在内部查找元素
|
||||||
例:ele2 = ele1('@id=ele_id') \n
|
例:ele2 = ele1('@id=ele_id')
|
||||||
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
||||||
:param timeout: 不起实际作用,用于和DriverElement对应,便于无差别调用
|
:param timeout: 不起实际作用,用于和DriverElement对应,便于无差别调用
|
||||||
:return: SessionElement对象或属性文本
|
:return: SessionElement对象或属性文本
|
||||||
@ -137,7 +137,7 @@ class SessionPage(BasePage):
|
|||||||
return DownloadSetter(self)
|
return DownloadSetter(self)
|
||||||
|
|
||||||
def get(self, url, show_errmsg=False, retry=None, interval=None, timeout=None, **kwargs):
|
def get(self, url, show_errmsg=False, retry=None, interval=None, timeout=None, **kwargs):
|
||||||
"""用get方式跳转到url \n
|
"""用get方式跳转到url
|
||||||
:param url: 目标url
|
:param url: 目标url
|
||||||
:param show_errmsg: 是否显示和抛出异常
|
:param show_errmsg: 是否显示和抛出异常
|
||||||
:param retry: 重试次数
|
:param retry: 重试次数
|
||||||
@ -149,7 +149,7 @@ class SessionPage(BasePage):
|
|||||||
return self._s_connect(url, 'get', None, show_errmsg, retry, interval, **kwargs)
|
return self._s_connect(url, 'get', None, show_errmsg, retry, interval, **kwargs)
|
||||||
|
|
||||||
def ele(self, loc_or_ele, timeout=None):
|
def ele(self, loc_or_ele, timeout=None):
|
||||||
"""返回页面中符合条件的第一个元素、属性或节点文本 \n
|
"""返回页面中符合条件的第一个元素、属性或节点文本
|
||||||
:param loc_or_ele: 元素的定位信息,可以是元素对象,loc元组,或查询字符串
|
:param loc_or_ele: 元素的定位信息,可以是元素对象,loc元组,或查询字符串
|
||||||
:param timeout: 不起实际作用,用于和DriverElement对应,便于无差别调用
|
:param timeout: 不起实际作用,用于和DriverElement对应,便于无差别调用
|
||||||
:return: SessionElement对象或属性、文本
|
:return: SessionElement对象或属性、文本
|
||||||
@ -157,7 +157,7 @@ class SessionPage(BasePage):
|
|||||||
return self._ele(loc_or_ele)
|
return self._ele(loc_or_ele)
|
||||||
|
|
||||||
def eles(self, loc_or_str, timeout=None):
|
def eles(self, loc_or_str, timeout=None):
|
||||||
"""返回页面中所有符合条件的元素、属性或节点文本 \n
|
"""返回页面中所有符合条件的元素、属性或节点文本
|
||||||
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
||||||
:param timeout: 不起实际作用,用于和DriverElement对应,便于无差别调用
|
:param timeout: 不起实际作用,用于和DriverElement对应,便于无差别调用
|
||||||
:return: SessionElement对象或属性、文本组成的列表
|
:return: SessionElement对象或属性、文本组成的列表
|
||||||
@ -165,21 +165,21 @@ class SessionPage(BasePage):
|
|||||||
return self._ele(loc_or_str, single=False)
|
return self._ele(loc_or_str, single=False)
|
||||||
|
|
||||||
def s_ele(self, loc_or_ele=None):
|
def s_ele(self, loc_or_ele=None):
|
||||||
"""返回页面中符合条件的第一个元素、属性或节点文本 \n
|
"""返回页面中符合条件的第一个元素、属性或节点文本
|
||||||
:param loc_or_ele: 元素的定位信息,可以是元素对象,loc元组,或查询字符串
|
:param loc_or_ele: 元素的定位信息,可以是元素对象,loc元组,或查询字符串
|
||||||
:return: SessionElement对象或属性、文本
|
:return: SessionElement对象或属性、文本
|
||||||
"""
|
"""
|
||||||
return make_session_ele(self.html) if loc_or_ele is None else self._ele(loc_or_ele)
|
return make_session_ele(self.html) if loc_or_ele is None else self._ele(loc_or_ele)
|
||||||
|
|
||||||
def s_eles(self, loc_or_str):
|
def s_eles(self, loc_or_str):
|
||||||
"""返回页面中符合条件的所有元素、属性或节点文本 \n
|
"""返回页面中符合条件的所有元素、属性或节点文本
|
||||||
:param loc_or_str: 元素的定位信息,可以是元素对象,loc元组,或查询字符串
|
:param loc_or_str: 元素的定位信息,可以是元素对象,loc元组,或查询字符串
|
||||||
:return: SessionElement对象或属性、文本
|
:return: SessionElement对象或属性、文本
|
||||||
"""
|
"""
|
||||||
return self._ele(loc_or_str, single=False)
|
return self._ele(loc_or_str, single=False)
|
||||||
|
|
||||||
def _ele(self, loc_or_ele, timeout=None, single=True):
|
def _ele(self, loc_or_ele, timeout=None, single=True):
|
||||||
"""返回页面中符合条件的元素、属性或节点文本,默认返回第一个 \n
|
"""返回页面中符合条件的元素、属性或节点文本,默认返回第一个
|
||||||
:param loc_or_ele: 元素的定位信息,可以是元素对象,loc元组,或查询字符串
|
:param loc_or_ele: 元素的定位信息,可以是元素对象,loc元组,或查询字符串
|
||||||
:param timeout: 不起实际作用,用于和父类对应
|
:param timeout: 不起实际作用,用于和父类对应
|
||||||
:param single: True则返回第一个,False则返回全部
|
:param single: True则返回第一个,False则返回全部
|
||||||
@ -188,7 +188,7 @@ class SessionPage(BasePage):
|
|||||||
return loc_or_ele if isinstance(loc_or_ele, SessionElement) else make_session_ele(self, loc_or_ele, single)
|
return loc_or_ele if isinstance(loc_or_ele, SessionElement) else make_session_ele(self, loc_or_ele, single)
|
||||||
|
|
||||||
def get_cookies(self, as_dict=False, all_domains=False):
|
def get_cookies(self, as_dict=False, all_domains=False):
|
||||||
"""返回cookies \n
|
"""返回cookies
|
||||||
:param as_dict: 是否以字典方式返回
|
:param as_dict: 是否以字典方式返回
|
||||||
:param all_domains: 是否返回所有域的cookies
|
:param all_domains: 是否返回所有域的cookies
|
||||||
:return: cookies信息
|
:return: cookies信息
|
||||||
@ -227,7 +227,7 @@ class SessionPage(BasePage):
|
|||||||
return self._download_kit
|
return self._download_kit
|
||||||
|
|
||||||
def post(self, url, data=None, show_errmsg=False, retry=None, interval=None, **kwargs):
|
def post(self, url, data=None, show_errmsg=False, retry=None, interval=None, **kwargs):
|
||||||
"""用post方式跳转到url \n
|
"""用post方式跳转到url
|
||||||
:param url: 目标url
|
:param url: 目标url
|
||||||
:param data: 提交的数据
|
:param data: 提交的数据
|
||||||
:param show_errmsg: 是否显示和抛出异常
|
:param show_errmsg: 是否显示和抛出异常
|
||||||
@ -239,7 +239,7 @@ class SessionPage(BasePage):
|
|||||||
return self._s_connect(url, 'post', data, show_errmsg, retry, interval, **kwargs)
|
return self._s_connect(url, 'post', data, show_errmsg, retry, interval, **kwargs)
|
||||||
|
|
||||||
def _s_connect(self, url, mode, data=None, show_errmsg=False, retry=None, interval=None, **kwargs):
|
def _s_connect(self, url, mode, data=None, show_errmsg=False, retry=None, interval=None, **kwargs):
|
||||||
"""执行get或post连接 \n
|
"""执行get或post连接
|
||||||
:param url: 目标url
|
:param url: 目标url
|
||||||
:param mode: 'get' 或 'post'
|
:param mode: 'get' 或 'post'
|
||||||
:param data: 提交的数据
|
:param data: 提交的数据
|
||||||
@ -267,7 +267,7 @@ class SessionPage(BasePage):
|
|||||||
return self._url_available
|
return self._url_available
|
||||||
|
|
||||||
def _make_response(self, url, mode='get', data=None, retry=None, interval=None, show_errmsg=False, **kwargs):
|
def _make_response(self, url, mode='get', data=None, retry=None, interval=None, show_errmsg=False, **kwargs):
|
||||||
"""生成Response对象 \n
|
"""生成Response对象
|
||||||
:param url: 目标url
|
:param url: 目标url
|
||||||
:param mode: 'get' 或 'post'
|
:param mode: 'get' 或 'post'
|
||||||
:param data: post方式要提交的数据
|
:param data: post方式要提交的数据
|
||||||
@ -341,7 +341,7 @@ class DownloadSetter(object):
|
|||||||
self._page = page
|
self._page = page
|
||||||
|
|
||||||
def save_path(self, path):
|
def save_path(self, path):
|
||||||
"""设置下载保存路径 \n
|
"""设置下载保存路径
|
||||||
:param path: 下载保存路径
|
:param path: 下载保存路径
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
|
@ -30,8 +30,8 @@ class ShadowRootElement(BaseElement):
|
|||||||
return f'<ShadowRootElement in {self.parent_ele} >'
|
return f'<ShadowRootElement in {self.parent_ele} >'
|
||||||
|
|
||||||
def __call__(self, loc_or_str, timeout=None):
|
def __call__(self, loc_or_str, timeout=None):
|
||||||
"""在内部查找元素 \n
|
"""在内部查找元素
|
||||||
例:ele2 = ele1('@id=ele_id') \n
|
例:ele2 = ele1('@id=ele_id')
|
||||||
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
||||||
:param timeout: 超时时间
|
:param timeout: 超时时间
|
||||||
:return: DriverElement对象或属性、文本
|
:return: DriverElement对象或属性、文本
|
||||||
@ -54,7 +54,7 @@ class ShadowRootElement(BaseElement):
|
|||||||
return shadow_root.get_attribute('innerHTML')
|
return shadow_root.get_attribute('innerHTML')
|
||||||
|
|
||||||
def parent(self, level_or_loc=1):
|
def parent(self, level_or_loc=1):
|
||||||
"""返回上面某一级父元素,可指定层数或用查询语法定位 \n
|
"""返回上面某一级父元素,可指定层数或用查询语法定位
|
||||||
:param level_or_loc: 第几级父元素,或定位符
|
:param level_or_loc: 第几级父元素,或定位符
|
||||||
:return: DriverElement对象
|
:return: DriverElement对象
|
||||||
"""
|
"""
|
||||||
@ -75,7 +75,7 @@ class ShadowRootElement(BaseElement):
|
|||||||
return self.parent_ele.ele(loc, timeout=0)
|
return self.parent_ele.ele(loc, timeout=0)
|
||||||
|
|
||||||
def next(self, index=1, filter_loc=''):
|
def next(self, index=1, filter_loc=''):
|
||||||
"""返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 \n
|
"""返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个
|
||||||
:param index: 第几个查询结果元素
|
:param index: 第几个查询结果元素
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:return: DriverElement对象
|
:return: DriverElement对象
|
||||||
@ -84,7 +84,7 @@ class ShadowRootElement(BaseElement):
|
|||||||
return nodes[index - 1] if nodes else None
|
return nodes[index - 1] if nodes else None
|
||||||
|
|
||||||
def before(self, index=1, filter_loc=''):
|
def before(self, index=1, filter_loc=''):
|
||||||
"""返回前面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 \n
|
"""返回前面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个
|
||||||
:param index: 前面第几个查询结果元素
|
:param index: 前面第几个查询结果元素
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:return: 本元素前面的某个元素或节点
|
:return: 本元素前面的某个元素或节点
|
||||||
@ -93,7 +93,7 @@ class ShadowRootElement(BaseElement):
|
|||||||
return nodes[index - 1] if nodes else None
|
return nodes[index - 1] if nodes else None
|
||||||
|
|
||||||
def after(self, index=1, filter_loc=''):
|
def after(self, index=1, filter_loc=''):
|
||||||
"""返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 \n
|
"""返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个
|
||||||
:param index: 后面第几个查询结果元素
|
:param index: 后面第几个查询结果元素
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:return: 本元素后面的某个元素或节点
|
:return: 本元素后面的某个元素或节点
|
||||||
@ -102,7 +102,7 @@ class ShadowRootElement(BaseElement):
|
|||||||
return nodes[index - 1] if nodes else None
|
return nodes[index - 1] if nodes else None
|
||||||
|
|
||||||
def nexts(self, filter_loc=''):
|
def nexts(self, filter_loc=''):
|
||||||
"""返回后面所有兄弟元素或节点组成的列表 \n
|
"""返回后面所有兄弟元素或节点组成的列表
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:return: DriverElement对象组成的列表
|
:return: DriverElement对象组成的列表
|
||||||
"""
|
"""
|
||||||
@ -115,7 +115,7 @@ class ShadowRootElement(BaseElement):
|
|||||||
return self.parent_ele.eles(xpath, timeout=0.1)
|
return self.parent_ele.eles(xpath, timeout=0.1)
|
||||||
|
|
||||||
def befores(self, filter_loc=''):
|
def befores(self, filter_loc=''):
|
||||||
"""返回后面全部兄弟元素或节点组成的列表,可用查询语法筛选 \n
|
"""返回后面全部兄弟元素或节点组成的列表,可用查询语法筛选
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:return: 本元素前面的元素或节点组成的列表
|
:return: 本元素前面的元素或节点组成的列表
|
||||||
"""
|
"""
|
||||||
@ -128,7 +128,7 @@ class ShadowRootElement(BaseElement):
|
|||||||
return self.parent_ele.eles(xpath, timeout=0.1)
|
return self.parent_ele.eles(xpath, timeout=0.1)
|
||||||
|
|
||||||
def afters(self, filter_loc=''):
|
def afters(self, filter_loc=''):
|
||||||
"""返回前面全部兄弟元素或节点组成的列表,可用查询语法筛选 \n
|
"""返回前面全部兄弟元素或节点组成的列表,可用查询语法筛选
|
||||||
:param filter_loc: 用于筛选元素的查询语法
|
:param filter_loc: 用于筛选元素的查询语法
|
||||||
:return: 本元素后面的元素或节点组成的列表
|
:return: 本元素后面的元素或节点组成的列表
|
||||||
"""
|
"""
|
||||||
@ -138,7 +138,7 @@ class ShadowRootElement(BaseElement):
|
|||||||
return eles1 + self.parent_ele.eles(xpath, timeout=0.1)
|
return eles1 + self.parent_ele.eles(xpath, timeout=0.1)
|
||||||
|
|
||||||
def ele(self, loc_or_str, timeout=None):
|
def ele(self, loc_or_str, timeout=None):
|
||||||
"""返回当前元素下级符合条件的第一个元素,默认返回 \n
|
"""返回当前元素下级符合条件的第一个元素,默认返回
|
||||||
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
||||||
:param timeout: 查找元素超时时间,默认与元素所在页面等待时间一致
|
:param timeout: 查找元素超时时间,默认与元素所在页面等待时间一致
|
||||||
:return: DriverElement对象或属性、文本
|
:return: DriverElement对象或属性、文本
|
||||||
@ -146,7 +146,7 @@ class ShadowRootElement(BaseElement):
|
|||||||
return self._ele(loc_or_str, timeout)
|
return self._ele(loc_or_str, timeout)
|
||||||
|
|
||||||
def eles(self, loc_or_str, timeout=None):
|
def eles(self, loc_or_str, timeout=None):
|
||||||
"""返回当前元素下级所有符合条件的子元素 \n
|
"""返回当前元素下级所有符合条件的子元素
|
||||||
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
||||||
:param timeout: 查找元素超时时间,默认与元素所在页面等待时间一致
|
:param timeout: 查找元素超时时间,默认与元素所在页面等待时间一致
|
||||||
:return: DriverElement对象或属性、文本组成的列表
|
:return: DriverElement对象或属性、文本组成的列表
|
||||||
@ -154,21 +154,21 @@ class ShadowRootElement(BaseElement):
|
|||||||
return self._ele(loc_or_str, timeout=timeout, single=False)
|
return self._ele(loc_or_str, timeout=timeout, single=False)
|
||||||
|
|
||||||
def s_ele(self, loc_or_str=None) -> Union[SessionElement, str, None]:
|
def s_ele(self, loc_or_str=None) -> Union[SessionElement, str, None]:
|
||||||
"""查找第一个符合条件的元素以SessionElement形式返回,处理复杂页面时效率很高 \n
|
"""查找第一个符合条件的元素以SessionElement形式返回,处理复杂页面时效率很高
|
||||||
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
||||||
:return: SessionElement对象或属性、文本
|
:return: SessionElement对象或属性、文本
|
||||||
"""
|
"""
|
||||||
return make_session_ele(self, loc_or_str)
|
return make_session_ele(self, loc_or_str)
|
||||||
|
|
||||||
def s_eles(self, loc_or_str):
|
def s_eles(self, loc_or_str):
|
||||||
"""查找所有符合条件的元素以SessionElement列表形式返回,处理复杂页面时效率很高 \n
|
"""查找所有符合条件的元素以SessionElement列表形式返回,处理复杂页面时效率很高
|
||||||
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
||||||
:return: SessionElement对象或属性、文本
|
:return: SessionElement对象或属性、文本
|
||||||
"""
|
"""
|
||||||
return make_session_ele(self, loc_or_str, single=False)
|
return make_session_ele(self, loc_or_str, single=False)
|
||||||
|
|
||||||
def _ele(self, loc_or_str, timeout=None, single=True, relative=False):
|
def _ele(self, loc_or_str, timeout=None, single=True, relative=False):
|
||||||
"""返回当前元素下级符合条件的子元素,默认返回第一个 \n
|
"""返回当前元素下级符合条件的子元素,默认返回第一个
|
||||||
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
||||||
:param timeout: 查找元素超时时间
|
:param timeout: 查找元素超时时间
|
||||||
:param single: True则返回第一个,False则返回全部
|
:param single: True则返回第一个,False则返回全部
|
||||||
@ -197,7 +197,7 @@ class ShadowRootElement(BaseElement):
|
|||||||
return [make_driver_ele(self, f'css:{css}', True, timeout) for css in css_paths]
|
return [make_driver_ele(self, f'css:{css}', True, timeout) for css in css_paths]
|
||||||
|
|
||||||
def run_script(self, script, *args):
|
def run_script(self, script, *args):
|
||||||
"""执行js代码,传入自己为第一个参数 \n
|
"""执行js代码,传入自己为第一个参数
|
||||||
:param script: js文本
|
:param script: js文本
|
||||||
:param args: 传入的参数
|
:param args: 传入的参数
|
||||||
:return: js执行结果
|
:return: js执行结果
|
||||||
|
@ -24,7 +24,7 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
|
|||||||
"""整合浏览器和request的页面类"""
|
"""整合浏览器和request的页面类"""
|
||||||
|
|
||||||
def __init__(self, mode='d', timeout=None, tab_id=None, driver_or_options=None, session_or_options=None):
|
def __init__(self, mode='d', timeout=None, tab_id=None, driver_or_options=None, session_or_options=None):
|
||||||
"""初始化函数 \n
|
"""初始化函数
|
||||||
:param mode: 'd' 或 's',即driver模式和session模式
|
:param mode: 'd' 或 's',即driver模式和session模式
|
||||||
:param tab_id: 要控制的标签页id,不指定默认为激活的
|
:param tab_id: 要控制的标签页id,不指定默认为激活的
|
||||||
:param timeout: 超时时间,d模式时为寻找元素时间,s模式时为连接时间,默认10秒
|
:param timeout: 超时时间,d模式时为寻找元素时间,s模式时为连接时间,默认10秒
|
||||||
@ -121,8 +121,8 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
def __call__(self, loc_or_str, timeout=None):
|
def __call__(self, loc_or_str, timeout=None):
|
||||||
"""在内部查找元素 \n
|
"""在内部查找元素
|
||||||
例:ele = page('@id=ele_id') \n
|
例:ele = page('@id=ele_id')
|
||||||
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
||||||
:param timeout: 超时时间
|
:param timeout: 超时时间
|
||||||
:return: 子元素对象
|
:return: 子元素对象
|
||||||
@ -219,7 +219,7 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
|
|||||||
|
|
||||||
@timeout.setter
|
@timeout.setter
|
||||||
def timeout(self, second):
|
def timeout(self, second):
|
||||||
"""设置通用超时时间 \n
|
"""设置通用超时时间
|
||||||
:param second: 秒数
|
:param second: 秒数
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
@ -238,7 +238,7 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
|
|||||||
return self._download_set
|
return self._download_set
|
||||||
|
|
||||||
def get(self, url, show_errmsg=False, retry=None, interval=None, timeout=None, **kwargs):
|
def get(self, url, show_errmsg=False, retry=None, interval=None, timeout=None, **kwargs):
|
||||||
"""跳转到一个url \n
|
"""跳转到一个url
|
||||||
:param url: 目标url
|
:param url: 目标url
|
||||||
:param show_errmsg: 是否显示和抛出异常
|
:param show_errmsg: 是否显示和抛出异常
|
||||||
:param retry: 重试次数
|
:param retry: 重试次数
|
||||||
@ -255,7 +255,7 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
|
|||||||
return super().get(url, show_errmsg, retry, interval, timeout, **kwargs)
|
return super().get(url, show_errmsg, retry, interval, timeout, **kwargs)
|
||||||
|
|
||||||
def ele(self, loc_or_ele, timeout=None):
|
def ele(self, loc_or_ele, timeout=None):
|
||||||
"""返回第一个符合条件的元素、属性或节点文本 \n
|
"""返回第一个符合条件的元素、属性或节点文本
|
||||||
:param loc_or_ele: 元素的定位信息,可以是元素对象,loc元组,或查询字符串
|
:param loc_or_ele: 元素的定位信息,可以是元素对象,loc元组,或查询字符串
|
||||||
:param timeout: 查找元素超时时间,默认与页面等待时间一致
|
:param timeout: 查找元素超时时间,默认与页面等待时间一致
|
||||||
:return: 元素对象或属性、文本节点文本
|
:return: 元素对象或属性、文本节点文本
|
||||||
@ -266,7 +266,7 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
|
|||||||
return super(SessionPage, self).ele(loc_or_ele, timeout=timeout)
|
return super(SessionPage, self).ele(loc_or_ele, timeout=timeout)
|
||||||
|
|
||||||
def eles(self, loc_or_str, timeout=None):
|
def eles(self, loc_or_str, timeout=None):
|
||||||
"""返回页面中所有符合条件的元素、属性或节点文本 \n
|
"""返回页面中所有符合条件的元素、属性或节点文本
|
||||||
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
||||||
:param timeout: 查找元素超时时间,默认与页面等待时间一致
|
:param timeout: 查找元素超时时间,默认与页面等待时间一致
|
||||||
:return: 元素对象或属性、文本组成的列表
|
:return: 元素对象或属性、文本组成的列表
|
||||||
@ -277,7 +277,7 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
|
|||||||
return super(SessionPage, self).eles(loc_or_str, timeout=timeout)
|
return super(SessionPage, self).eles(loc_or_str, timeout=timeout)
|
||||||
|
|
||||||
def s_ele(self, loc_or_ele=None):
|
def s_ele(self, loc_or_ele=None):
|
||||||
"""查找第一个符合条件的元素以SessionElement形式返回,d模式处理复杂页面时效率很高 \n
|
"""查找第一个符合条件的元素以SessionElement形式返回,d模式处理复杂页面时效率很高
|
||||||
:param loc_or_ele: 元素的定位信息,可以是loc元组,或查询字符串
|
:param loc_or_ele: 元素的定位信息,可以是loc元组,或查询字符串
|
||||||
:return: SessionElement对象或属性、文本
|
:return: SessionElement对象或属性、文本
|
||||||
"""
|
"""
|
||||||
@ -287,7 +287,7 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
|
|||||||
return super(SessionPage, self).s_ele(loc_or_ele)
|
return super(SessionPage, self).s_ele(loc_or_ele)
|
||||||
|
|
||||||
def s_eles(self, loc_or_str):
|
def s_eles(self, loc_or_str):
|
||||||
"""查找所有符合条件的元素以SessionElement形式返回,d模式处理复杂页面时效率很高 \n
|
"""查找所有符合条件的元素以SessionElement形式返回,d模式处理复杂页面时效率很高
|
||||||
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
:param loc_or_str: 元素的定位信息,可以是loc元组,或查询字符串
|
||||||
:return: SessionElement对象或属性、文本组成的列表
|
:return: SessionElement对象或属性、文本组成的列表
|
||||||
"""
|
"""
|
||||||
@ -297,9 +297,9 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
|
|||||||
return super(SessionPage, self).s_eles(loc_or_str)
|
return super(SessionPage, self).s_eles(loc_or_str)
|
||||||
|
|
||||||
def change_mode(self, mode=None, go=True, copy_cookies=True):
|
def change_mode(self, mode=None, go=True, copy_cookies=True):
|
||||||
"""切换模式,接收's'或'd',除此以外的字符串会切换为 d 模式 \n
|
"""切换模式,接收's'或'd',除此以外的字符串会切换为 d 模式
|
||||||
如copy_cookies为True,切换时会把当前模式的cookies复制到目标模式 \n
|
如copy_cookies为True,切换时会把当前模式的cookies复制到目标模式
|
||||||
切换后,如果go是True,调用相应的get函数使访问的页面同步 \n
|
切换后,如果go是True,调用相应的get函数使访问的页面同步
|
||||||
:param mode: 模式字符串
|
:param mode: 模式字符串
|
||||||
:param go: 是否跳转到原模式的url
|
:param go: 是否跳转到原模式的url
|
||||||
:param copy_cookies: 是否复制cookies到目标模式
|
:param copy_cookies: 是否复制cookies到目标模式
|
||||||
@ -339,7 +339,7 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
|
|||||||
self.get(url)
|
self.get(url)
|
||||||
|
|
||||||
def cookies_to_session(self, copy_user_agent=True):
|
def cookies_to_session(self, copy_user_agent=True):
|
||||||
"""把driver对象的cookies复制到session对象 \n
|
"""把driver对象的cookies复制到session对象
|
||||||
:param copy_user_agent: 是否复制ua信息
|
:param copy_user_agent: 是否复制ua信息
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
@ -363,7 +363,7 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
|
|||||||
self.set_cookies(cookies, set_driver=True)
|
self.set_cookies(cookies, set_driver=True)
|
||||||
|
|
||||||
def get_cookies(self, as_dict=False, all_domains=False):
|
def get_cookies(self, as_dict=False, all_domains=False):
|
||||||
"""返回cookies \n
|
"""返回cookies
|
||||||
:param as_dict: 是否以字典方式返回
|
:param as_dict: 是否以字典方式返回
|
||||||
:param all_domains: 是否返回所有域的cookies
|
:param all_domains: 是否返回所有域的cookies
|
||||||
:return: cookies信息
|
:return: cookies信息
|
||||||
@ -374,7 +374,7 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
|
|||||||
return self._get_driver_cookies(as_dict)
|
return self._get_driver_cookies(as_dict)
|
||||||
|
|
||||||
def _get_driver_cookies(self, as_dict=False):
|
def _get_driver_cookies(self, as_dict=False):
|
||||||
"""获取浏览器cookies \n
|
"""获取浏览器cookies
|
||||||
:param as_dict: 以dict形式返回
|
:param as_dict: 以dict形式返回
|
||||||
:return: cookies信息
|
:return: cookies信息
|
||||||
"""
|
"""
|
||||||
@ -385,7 +385,7 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
|
|||||||
return cookies
|
return cookies
|
||||||
|
|
||||||
def set_cookies(self, cookies, set_session=False, set_driver=False):
|
def set_cookies(self, cookies, set_session=False, set_driver=False):
|
||||||
"""添加cookies信息到浏览器或session对象 \n
|
"""添加cookies信息到浏览器或session对象
|
||||||
:param cookies: 可以接收`CookieJar`、`list`、`tuple`、`str`、`dict`格式的`cookies`
|
:param cookies: 可以接收`CookieJar`、`list`、`tuple`、`str`、`dict`格式的`cookies`
|
||||||
:param set_session: 是否设置到Session对象
|
:param set_session: 是否设置到Session对象
|
||||||
:param set_driver: 是否设置到浏览器
|
:param set_driver: 是否设置到浏览器
|
||||||
@ -409,7 +409,7 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
|
|||||||
super().set_cookies(cookies)
|
super().set_cookies(cookies)
|
||||||
|
|
||||||
def set_headers(self, headers: dict) -> None:
|
def set_headers(self, headers: dict) -> None:
|
||||||
"""设置固定发送的headers \n
|
"""设置固定发送的headers
|
||||||
:param headers: dict格式的headers数据
|
:param headers: dict格式的headers数据
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
@ -439,7 +439,7 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
|
|||||||
|
|
||||||
# ----------------重写SessionPage的函数-----------------------
|
# ----------------重写SessionPage的函数-----------------------
|
||||||
def post(self, url: str, data=None, show_errmsg=False, retry=None, interval=None, **kwargs):
|
def post(self, url: str, data=None, show_errmsg=False, retry=None, interval=None, **kwargs):
|
||||||
"""用post方式跳转到url,会切换到s模式 \n
|
"""用post方式跳转到url,会切换到s模式
|
||||||
:param url: 目标url
|
:param url: 目标url
|
||||||
:param data: post方式时提交的数据
|
:param data: post方式时提交的数据
|
||||||
:param show_errmsg: 是否显示和抛出异常
|
:param show_errmsg: 是否显示和抛出异常
|
||||||
@ -459,7 +459,7 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
|
|||||||
return super().download
|
return super().download
|
||||||
|
|
||||||
def _ele(self, loc_or_ele, timeout=None, single=True, relative=False):
|
def _ele(self, loc_or_ele, timeout=None, single=True, relative=False):
|
||||||
"""返回页面中符合条件的元素、属性或节点文本,默认返回第一个 \n
|
"""返回页面中符合条件的元素、属性或节点文本,默认返回第一个
|
||||||
:param loc_or_ele: 元素的定位信息,可以是元素对象,loc元组,或查询字符串
|
:param loc_or_ele: 元素的定位信息,可以是元素对象,loc元组,或查询字符串
|
||||||
:param timeout: 查找元素超时时间,d模式专用
|
:param timeout: 查找元素超时时间,d模式专用
|
||||||
:param single: True则返回第一个,False则返回全部
|
:param single: True则返回第一个,False则返回全部
|
||||||
|
Loading…
x
Reference in New Issue
Block a user