修改注释

This commit is contained in:
g1879 2023-01-19 11:40:16 +08:00
parent 17ae5e83b1
commit 1b44dea669
18 changed files with 351 additions and 350 deletions

View File

@ -23,7 +23,7 @@ class ActionChains:
self.curr_y = 0
def move_to(self, ele_or_loc, offset_x=0, offset_y=0):
"""鼠标移动到元素中点,或页面上的某个绝对坐标。可设置偏移量 \n
"""鼠标移动到元素中点,或页面上的某个绝对坐标。可设置偏移量
当带偏移量时偏移量相对于元素左上角坐标
:param ele_or_loc: 元素对象绝对坐标或文本定位符坐标为tuple(int, int)形式
:param offset_x: 偏移量x
@ -64,7 +64,7 @@ class ActionChains:
return self
def move(self, offset_x=0, offset_y=0):
"""鼠标相对当前位置移动若干位置 \n
"""鼠标相对当前位置移动若干位置
:param offset_x: 偏移量x
:param offset_y: 偏移量y
:return: self
@ -75,7 +75,7 @@ class ActionChains:
return self
def click(self, on_ele=None):
"""点击鼠标左键,可先移动到元素上 \n
"""点击鼠标左键,可先移动到元素上
:param on_ele: ChromiumElement元素或文本定位符
:return: self
"""
@ -85,7 +85,7 @@ class ActionChains:
return self
def r_click(self, on_ele=None):
"""点击鼠标右键,可先移动到元素上 \n
"""点击鼠标右键,可先移动到元素上
:param on_ele: ChromiumElement元素或文本定位符
:return: self
"""
@ -95,7 +95,7 @@ class ActionChains:
return self
def m_click(self, on_ele=None):
"""点击鼠标中键,可先移动到元素上 \n
"""点击鼠标中键,可先移动到元素上
:param on_ele: ChromiumElement元素或文本定位符
:return: self
"""
@ -105,7 +105,7 @@ class ActionChains:
return self
def hold(self, on_ele=None):
"""按住鼠标左键,可先移动到元素上 \n
"""按住鼠标左键,可先移动到元素上
:param on_ele: ChromiumElement元素或文本定位符
:return: self
"""
@ -115,7 +115,7 @@ class ActionChains:
return self
def release(self, on_ele=None):
"""释放鼠标左键,可先移动到元素上 \n
"""释放鼠标左键,可先移动到元素上
:param on_ele: ChromiumElement元素或文本定位符
:return: self
"""
@ -125,7 +125,7 @@ class ActionChains:
return self
def r_hold(self, on_ele=None):
"""按住鼠标右键,可先移动到元素上 \n
"""按住鼠标右键,可先移动到元素上
:param on_ele: ChromiumElement元素或文本定位符
:return: self
"""
@ -135,7 +135,7 @@ class ActionChains:
return self
def r_release(self, on_ele=None):
"""释放鼠标右键,可先移动到元素上 \n
"""释放鼠标右键,可先移动到元素上
:param on_ele: ChromiumElement元素或文本定位符
:return: self
"""
@ -145,7 +145,7 @@ class ActionChains:
return self
def m_hold(self, on_ele=None):
"""按住鼠标中键,可先移动到元素上 \n
"""按住鼠标中键,可先移动到元素上
:param on_ele: ChromiumElement元素或文本定位符
:return: self
"""
@ -155,7 +155,7 @@ class ActionChains:
return self
def m_release(self, on_ele=None):
"""释放鼠标中键,可先移动到元素上 \n
"""释放鼠标中键,可先移动到元素上
:param on_ele: ChromiumElement元素或文本定位符
:return: self
"""
@ -165,7 +165,7 @@ class ActionChains:
return self
def _hold(self, button):
"""按下鼠标按键 \n
"""按下鼠标按键
:param button: 要按下的按键
:return: self
"""
@ -174,7 +174,7 @@ class ActionChains:
return self
def _release(self, button):
"""释放鼠标按键 \n
"""释放鼠标按键
:param button: 要释放的按键
:return: self
"""
@ -183,7 +183,7 @@ class ActionChains:
return self
def scroll(self, delta_x=0, delta_y=0, on_ele=None):
"""滚动鼠标滚轮,可先移动到元素上 \n
"""滚动鼠标滚轮,可先移动到元素上
:param delta_x: 滚轮变化值x
:param delta_y: 滚轮变化值y
:param on_ele: ChromiumElement元素
@ -196,35 +196,35 @@ class ActionChains:
return self
def up(self, pixel):
"""鼠标向上移动若干像素 \n
"""鼠标向上移动若干像素
:param pixel: 鼠标移动的像素值
:return: self
"""
return self.move(0, -pixel)
def down(self, pixel):
"""鼠标向下移动若干像素 \n
"""鼠标向下移动若干像素
:param pixel: 鼠标移动的像素值
:return: self
"""
return self.move(0, pixel)
def left(self, pixel):
"""鼠标向左移动若干像素 \n
"""鼠标向左移动若干像素
:param pixel: 鼠标移动的像素值
:return: self
"""
return self.move(-pixel, 0)
def right(self, pixel):
"""鼠标向右移动若干像素 \n
"""鼠标向右移动若干像素
:param pixel: 鼠标移动的像素值
:return: self
"""
return self.move(pixel, 0)
def key_down(self, key):
"""按下键盘上的按键 \n
"""按下键盘上的按键
:param key: 按键特殊字符见Keys
:return: self
"""
@ -237,7 +237,7 @@ class ActionChains:
return self
def key_up(self, key):
"""提起键盘上的按键 \n
"""提起键盘上的按键
:param key: 按键特殊字符见Keys
:return: self
"""
@ -250,7 +250,7 @@ class ActionChains:
return self
def type(self, text):
"""输入文本 \n
"""输入文本
:param text: 要输入的文本
:return: self
"""
@ -266,7 +266,7 @@ class ActionChains:
return self
def _get_key_data(self, key, action):
"""获取用于发送的按键信息 \n
"""获取用于发送的按键信息
:param key: 按键
:param action: 'keyDown' 'keyUp'
:return: 按键信息

View File

@ -95,7 +95,7 @@ class DrissionElement(BaseElement):
return self.eles('xpath:.//comment()')
def texts(self, text_node_only=False):
"""返回元素内所有直接子节点的文本,包括元素和文本节点 \n
"""返回元素内所有直接子节点的文本,包括元素和文本节点
:param text_node_only: 是否只返回文本节点
: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) != '']
def parent(self, level_or_loc=1):
"""返回上面某一级父元素,可指定层数或用查询语法定位 \n
"""返回上面某一级父元素,可指定层数或用查询语法定位
:param level_or_loc: 第几级父元素或定位符
:return: 上级元素对象
"""
@ -128,7 +128,7 @@ class DrissionElement(BaseElement):
return self._ele(loc, timeout=0, relative=True)
def prev(self, index=1, filter_loc='', timeout=0):
"""返回前面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 \n
"""返回前面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个
:param index: 前面第几个查询结果元素
:param filter_loc: 用于筛选元素的查询语法
:param timeout: 查找元素的超时时间
@ -138,7 +138,7 @@ class DrissionElement(BaseElement):
return nodes[-1] if nodes else None
def next(self, index=1, filter_loc='', timeout=0):
"""返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 \n
"""返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个
:param index: 后面第几个查询结果元素
:param filter_loc: 用于筛选元素的查询语法
:param timeout: 查找元素的超时时间
@ -148,7 +148,7 @@ class DrissionElement(BaseElement):
return nodes[0] if nodes else None
def before(self, index=1, filter_loc='', timeout=None):
"""返回前面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 \n
"""返回前面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个
:param index: 前面第几个查询结果元素
:param filter_loc: 用于筛选元素的查询语法
:param timeout: 查找元素的超时时间
@ -158,7 +158,7 @@ class DrissionElement(BaseElement):
return nodes[-1] if nodes else None
def after(self, index=1, filter_loc='', timeout=None):
"""返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 \n
"""返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个
:param index: 后面第几个查询结果元素
:param filter_loc: 用于筛选元素的查询语法
:param timeout: 查找元素的超时时间
@ -168,7 +168,7 @@ class DrissionElement(BaseElement):
return nodes[0] if nodes else None
def prevs(self, filter_loc='', timeout=0):
"""返回前面全部兄弟元素或节点组成的列表,可用查询语法筛选 \n
"""返回前面全部兄弟元素或节点组成的列表,可用查询语法筛选
:param filter_loc: 用于筛选元素的查询语法
:param timeout: 查找元素的超时时间
:return: 兄弟元素或节点文本组成的列表
@ -176,7 +176,7 @@ class DrissionElement(BaseElement):
return self._get_brothers(filter_loc=filter_loc, direction='preceding', timeout=timeout)
def nexts(self, filter_loc='', timeout=0):
"""返回后面全部兄弟元素或节点组成的列表,可用查询语法筛选 \n
"""返回后面全部兄弟元素或节点组成的列表,可用查询语法筛选
:param filter_loc: 用于筛选元素的查询语法
:param timeout: 查找元素的超时时间
:return: 兄弟元素或节点文本组成的列表
@ -184,7 +184,7 @@ class DrissionElement(BaseElement):
return self._get_brothers(filter_loc=filter_loc, direction='following', timeout=timeout)
def befores(self, filter_loc='', timeout=None):
"""返回后面全部兄弟元素或节点组成的列表,可用查询语法筛选 \n
"""返回后面全部兄弟元素或节点组成的列表,可用查询语法筛选
:param filter_loc: 用于筛选元素的查询语法
:param timeout: 查找元素的超时时间
:return: 本元素前面的元素或节点组成的列表
@ -192,7 +192,7 @@ class DrissionElement(BaseElement):
return self._get_brothers(filter_loc=filter_loc, direction='preceding', brother=False, timeout=timeout)
def afters(self, filter_loc='', timeout=None):
"""返回前面全部兄弟元素或节点组成的列表,可用查询语法筛选 \n
"""返回前面全部兄弟元素或节点组成的列表,可用查询语法筛选
:param filter_loc: 用于筛选元素的查询语法
:param timeout: 查找元素的超时时间
:return: 本元素后面的元素或节点组成的列表
@ -200,7 +200,7 @@ class DrissionElement(BaseElement):
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):
"""按要求返回兄弟元素或节点组成的列表 \n
"""按要求返回兄弟元素或节点组成的列表
:param index: 获取第几个该参数不为None时只获取该编号的元素
:param filter_loc: 用于筛选元素的查询语法
:param direction: 'following' 'preceding'查找的方向
@ -295,7 +295,7 @@ class BasePage(BaseParser):
return self._url_available
def _before_connect(self, url, retry, interval):
"""连接前的准备 \n
"""连接前的准备
:param url: 要访问的url
:param retry: 重试次数
:param interval: 重试间隔

View File

@ -38,7 +38,7 @@ class ChromiumBase(BasePage):
super().__init__(timeout)
def _connect_browser(self, addr_driver_opts=None, tab_id=None):
"""连接浏览器,在第一次时运行 \n
"""连接浏览器,在第一次时运行
:param addr_driver_opts: 浏览器地址ChromiumDriver对象或DriverOptions对象
:param tab_id: 要控制的标签页id不指定默认为激活的
:return: None
@ -183,8 +183,8 @@ class ChromiumBase(BasePage):
self._debug_recorder.add_data((perf_counter(), '加载流程', 'navigated'))
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 timeout: 超时时间
:return: ChromiumElement对象
@ -281,7 +281,7 @@ class ChromiumBase(BasePage):
return PageLoadStrategy(self)
def set_timeouts(self, implicit=None, page_load=None, script=None):
"""设置超时时间,单位为秒 \n
"""设置超时时间,单位为秒
:param implicit: 查找元素超时时间
:param page_load: 页面加载超时时间
:param script: 脚本运行超时时间
@ -297,7 +297,7 @@ class ChromiumBase(BasePage):
self._timeouts.script = script
def run_js(self, script, as_expr=False, *args):
"""运行javascript代码 \n
"""运行javascript代码
:param script: js文本
:param as_expr: 是否作为表达式运行为True时args无效
: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)
def run_async_js(self, script, as_expr=False, *args):
"""以异步方式执行js代码 \n
"""以异步方式执行js代码
:param script: js文本
:param as_expr: 是否作为表达式运行为True时args无效
: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()
def get(self, url, show_errmsg=False, retry=None, interval=None, timeout=None):
"""访问url \n
"""访问url
:param url: 目标url
:param show_errmsg: 是否显示和抛出异常
:param retry: 重试次数
@ -335,7 +335,7 @@ class ChromiumBase(BasePage):
return self._url_available
def wait_loading(self, timeout=1):
"""阻塞程序,等待页面进入加载状态 \n
"""阻塞程序,等待页面进入加载状态
:param timeout: 超时时间
:return: 等待结束时是否进入加载状态
"""
@ -349,7 +349,7 @@ class ChromiumBase(BasePage):
return False
def get_cookies(self, as_dict=False):
"""获取cookies信息 \n
"""获取cookies信息
:param as_dict: 为True时返回由{name: value}键值对组成的dict
:return: cookies信息
"""
@ -360,7 +360,7 @@ class ChromiumBase(BasePage):
return cookies
def set_cookies(self, cookies):
"""设置cookies值 \n
"""设置cookies值
:param cookies: cookies信息
:return: None
"""
@ -376,14 +376,14 @@ class ChromiumBase(BasePage):
self._wait_driver.Network.setCookies(cookies=result_cookies)
def set_headers(self, headers: dict) -> None:
"""设置固定发送的headers \n
"""设置固定发送的headers
:param headers: dict格式的headers数据
:return: None
"""
self.run_cdp('Network.setExtraHTTPHeaders', headers=headers, not_change=True)
def ele(self, loc_or_ele, timeout=None):
"""获取第一个符合条件的元素对象 \n
"""获取第一个符合条件的元素对象
:param loc_or_ele: 定位符或元素对象
:param timeout: 查找超时时间
:return: ChromiumElement对象
@ -391,7 +391,7 @@ class ChromiumBase(BasePage):
return self._ele(loc_or_ele, timeout=timeout)
def eles(self, loc_or_str, timeout=None):
"""获取所有符合条件的元素对象 \n
"""获取所有符合条件的元素对象
:param loc_or_str: 定位符或元素对象
:param timeout: 查找超时时间
:return: ChromiumElement对象组成的列表
@ -399,14 +399,14 @@ class ChromiumBase(BasePage):
return self._ele(loc_or_str, timeout=timeout, single=False)
def s_ele(self, loc_or_ele=None):
"""查找第一个符合条件的元素以SessionElement形式返回处理复杂页面时效率很高 \n
"""查找第一个符合条件的元素以SessionElement形式返回处理复杂页面时效率很高
:param loc_or_ele: 元素的定位信息可以是loc元组或查询字符串
:return: SessionElement对象或属性文本
"""
return make_session_ele(self, loc_or_ele)
def s_eles(self, loc_or_str):
"""查找所有符合条件的元素以SessionElement列表形式返回 \n
"""查找所有符合条件的元素以SessionElement列表形式返回
:param loc_or_str: 元素的定位信息可以是loc元组或查询字符串
:return: SessionElement对象组成的列表
"""
@ -457,7 +457,7 @@ class ChromiumBase(BasePage):
return [make_chromium_ele(self, node_id=i) for i in nodeIds['nodeIds']]
def wait_ele(self, loc_or_ele, timeout=None):
"""返回用于等待元素到达某个状态的等待器对象 \n
"""返回用于等待元素到达某个状态的等待器对象
:param loc_or_ele: 可以是元素查询字符串loc元组
:param timeout: 等待超时时间
:return: 用于等待的ElementWaiter对象
@ -465,7 +465,7 @@ class ChromiumBase(BasePage):
return ChromiumElementWaiter(self, loc_or_ele, timeout)
def scroll_to_see(self, loc_or_ele):
"""滚动页面直到元素可见 \n
"""滚动页面直到元素可见
:param loc_or_ele: 元素的定位信息可以是loc元组或查询字符串详见ele函数注释
:return: None
"""
@ -480,7 +480,7 @@ class ChromiumBase(BasePage):
offset_scroll(ele, 0, 0)
def refresh(self, ignore_cache=False):
"""刷新当前页面 \n
"""刷新当前页面
:param ignore_cache: 是否忽略缓存
:return: None
"""
@ -488,14 +488,14 @@ class ChromiumBase(BasePage):
self._driver.Page.reload(ignoreCache=ignore_cache)
def forward(self, steps=1):
"""在浏览历史中前进若干步 \n
"""在浏览历史中前进若干步
:param steps: 前进步数
:return: None
"""
self._forward_or_back(steps)
def back(self, steps=1):
"""在浏览历史中后退若干步 \n
"""在浏览历史中后退若干步
:param steps: 后退步数
:return: None
"""
@ -539,7 +539,7 @@ class ChromiumBase(BasePage):
sleep(.1)
def run_cdp(self, cmd, **cmd_args):
"""执行Chrome DevTools Protocol语句 \n
"""执行Chrome DevTools Protocol语句
:param cmd: 协议项目
:param cmd_args: 参数
:return: 执行的结果
@ -558,14 +558,14 @@ class ChromiumBase(BasePage):
raise
def set_user_agent(self, ua):
"""为当前tab设置user agent只在当前tab有效 \n
"""为当前tab设置user agent只在当前tab有效
:param ua: user agent字符串
:return: None
"""
self._wait_driver.Network.setUserAgentOverride(userAgent=ua)
def get_session_storage(self, item=None):
"""获取sessionStorage信息不设置item则获取全部 \n
"""获取sessionStorage信息不设置item则获取全部
:param item: 要获取的项不设置则返回全部
:return: sessionStorage一个或所有项内容
"""
@ -573,7 +573,7 @@ class ChromiumBase(BasePage):
return self.run_js(js, as_expr=True)
def get_local_storage(self, item=None):
"""获取localStorage信息不设置item则获取全部 \n
"""获取localStorage信息不设置item则获取全部
:param item: 要获取的项目不设置则返回全部
:return: localStorage一个或所有项内容
"""
@ -581,7 +581,7 @@ class ChromiumBase(BasePage):
return self.run_js(js, as_expr=True)
def set_session_storage(self, item, value):
"""设置或删除某项sessionStorage信息 \n
"""设置或删除某项sessionStorage信息
:param item: 要设置的项
:param value: 项的值设置为False时删除该项
:return: None
@ -591,7 +591,7 @@ class ChromiumBase(BasePage):
return self.run_js(js, as_expr=True)
def set_local_storage(self, item, value):
"""设置或删除某项localStorage信息 \n
"""设置或删除某项localStorage信息
:param item: 要设置的项
:param value: 项的值设置为False时删除该项
:return: None
@ -600,7 +600,7 @@ class ChromiumBase(BasePage):
return self.run_js(js, as_expr=True)
def clear_cache(self, session_storage=True, local_storage=True, cache=True, cookies=True):
"""清除缓存,可选要清除的项 \n
"""清除缓存,可选要清除的项
:param session_storage: 是否清除sessionStorage
:param local_storage: 是否清除localStorage
:param cache: 是否清除cache
@ -617,7 +617,7 @@ class ChromiumBase(BasePage):
self._wait_driver.Network.clearBrowserCookies()
def _d_connect(self, to_url, times=0, interval=1, show_errmsg=False, timeout=None):
"""尝试连接,重试若干次 \n
"""尝试连接,重试若干次
:param to_url: 要访问的url
:param times: 重试次数
:param interval: 重试间隔
@ -694,7 +694,7 @@ class PageLoadStrategy(object):
self._page = page
def __call__(self, value):
"""设置加载策略 \n
"""设置加载策略
:param value: 可选 'normal', 'eager', 'none'
:return: None
"""

View File

@ -153,7 +153,7 @@ class ChromiumDriver(object):
return attr
def call_method(self, _method, *args, **kwargs):
"""执行cdp方法 \n
"""执行cdp方法
:param _method: cdp方法名
:param args: cdp参数
:param kwargs: cdp参数
@ -203,7 +203,7 @@ class ChromiumDriver(object):
return True
def set_listener(self, event, callback):
"""绑定cdp event和回调方法 \n
"""绑定cdp event和回调方法
:param event: cdp event
:param callback: 绑定到cdp event的回调方法
:return: 回调方法
@ -217,7 +217,7 @@ class ChromiumDriver(object):
return True
def get_listener(self, event):
"""获取cdp event对应的回调方法 \n
"""获取cdp event对应的回调方法
:param event: cdp event
:return: 回调方法
"""

View File

@ -1090,7 +1090,7 @@ class ChromiumShadowRootElement(BaseElement):
def find_in_chromium_ele(ele, loc, single=True, timeout=None, relative=True):
"""在chromium元素中查找 \n
"""在chromium元素中查找
:param ele: ChromiumElement对象
:param loc: 元素定位元组
: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):
"""根据node id或object id生成相应元素对象 \n
"""根据node id或object id生成相应元素对象
:param page: ChromiumPage对象
:param node_id: 元素的node 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):
"""运行javascript代码 \n
"""运行javascript代码
:param page_or_ele: 页面对象或元素对象
:param script: js文本
:param as_expr: 是否作为表达式运行为True时args无效
@ -1434,7 +1434,7 @@ class ChromiumScroll(object):
self._run_js('{}.scrollTo(0, {}.scrollTop);')
def to_location(self, x, y):
"""滚动到指定位置 \n
"""滚动到指定位置
:param x: 水平距离
:param y: 垂直距离
:return: None
@ -1442,7 +1442,7 @@ class ChromiumScroll(object):
self._run_js(f'{{}}.scrollTo({x}, {y});')
def up(self, pixel=300):
"""向上滚动若干像素,水平位置不变 \n
"""向上滚动若干像素,水平位置不变
:param pixel: 滚动的像素
:return: None
"""
@ -1450,14 +1450,14 @@ class ChromiumScroll(object):
self._run_js(f'{{}}.scrollBy(0, {pixel});')
def down(self, pixel=300):
"""向下滚动若干像素,水平位置不变 \n
"""向下滚动若干像素,水平位置不变
:param pixel: 滚动的像素
:return: None
"""
self._run_js(f'{{}}.scrollBy(0, {pixel});')
def left(self, pixel=300):
"""向左滚动若干像素,垂直位置不变 \n
"""向左滚动若干像素,垂直位置不变
:param pixel: 滚动的像素
:return: None
"""
@ -1465,7 +1465,7 @@ class ChromiumScroll(object):
self._run_js(f'{{}}.scrollBy({pixel}, 0);')
def right(self, pixel=300):
"""向右滚动若干像素,垂直位置不变 \n
"""向右滚动若干像素,垂直位置不变
:param pixel: 滚动的像素
:return: None
"""
@ -1485,7 +1485,7 @@ class ChromiumSelect(object):
self._ele = ele
def __call__(self, text_or_index, timeout=None):
"""选定下拉列表中子元素 \n
"""选定下拉列表中子元素
:param text_or_index: 根据文本值选或序号择选项若允许多选传入list或tuple可多选
:param timeout: 超时时间不输入默认实用页面超时时间
:return: None
@ -1507,7 +1507,7 @@ class ChromiumSelect(object):
@property
def selected_option(self):
"""返回第一个被选中的option元素 \n
"""返回第一个被选中的option元素
:return: ChromiumElement对象或None
"""
ele = self._ele.run_js('return this.options[this.selectedIndex];')
@ -1515,7 +1515,7 @@ class ChromiumSelect(object):
@property
def selected_options(self):
"""返回所有被选中的option元素列表 \n
"""返回所有被选中的option元素列表
:return: ChromiumElement对象组成的列表
"""
return [x for x in self.options if x.is_selected]
@ -1529,7 +1529,7 @@ class ChromiumSelect(object):
opt.click(by_js=True)
def by_text(self, text, timeout=None):
"""此方法用于根据text值选择项。当元素是多选列表时可以接收list或tuple \n
"""此方法用于根据text值选择项。当元素是多选列表时可以接收list或tuple
:param text: text属性值传入list或tuple可选择多项
:param timeout: 超时时间不输入默认实用页面超时时间
:return: 是否选择成功
@ -1538,7 +1538,7 @@ class ChromiumSelect(object):
return self._select(text, 'text', False, timeout)
def by_value(self, value, timeout=None):
"""此方法用于根据value值选择项。当元素是多选列表时可以接收list或tuple \n
"""此方法用于根据value值选择项。当元素是多选列表时可以接收list或tuple
:param value: value属性值传入list或tuple可选择多项
:param timeout: 超时时间不输入默认实用页面超时时间
:return: 是否选择成功
@ -1547,7 +1547,7 @@ class ChromiumSelect(object):
return self._select(value, 'value', False, timeout)
def by_index(self, index, timeout=None):
"""此方法用于根据index值选择项。当元素是多选列表时可以接收list或tuple \n
"""此方法用于根据index值选择项。当元素是多选列表时可以接收list或tuple
:param index: 序号0开始传入list或tuple可选择多项
:param timeout: 超时时间不输入默认实用页面超时时间
:return: 是否选择成功
@ -1556,7 +1556,7 @@ class ChromiumSelect(object):
return self._select(index, 'index', False, timeout)
def cancel_by_text(self, text, timeout=None):
"""此方法用于根据text值取消选择项。当元素是多选列表时可以接收list或tuple \n
"""此方法用于根据text值取消选择项。当元素是多选列表时可以接收list或tuple
:param text: 文本传入list或tuple可取消多项
:param timeout: 超时时间不输入默认实用页面超时时间
:return: 是否取消成功
@ -1565,7 +1565,7 @@ class ChromiumSelect(object):
return self._select(text, 'text', True, timeout)
def cancel_by_value(self, value, timeout=None):
"""此方法用于根据value值取消选择项。当元素是多选列表时可以接收list或tuple \n
"""此方法用于根据value值取消选择项。当元素是多选列表时可以接收list或tuple
:param value: value属性值传入list或tuple可取消多项
:param timeout: 超时时间不输入默认实用页面超时时间
:return: 是否取消成功
@ -1574,7 +1574,7 @@ class ChromiumSelect(object):
return self._select(value, 'value', True, timeout)
def cancel_by_index(self, index, timeout=None):
"""此方法用于根据index值取消选择项。当元素是多选列表时可以接收list或tuple \n
"""此方法用于根据index值取消选择项。当元素是多选列表时可以接收list或tuple
:param index: 序号0开始传入list或tuple可取消多项
:param timeout: 超时时间不输入默认实用页面超时时间
:return: 是否取消成功
@ -1591,7 +1591,7 @@ class ChromiumSelect(object):
i.click(by_js=True)
def _select(self, text_value_index=None, para_type='text', deselect=False, timeout=None):
"""选定或取消选定下拉列表中子元素 \n
"""选定或取消选定下拉列表中子元素
:param text_value_index: 根据文本值选或序号择选项若允许多选传入list或tuple可多选
:param para_type: 参数类型可选 'text''value''index'
:param deselect: 是否取消选择
@ -1636,7 +1636,7 @@ class ChromiumSelect(object):
text_value_index=None,
para_type='text',
deselect=False):
"""选定或取消选定下拉列表中多个子元素 \n
"""选定或取消选定下拉列表中多个子元素
:param text_value_index: 根据文本值选或序号择选多项
:param para_type: 参数类型可选 'text''value''index'
:param deselect: 是否取消选择
@ -1664,7 +1664,7 @@ class ChromiumElementWaiter(object):
"""等待元素在dom中某种状态如删除、显示、隐藏"""
def __init__(self, page_or_ele, loc_or_ele, timeout=None):
"""等待元素在dom中某种状态如删除、显示、隐藏 \n
"""等待元素在dom中某种状态如删除、显示、隐藏
:param page_or_ele: 页面或父元素
:param loc_or_ele: 要等待的元素可以是已有元素定位符
:param timeout: 超时时间默认读取页面超时时间

View File

@ -30,8 +30,8 @@ class ChromiumFrame(ChromiumBase):
self.doc_ele = ChromiumElement(self, obj_id=obj_id)
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 timeout: 超时时间
:return: ChromiumElement对象或属性文本
@ -255,7 +255,7 @@ class ChromiumFrame(ChromiumBase):
self.doc_ele.run_js('this.location.reload();')
def attr(self, attr):
"""返回frame元素attribute属性值 \n
"""返回frame元素attribute属性值
:param attr: 属性名
:return: 属性值文本没有该属性返回None
"""
@ -263,7 +263,7 @@ class ChromiumFrame(ChromiumBase):
return self.frame_ele.attr(attr)
def set_attr(self, attr, value):
"""设置frame元素attribute属性 \n
"""设置frame元素attribute属性
:param attr: 属性名
:param value: 属性值
:return: None
@ -272,7 +272,7 @@ class ChromiumFrame(ChromiumBase):
self.frame_ele.set_attr(attr, value)
def remove_attr(self, attr):
"""删除frame元素attribute属性 \n
"""删除frame元素attribute属性
:param attr: 属性名
:return: None
"""
@ -280,7 +280,7 @@ class ChromiumFrame(ChromiumBase):
self.frame_ele.remove_attr(attr)
def run_js(self, script, as_expr=False, *args):
"""运行javascript代码 \n
"""运行javascript代码
:param script: js文本
:param as_expr: 是否作为表达式运行为True时args无效
: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)
def parent(self, level_or_loc=1):
"""返回上面某一级父元素,可指定层数或用查询语法定位 \n
"""返回上面某一级父元素,可指定层数或用查询语法定位
:param level_or_loc: 第几级父元素或定位符
:return: 上级元素对象
"""
@ -298,7 +298,7 @@ class ChromiumFrame(ChromiumBase):
return self.frame_ele.parent(level_or_loc)
def prev(self, filter_loc='', index=1, timeout=0):
"""返回前面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 \n
"""返回前面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个
:param filter_loc: 用于筛选元素的查询语法
:param index: 前面第几个查询结果元素
:param timeout: 查找元素的超时时间
@ -308,7 +308,7 @@ class ChromiumFrame(ChromiumBase):
return self.frame_ele.prev(filter_loc, index, timeout)
def next(self, filter_loc='', index=1, timeout=0):
"""返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 \n
"""返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个
:param filter_loc: 用于筛选元素的查询语法
:param index: 后面第几个查询结果元素
:param timeout: 查找元素的超时时间
@ -318,7 +318,7 @@ class ChromiumFrame(ChromiumBase):
return self.frame_ele.next(filter_loc, index, timeout)
def before(self, filter_loc='', index=1, timeout=None):
"""返回当前元素前面的一个元素可指定筛选条件和第几个。查找范围不限兄弟元素而是整个DOM文档 \n
"""返回当前元素前面的一个元素可指定筛选条件和第几个。查找范围不限兄弟元素而是整个DOM文档
:param filter_loc: 用于筛选元素的查询语法
:param index: 前面第几个查询结果元素
:param timeout: 查找元素的超时时间
@ -328,7 +328,7 @@ class ChromiumFrame(ChromiumBase):
return self.frame_ele.before(filter_loc, index, timeout)
def after(self, filter_loc='', index=1, timeout=None):
"""返回当前元素后面的一个元素可指定筛选条件和第几个。查找范围不限兄弟元素而是整个DOM文档 \n
"""返回当前元素后面的一个元素可指定筛选条件和第几个。查找范围不限兄弟元素而是整个DOM文档
:param filter_loc: 用于筛选元素的查询语法
:param index: 后面第几个查询结果元素
:param timeout: 查找元素的超时时间
@ -338,7 +338,7 @@ class ChromiumFrame(ChromiumBase):
return self.frame_ele.after(filter_loc, index, timeout)
def prevs(self, filter_loc='', timeout=0):
"""返回前面全部兄弟元素或节点组成的列表,可用查询语法筛选 \n
"""返回前面全部兄弟元素或节点组成的列表,可用查询语法筛选
:param filter_loc: 用于筛选元素的查询语法
:param timeout: 查找元素的超时时间
:return: 兄弟元素或节点文本组成的列表
@ -347,7 +347,7 @@ class ChromiumFrame(ChromiumBase):
return self.frame_ele.prevs(filter_loc, timeout)
def nexts(self, filter_loc='', timeout=0):
"""返回后面全部兄弟元素或节点组成的列表,可用查询语法筛选 \n
"""返回后面全部兄弟元素或节点组成的列表,可用查询语法筛选
:param filter_loc: 用于筛选元素的查询语法
:param timeout: 查找元素的超时时间
:return: 兄弟元素或节点文本组成的列表
@ -356,7 +356,7 @@ class ChromiumFrame(ChromiumBase):
return self.frame_ele.nexts(filter_loc, timeout)
def befores(self, filter_loc='', timeout=None):
"""返回当前元素后面符合条件的全部兄弟元素或节点组成的列表可用查询语法筛选。查找范围不限兄弟元素而是整个DOM文档 \n
"""返回当前元素后面符合条件的全部兄弟元素或节点组成的列表可用查询语法筛选。查找范围不限兄弟元素而是整个DOM文档
:param filter_loc: 用于筛选元素的查询语法
:param timeout: 查找元素的超时时间
:return: 本元素前面的元素或节点组成的列表
@ -365,7 +365,7 @@ class ChromiumFrame(ChromiumBase):
return self.frame_ele.befores(filter_loc, timeout)
def afters(self, filter_loc='', timeout=None):
"""返回当前元素后面符合条件的全部兄弟元素或节点组成的列表可用查询语法筛选。查找范围不限兄弟元素而是整个DOM文档 \n
"""返回当前元素后面符合条件的全部兄弟元素或节点组成的列表可用查询语法筛选。查找范围不限兄弟元素而是整个DOM文档
:param filter_loc: 用于筛选元素的查询语法
:param timeout: 查找元素的超时时间
:return: 本元素前面的元素或节点组成的列表
@ -374,7 +374,7 @@ class ChromiumFrame(ChromiumBase):
return self.frame_ele.afters(filter_loc, timeout)
def _ele(self, loc_or_ele, timeout=None, single=True, relative=False):
"""在frame内查找单个元素 \n
"""在frame内查找单个元素
:param loc_or_ele: 定位符或元素对象
:param timeout: 查找超时时间
: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)
def _d_connect(self, to_url, times=0, interval=1, show_errmsg=False, timeout=None):
"""尝试连接,重试若干次 \n
"""尝试连接,重试若干次
:param to_url: 要访问的url
:param times: 重试次数
:param interval: 重试间隔

View File

@ -28,7 +28,7 @@ class ChromiumPage(ChromiumBase):
super().__init__(addr_driver_opts, tab_id, timeout)
def _connect_browser(self, addr_driver_opts=None, tab_id=None):
"""连接浏览器,在第一次时运行 \n
"""连接浏览器,在第一次时运行
:param addr_driver_opts: 浏览器地址ChromiumDriver对象或DriverOptions对象
:param tab_id: 要控制的标签页id不指定默认为激活的
:return: None
@ -140,7 +140,7 @@ class ChromiumPage(ChromiumBase):
return ChromiumDownloadSetter(self)
def get_tab(self, tab_id=None):
"""获取一个标签页对象 \n
"""获取一个标签页对象
:param tab_id: 要获取的标签页id为None时获取当前tab
:return: 标签页对象
"""
@ -148,7 +148,7 @@ class ChromiumPage(ChromiumBase):
return ChromiumTab(self, tab_id)
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 as_bytes: 是否已字节形式返回图片可选 'jpg','jpeg','png','webp'生效时path参数无效
: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}')
def new_tab(self, url=None, switch_to=True):
"""新建一个标签页,该标签页在最后面 \n
"""新建一个标签页,该标签页在最后面
:param url: 新标签页跳转到的网址
:param switch_to: 新建标签页后是否把焦点移过去
:return: None
@ -231,7 +231,7 @@ class ChromiumPage(ChromiumBase):
self.run_cdp('Target.createTarget', url='')
def set_main_tab(self, tab_id=None):
"""设置主tab \n
"""设置主tab
:param tab_id: 标签页id不传入则设置当前tab
:return: None
"""
@ -242,7 +242,7 @@ class ChromiumPage(ChromiumBase):
self.to_tab(self._main_tab)
def to_tab(self, tab_id=None, activate=True):
"""跳转到标签页 \n
"""跳转到标签页
:param tab_id: 标签页id字符串默认跳转到main_tab
:param activate: 切换后是否变为活动状态
:return: None
@ -250,7 +250,7 @@ class ChromiumPage(ChromiumBase):
self._to_tab(tab_id, activate)
def _to_tab(self, tab_id=None, activate=True, read_doc=True):
"""跳转到标签页 \n
"""跳转到标签页
:param tab_id: 标签页id字符串默认跳转到main_tab
:param activate: 切换后是否变为活动状态
:param read_doc: 切换后是否读取文档
@ -274,7 +274,7 @@ class ChromiumPage(ChromiumBase):
self._get_document()
def close_tabs(self, tab_ids=None, others=False):
"""关闭传入的标签页,默认关闭当前页。可传入多个 \n
"""关闭传入的标签页,默认关闭当前页。可传入多个
:param tab_ids: 要关闭的标签页id可传入id组成的列表或元组为None时关闭当前页
:param others: 是否关闭指定标签页之外的
:return: None
@ -309,14 +309,14 @@ class ChromiumPage(ChromiumBase):
self.to_tab()
def close_other_tabs(self, tab_ids=None):
"""关闭传入的标签页以外标签页,默认保留当前页。可传入多个 \n
"""关闭传入的标签页以外标签页,默认保留当前页。可传入多个
:param tab_ids: 要保留的标签页id可传入id组成的列表或元组为None时保存当前页
:return: None
"""
self.close_tabs(tab_ids, True)
def handle_alert(self, accept=True, send=None, timeout=None):
"""处理提示框,可以自动等待提示框出现 \n
"""处理提示框,可以自动等待提示框出现
:param accept: True表示确认False表示取消其它值不会按按钮但依然返回文本值
:param send: 处理prompt提示框时可输入文本
:param timeout: 等待提示框出现的超时时间为None则使用self.timeout属性的值
@ -426,7 +426,7 @@ class WindowSetter(object):
self._perform({'windowState': 'normal'})
def size(self, width=None, height=None):
"""设置窗口大小 \n
"""设置窗口大小
:param width: 窗口宽度
:param height: 窗口高度
:return: None
@ -438,7 +438,7 @@ class WindowSetter(object):
self._perform({'width': width, 'height': height})
def location(self, x=None, y=None):
"""设置窗口在屏幕中的位置,相对左上角坐标 \n
"""设置窗口在屏幕中的位置,相对左上角坐标
:param x: 距离顶部距离
:param y: 距离左边距离
:return: None

View File

@ -307,11 +307,12 @@ class ChromiumOptions(object):
return self
def auto_port(self, data_path):
def auto_port(self, data_path=None):
"""自动获取可用端口 \n
:param data_path: 用户文件夹保存路径
:param data_path: 用户文件夹保存路径为None则保存在当前路径
:return: 当前对象
"""
data_path = data_path or ''
port, path = PortFinder().get_port(data_path)
self.set_paths(local_port=port, user_data_path=path)
return self

View File

@ -93,7 +93,7 @@ class ChromiumOptions(object):
debugger_address: str = None, download_path: Union[str, Path] = None,
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: ...

View File

@ -75,7 +75,7 @@ class SessionOptions(object):
return self._download_path
def set_paths(self, download_path=None):
"""设置默认下载路径 \n
"""设置默认下载路径
:param download_path: 下载路径
:return: 返回当前对象
"""
@ -104,7 +104,7 @@ class SessionOptions(object):
return self._proxies
def set_proxies(self, http, https=None):
"""设置proxies参数 \n
"""设置proxies参数
:param http: http代理地址
:param https: https代理地址
:return: 返回当前对象
@ -123,7 +123,7 @@ class SessionOptions(object):
return self._headers
def set_headers(self, headers):
"""设置headers参数 \n
"""设置headers参数
:param headers: 参数值传入None可在ini文件标记删除
:return: 返回当前对象
"""
@ -135,7 +135,7 @@ class SessionOptions(object):
return self
def set_a_header(self, attr, value):
"""设置headers中一个项 \n
"""设置headers中一个项
:param attr: 设置名称
:param value: 设置值
:return: 返回当前对象
@ -147,7 +147,7 @@ class SessionOptions(object):
return self
def remove_a_header(self, attr):
"""从headers中删除一个设置 \n
"""从headers中删除一个设置
:param attr: 要删除的设置
:return: 返回当前对象
"""
@ -168,7 +168,7 @@ class SessionOptions(object):
return self._cookies
def set_cookies(self, cookies):
"""设置cookies信息 \n
"""设置cookies信息
:param cookies: cookies可为CookieJar, list, tuple, str, dict传入None可在ini文件标记删除
:return: 返回当前对象
"""
@ -182,7 +182,7 @@ class SessionOptions(object):
return self._auth
def set_auth(self, auth):
"""设置认证元组或对象 \n
"""设置认证元组或对象
:param auth: 认证元组或对象
:return: 返回当前对象
"""
@ -197,7 +197,7 @@ class SessionOptions(object):
return self._hooks
def set_hooks(self, hooks):
"""设置回调方法 \n
"""设置回调方法
:param hooks:
:return: 返回当前对象
"""
@ -212,7 +212,7 @@ class SessionOptions(object):
return self._params
def set_params(self, params):
"""设置查询参数字典 \n
"""设置查询参数字典
:param params: 查询参数字典
:return: 返回当前对象
"""
@ -225,7 +225,7 @@ class SessionOptions(object):
return self._verify
def set_verify(self, on_off):
"""设置是否验证SSL证书 \n
"""设置是否验证SSL证书
:param on_off: 是否验证 SSL 证书
:return: 返回当前对象
"""
@ -238,7 +238,7 @@ class SessionOptions(object):
return self._cert
def set_cert(self, cert):
"""SSL客户端证书文件的路径(.pem格式),或(cert, key)元组 \n
"""SSL客户端证书文件的路径(.pem格式),或(cert, key)元组
:param cert: 证书路径或元组
:return: 返回当前对象
"""
@ -253,7 +253,7 @@ class SessionOptions(object):
return self._adapters
def add_adapter(self, url, adapter):
"""添加适配器 \n
"""添加适配器
:param url: 适配器对应url
:param adapter: 适配器对象
:return: 返回当前对象
@ -267,7 +267,7 @@ class SessionOptions(object):
return self._stream
def set_stream(self, on_off):
"""设置是否使用流式响应内容 \n
"""设置是否使用流式响应内容
:param on_off: 是否使用流式响应内容
:return: 返回当前对象
"""
@ -280,7 +280,7 @@ class SessionOptions(object):
return self._trust_env
def set_trust_env(self, on_off):
"""设置是否信任环境 \n
"""设置是否信任环境
:param on_off: 是否信任环境
:return: 返回当前对象
"""
@ -293,7 +293,7 @@ class SessionOptions(object):
return self._max_redirects
def set_max_redirects(self, times):
"""设置最大重定向次数 \n
"""设置最大重定向次数
:param times: 最大重定向次数
:return: 返回当前对象
"""
@ -315,7 +315,7 @@ class SessionOptions(object):
self._del_set.remove(arg)
def save(self, path=None):
"""保存设置到文件 \n
"""保存设置到文件
:param path: ini文件的路径传入 'default' 保存到默认ini文件
:return: 保存文件的绝对路径
"""
@ -373,7 +373,7 @@ class SessionOptions(object):
def session_options_to_dict(options):
"""把session配置对象转换为字典 \n
"""把session配置对象转换为字典
:param options: session配置对象或字典
:return: 配置字典
"""

View File

@ -25,7 +25,7 @@ class Drission(object):
"""Drission类用于管理WebDriver对象和Session对象是驱动器的角色"""
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对象或DriverOptionsOptions类传入False则创建空配置对象
:param session_or_options: Session对象或设置字典传入False则创建空配置对象
:param ini_path: ini文件路径
@ -93,7 +93,7 @@ class Drission(object):
@property
def driver(self):
"""返回WebDriver对象如未初始化则按配置信息创建。 \n
"""返回WebDriver对象如未初始化则按配置信息创建。
如设置了本地调试浏览器可自动接入或打开浏览器进程
"""
if self._driver is None:
@ -130,7 +130,7 @@ class Drission(object):
@session_options.setter
def session_options(self, options):
"""设置session配置 \n
"""设置session配置
:param options: session配置字典
:return: None
"""
@ -144,7 +144,7 @@ class Drission(object):
@proxy.setter
def proxy(self, proxies=None):
"""设置代理信息 \n
"""设置代理信息
:param proxies: 代理信息字典
:return: None
"""
@ -226,7 +226,7 @@ class Drission(object):
ShowWindow(hd, sw)
def set_cookies(self, cookies, set_session=False, set_driver=False):
"""设置cookies \n
"""设置cookies
:param cookies: cookies信息可为CookieJar, list, tuple, str, dict
:param set_session: 是否设置session的cookies
:param set_driver: 是否设置driver的cookies
@ -283,7 +283,7 @@ class Drission(object):
self.driver.add_cookie(cookie)
def _set_session(self, data):
"""根据传入字典对session进行设置 \n
"""根据传入字典对session进行设置
:param data: session配置字典
:return: None
"""
@ -302,7 +302,7 @@ class Drission(object):
self._session.__setattr__(i, data[i])
def cookies_to_session(self, copy_user_agent=False):
"""把driver对象的cookies复制到session对象 \n
"""把driver对象的cookies复制到session对象
:param copy_user_agent: 是否复制ua信息
:return: None
"""
@ -312,7 +312,7 @@ class Drission(object):
self.set_cookies(self.driver.get_cookies(), set_session=True)
def cookies_to_driver(self, url):
"""把session对象的cookies复制到driver对象 \n
"""把session对象的cookies复制到driver对象
:param url: 作用域
:return: None
"""
@ -362,7 +362,7 @@ class Drission(object):
def user_agent_to_session(driver, session):
"""把driver的user-agent复制到session \n
"""把driver的user-agent复制到session
:param driver: 来源driver对象
:param session: 目标session对象
:return: None
@ -374,7 +374,7 @@ def user_agent_to_session(driver, session):
def create_driver(chrome_path, driver_path, options):
"""创建 WebDriver 对象 \n
"""创建 WebDriver 对象
:param chrome_path: chrome.exe 路径
:param driver_path: chromedriver.exe 路径
:param options: Options 对象
@ -431,7 +431,7 @@ def get_chrome_hwnds_from_pid(pid):
def kill_progress(pid=None, port=None):
"""关闭浏览器进程 \n
"""关闭浏览器进程
:param pid: 进程id
:param port: 端口号如没有进程id从端口号获取
:return: 是否成功

View File

@ -25,7 +25,7 @@ class DriverElement(DrissionElement):
"""driver模式的元素对象包装了一个WebElement对象并封装了常用功能"""
def __init__(self, ele, page=None):
"""初始化对象 \n
"""初始化对象
:param ele: 被包装的WebElement元素
:param page: 元素所在页面
"""
@ -39,8 +39,8 @@ class DriverElement(DrissionElement):
return f'<DriverElement {self.tag} {" ".join(attrs)}>'
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 timeout: 超时时间
:return: DriverElement对象或属性文本
@ -97,7 +97,7 @@ class DriverElement(DrissionElement):
return self.inner_ele.get_attribute('innerText')
def attr(self, attr):
"""获取attribute属性值 \n
"""获取attribute属性值
:param attr: 属性名
:return: 属性值文本
"""
@ -113,7 +113,7 @@ class DriverElement(DrissionElement):
return format_html(self.inner_ele.get_attribute(attr))
def ele(self, loc_or_str, timeout=None):
"""返回当前元素下级符合条件的第一个元素、属性或节点文本 \n
"""返回当前元素下级符合条件的第一个元素、属性或节点文本
:param loc_or_str: 元素的定位信息可以是loc元组或查询字符串
:param timeout: 查找元素超时时间默认与元素所在页面等待时间一致
:return: DriverElement对象或属性文本
@ -121,7 +121,7 @@ class DriverElement(DrissionElement):
return self._ele(loc_or_str, timeout)
def eles(self, loc_or_str, timeout=None):
"""返回当前元素下级所有符合条件的子元素、属性或节点文本 \n
"""返回当前元素下级所有符合条件的子元素、属性或节点文本
:param loc_or_str: 元素的定位信息可以是loc元组或查询字符串
:param timeout: 查找元素超时时间默认与元素所在页面等待时间一致
:return: DriverElement对象或属性文本组成的列表
@ -129,21 +129,21 @@ class DriverElement(DrissionElement):
return self._ele(loc_or_str, timeout=timeout, single=False)
def s_ele(self, loc_or_str=None):
"""查找第一个符合条件的元素以SessionElement形式返回处理复杂页面时效率很高 \n
"""查找第一个符合条件的元素以SessionElement形式返回处理复杂页面时效率很高
:param loc_or_str: 元素的定位信息可以是loc元组或查询字符串
:return: SessionElement对象或属性文本
"""
return make_session_ele(self, loc_or_str)
def s_eles(self, loc_or_str):
"""查找所有符合条件的元素以SessionElement列表形式返回 \n
"""查找所有符合条件的元素以SessionElement列表形式返回
:param loc_or_str: 定位符
:return: SessionElement或属性文本组成的列表
"""
return make_session_ele(self, loc_or_str, single=False)
def _ele(self, loc_or_str, timeout=None, single=True, relative=False):
"""返回当前元素下级符合条件的子元素、属性或节点文本,默认返回第一个 \n
"""返回当前元素下级符合条件的子元素、属性或节点文本,默认返回第一个
:param loc_or_str: 元素的定位信息可以是loc元组或查询字符串
:param timeout: 查找元素超时时间
:param single: True则返回第一个False则返回全部
@ -247,14 +247,14 @@ class DriverElement(DrissionElement):
return self._scroll
def parent(self, level_or_loc=1):
"""返回上面某一级父元素,可指定层数或用查询语法定位 \n
"""返回上面某一级父元素,可指定层数或用查询语法定位
:param level_or_loc: 第几级父元素或定位符
:return: 上级元素对象
"""
return super().parent(level_or_loc)
def prev(self, index=1, filter_loc='', timeout=0):
"""返回前面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 \n
"""返回前面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个
:param index: 前面第几个查询结果元素
:param filter_loc: 用于筛选元素的查询语法
:param timeout: 查找元素的超时时间
@ -264,7 +264,7 @@ class DriverElement(DrissionElement):
return super().prev(index, filter_loc, timeout)
def next(self, index=1, filter_loc='', timeout=0):
"""返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 \n
"""返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个
:param index: 后面第几个查询结果元素
:param filter_loc: 用于筛选元素的查询语法
:param timeout: 查找元素的超时时间
@ -274,7 +274,7 @@ class DriverElement(DrissionElement):
return super().next(index, filter_loc, timeout)
def before(self, index=1, filter_loc='', timeout=None):
"""返回当前元素前面的一个元素可指定筛选条件和第几个。查找范围不限兄弟元而是整个DOM文档 \n
"""返回当前元素前面的一个元素可指定筛选条件和第几个。查找范围不限兄弟元而是整个DOM文档
:param index: 前面第几个查询结果元素
:param filter_loc: 用于筛选元素的查询语法
:param timeout: 查找元素的超时时间
@ -284,7 +284,7 @@ class DriverElement(DrissionElement):
return super().before(index, filter_loc, timeout)
def after(self, index=1, filter_loc='', timeout=None):
"""返回当前元素后面的一个元素可指定筛选条件和第几个。查找范围不限兄弟元而是整个DOM文档 \n
"""返回当前元素后面的一个元素可指定筛选条件和第几个。查找范围不限兄弟元而是整个DOM文档
:param index: 后面第几个查询结果元素
:param filter_loc: 用于筛选元素的查询语法
:param timeout: 查找元素的超时时间
@ -294,7 +294,7 @@ class DriverElement(DrissionElement):
return super().after(index, filter_loc, timeout)
def prevs(self, filter_loc='', timeout=0):
"""返回前面全部兄弟元素或节点组成的列表,可用查询语法筛选 \n
"""返回前面全部兄弟元素或节点组成的列表,可用查询语法筛选
:param filter_loc: 用于筛选元素的查询语法
:param timeout: 查找元素的超时时间
:return: 兄弟元素或节点文本组成的列表
@ -302,7 +302,7 @@ class DriverElement(DrissionElement):
return super().prevs(filter_loc, timeout)
def nexts(self, filter_loc='', timeout=0):
"""返回后面全部兄弟元素或节点组成的列表,可用查询语法筛选 \n
"""返回后面全部兄弟元素或节点组成的列表,可用查询语法筛选
:param filter_loc: 用于筛选元素的查询语法
:param timeout: 查找元素的超时时间
:return: 兄弟元素或节点文本组成的列表
@ -310,7 +310,7 @@ class DriverElement(DrissionElement):
return super().nexts(filter_loc, timeout)
def befores(self, filter_loc='', timeout=None):
"""返回当前元素后面符合条件的全部兄弟元素或节点组成的列表可用查询语法筛选。查找范围不限兄弟元而是整个DOM文档 \n
"""返回当前元素后面符合条件的全部兄弟元素或节点组成的列表可用查询语法筛选。查找范围不限兄弟元而是整个DOM文档
:param filter_loc: 用于筛选元素的查询语法
:param timeout: 查找元素的超时时间
:return: 本元素前面的元素或节点组成的列表
@ -318,7 +318,7 @@ class DriverElement(DrissionElement):
return super().befores(filter_loc, timeout)
def afters(self, filter_loc='', timeout=None):
"""返回当前元素前面符合条件的全部兄弟元素或节点组成的列表可用查询语法筛选。查找范围不限兄弟元而是整个DOM文档 \n
"""返回当前元素前面符合条件的全部兄弟元素或节点组成的列表可用查询语法筛选。查找范围不限兄弟元而是整个DOM文档
:param filter_loc: 用于筛选元素的查询语法
:param timeout: 查找元素的超时时间
:return: 本元素后面的元素或节点组成的列表
@ -326,7 +326,7 @@ class DriverElement(DrissionElement):
return super().afters(filter_loc, timeout)
def left(self, index=1, filter_loc=''):
"""获取网页上显示在当前元素左边的某个元素,可设置选取条件,可指定结果中第几个 \n
"""获取网页上显示在当前元素左边的某个元素,可设置选取条件,可指定结果中第几个
:param index: 获取第几个
:param filter_loc: 筛选条件可用selenium的(By, str)也可用本库定位语法
:return: DriverElement对象
@ -335,7 +335,7 @@ class DriverElement(DrissionElement):
return eles[index - 1] if index <= len(eles) else None
def right(self, index=1, filter_loc=''):
"""获取网页上显示在当前元素右边的某个元素,可设置选取条件,可指定结果中第几个 \n
"""获取网页上显示在当前元素右边的某个元素,可设置选取条件,可指定结果中第几个
:param index: 获取第几个
:param filter_loc: 筛选条件可用selenium的(By, str)也可用本库定位语法
:return: DriverElement对象
@ -344,7 +344,7 @@ class DriverElement(DrissionElement):
return eles[index - 1] if index <= len(eles) else None
def above(self, index=1, filter_loc=''):
"""获取网页上显示在当前元素上边的某个元素,可设置选取条件,可指定结果中第几个 \n
"""获取网页上显示在当前元素上边的某个元素,可设置选取条件,可指定结果中第几个
:param index: 获取第几个
:param filter_loc: 筛选条件可用selenium的(By, str)也可用本库定位语法
:return: DriverElement对象
@ -353,7 +353,7 @@ class DriverElement(DrissionElement):
return eles[index - 1] if index <= len(eles) else None
def below(self, index=1, filter_loc=''):
"""获取网页上显示在当前元素下边的某个元素,可设置选取条件,可指定结果中第几个 \n
"""获取网页上显示在当前元素下边的某个元素,可设置选取条件,可指定结果中第几个
:param index: 获取第几个
:param filter_loc: 筛选条件可用selenium的(By, str)也可用本库定位语法
:return: DriverElement对象
@ -362,7 +362,7 @@ class DriverElement(DrissionElement):
return eles[index - 1] if index <= len(eles) else None
def near(self, index=1, filter_loc=''):
"""获取网页上显示在当前元素最近的某个元素,可设置选取条件,可指定结果中第几个 \n
"""获取网页上显示在当前元素最近的某个元素,可设置选取条件,可指定结果中第几个
:param index: 获取第几个
:param filter_loc: 筛选条件可用selenium的(By, str)也可用本库定位语法
:return: DriverElement对象
@ -371,42 +371,42 @@ class DriverElement(DrissionElement):
return eles[index - 1] if index <= len(eles) else None
def lefts(self, filter_loc=''):
"""获取网页上显示在当前元素左边的所有元素,可设置选取条件,从近到远排列 \n
"""获取网页上显示在当前元素左边的所有元素,可设置选取条件,从近到远排列
:param filter_loc: 筛选条件可用selenium的(By, str)也可用本库定位语法
:return: DriverElement对象组成的列表
"""
return self._get_relative_eles('left', filter_loc)
def rights(self, filter_loc=''):
"""获取网页上显示在当前元素右边的所有元,可设置选取条件,从近到远排列 \n
"""获取网页上显示在当前元素右边的所有元,可设置选取条件,从近到远排列
:param filter_loc: 筛选条件可用selenium的(By, str)也可用本库定位语法
:return: DriverElement对象组成的列表
"""
return self._get_relative_eles('right', filter_loc)
def aboves(self, filter_loc=''):
"""获取网页上显示在当前元素上边的所有元素,可设置选取条件,从近到远排列 \n
"""获取网页上显示在当前元素上边的所有元素,可设置选取条件,从近到远排列
:param filter_loc: 筛选条件可用selenium的(By, str)也可用本库定位语法
:return: DriverElement对象组成的列表
"""
return self._get_relative_eles('left', filter_loc)
def belows(self, filter_loc=''):
"""获取网页上显示在当前元素下边的所有元素,可设置选取条件,从近到远排列 \n
"""获取网页上显示在当前元素下边的所有元素,可设置选取条件,从近到远排列
:param filter_loc: 筛选条件可用selenium的(By, str)也可用本库定位语法
:return: DriverElement对象组成的列表
"""
return self._get_relative_eles('left', filter_loc)
def nears(self, filter_loc=''):
"""获取网页上显示在当前元素附近元素,可设置选取条件,从近到远排列 \n
"""获取网页上显示在当前元素附近元素,可设置选取条件,从近到远排列
:param filter_loc: 筛选条件可用selenium的(By, str)也可用本库定位语法
:return: DriverElement对象组成的列表
"""
return self._get_relative_eles('near', filter_loc)
def wait_ele(self, loc_or_ele, timeout=None):
"""等待子元素从dom删除、显示、隐藏 \n
"""等待子元素从dom删除、显示、隐藏
:param loc_or_ele: 可以是元素查询字符串loc元组
:param timeout: 等待超时时间
:return: 等待是否成功
@ -414,7 +414,7 @@ class DriverElement(DrissionElement):
return ElementWaiter(self, loc_or_ele, timeout)
def style(self, style, pseudo_ele=''):
"""返回元素样式属性值,可获取伪元素属性值 \n
"""返回元素样式属性值,可获取伪元素属性值
:param style: 样式属性名称
:param pseudo_ele: 伪元素名称如有
:return: 样式属性的值
@ -426,8 +426,8 @@ class DriverElement(DrissionElement):
return None if r == 'none' else r
def click(self, by_js=None, timeout=None):
"""点击元素 \n
尝试点击直到超时若都失败就改用js点击 \n
"""点击元素
尝试点击直到超时若都失败就改用js点击
:param by_js: 是否用js点击为True时直接用js点击为False时重试失败也不会改用js
:param timeout: 尝试点击的超时时间不指定则使用父页面的超时时间
:return: 是否点击成功
@ -458,7 +458,7 @@ class DriverElement(DrissionElement):
return False
def click_at(self, x=None, y=None, by_js=False):
"""带偏移量点击本元素相对于左上角坐标。不传入x或y值时点击元素中点 \n
"""带偏移量点击本元素相对于左上角坐标。不传入x或y值时点击元素中点
:param x: 相对元素左上角坐标的x轴偏移量
:param y: 相对元素左上角坐标的y轴偏移量
:param by_js: 是否用js点击
@ -489,7 +489,7 @@ class DriverElement(DrissionElement):
ActionChains(self.page.driver).context_click(self.inner_ele).perform()
def r_click_at(self, x=None, y=None):
"""带偏移量右键单击本元素相对于左上角坐标。不传入x或y值时点击元素中点 \n
"""带偏移量右键单击本元素相对于左上角坐标。不传入x或y值时点击元素中点
:param x: 相对元素左上角坐标的x轴偏移量
:param y: 相对元素左上角坐标的y轴偏移量
: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()
def input(self, vals, clear=True, insure=True, timeout=None):
"""输入文本或组合键也可用于输入文件路径到input元素文件间用\n间隔) \n
"""输入文本或组合键也可用于输入文件路径到input元素文件间用\n间隔)
:param vals: 文本值或按键组合
:param clear: 输入前是否清空文本框
:param insure: 确保输入正确解决文本框有时输入失效的问题不能用于输入组合键
@ -546,7 +546,7 @@ class DriverElement(DrissionElement):
return True
def run_script(self, script, *args):
"""执行js代码代码中用arguments[0]表示自己 \n
"""执行js代码代码中用arguments[0]表示自己
:param script: js文本
:param args: 传入的参数
:return: js执行结果
@ -562,7 +562,7 @@ class DriverElement(DrissionElement):
pass
def clear(self, insure=True):
"""清空元素文本 \n
"""清空元素文本
:param insure: 是否确保清空
:return: 是否清空成功不能清空的元素返回None
"""
@ -597,7 +597,7 @@ class DriverElement(DrissionElement):
return False
def screenshot(self, path=None, filename=None, as_bytes=False):
"""对元素进行截图 \n
"""对元素进行截图
:param path: 保存路径
:param filename: 图片文件名不传入时以元素tag name命名
:param as_bytes: 是否已字节形式返回图片为True时上面两个参数失效
@ -627,14 +627,14 @@ class DriverElement(DrissionElement):
return img_path
def prop(self, prop):
"""获取property属性值 \n
"""获取property属性值
:param prop: 属性名
:return: 属性值文本
"""
return format_html(self.inner_ele.get_property(prop))
def set_prop(self, prop, value):
"""设置元素property属性 \n
"""设置元素property属性
:param prop: 属性名
:param value: 属性值
:return: 是否设置成功
@ -647,7 +647,7 @@ class DriverElement(DrissionElement):
return False
def set_attr(self, attr, value):
"""设置元素attribute属性 \n
"""设置元素attribute属性
:param attr: 属性名
:param value: 属性值
:return: 是否设置成功
@ -659,7 +659,7 @@ class DriverElement(DrissionElement):
return False
def remove_attr(self, attr):
"""删除元素attribute属性 \n
"""删除元素attribute属性
:param attr: 属性名
:return: 是否删除成功
"""
@ -670,7 +670,7 @@ class DriverElement(DrissionElement):
return False
def drag(self, x, y, speed=40, shake=True):
"""拖拽当前元素到相对位置 \n
"""拖拽当前元素到相对位置
:param x: x变化值
:param y: y变化值
:param speed: 拖动的速度传入0即瞬间到达
@ -682,7 +682,7 @@ class DriverElement(DrissionElement):
self.drag_to((x, y), speed, shake)
def drag_to(self, ele_or_loc, speed=40, shake=True):
"""拖拽当前元素,目标为另一个元素或坐标元组 \n
"""拖拽当前元素,目标为另一个元素或坐标元组
:param ele_or_loc: 另一个元素或坐标元组坐标为元素中点的坐标
:param speed: 拖动的速度传入0即瞬间到达
:param shake: 是否随机抖动
@ -722,7 +722,7 @@ class DriverElement(DrissionElement):
actions.release().perform()
def hover(self, x=None, y=None):
"""鼠标悬停可接受偏移量偏移量相对于元素左上角坐标。不传入x或y值时悬停在元素中点 \n
"""鼠标悬停可接受偏移量偏移量相对于元素左上角坐标。不传入x或y值时悬停在元素中点
:param x: 相对元素左上角坐标的x轴偏移量
:param y: 相对元素左上角坐标的y轴偏移量
:return: None
@ -733,7 +733,7 @@ class DriverElement(DrissionElement):
ActionChains(self.page.driver).move_to_element_with_offset(self.inner_ele, x, y).perform()
def _get_relative_eles(self, mode, loc=''):
"""获取网页上相对于当前元素周围的某个元素,可设置选取条件 \n
"""获取网页上相对于当前元素周围的某个元素,可设置选取条件
:param mode: 可选'left', 'right', 'above', 'below', 'near'
:param loc: 筛选条件可用selenium的(By, str)也可用本库定位语法
:return: DriverElement对象
@ -762,8 +762,8 @@ class DriverElement(DrissionElement):
def make_driver_ele(page_or_ele, loc, single=True, timeout=None):
"""执行driver模式元素的查找 \n
页面查找元素及元素查找下级元素皆使用此方法 \n
"""执行driver模式元素的查找
页面查找元素及元素查找下级元素皆使用此方法
:param page_or_ele: DriverPage对象或DriverElement对象
:param loc: 元素定位元组
:param single: True则返回第一个False则返回全部
@ -939,7 +939,7 @@ class Select(object):
self.select_ele = SeleniumSelect(ele.inner_ele)
def __call__(self, text_or_index, timeout=None):
"""选定下拉列表中子元素 \n
"""选定下拉列表中子元素
:param text_or_index: 根据文本值选或序号择选项若允许多选传入list或tuple可多选
:param timeout: 超时时间不输入默认实用页面超时时间
:return: None
@ -959,7 +959,7 @@ class Select(object):
@property
def selected_option(self):
"""返回第一个被选中的option元素 \n
"""返回第一个被选中的option元素
:return: DriverElement对象或None
"""
ele = self.inner_ele.run_script('return arguments[0].options[arguments[0].selectedIndex];')
@ -967,7 +967,7 @@ class Select(object):
@property
def selected_options(self):
"""返回所有被选中的option元素列表 \n
"""返回所有被选中的option元素列表
:return: DriverElement对象组成的列表
"""
return [x for x in self.options if x.is_selected()]
@ -977,7 +977,7 @@ class Select(object):
self.select_ele.deselect_all()
def select(self, text_or_index, timeout=None):
"""选定下拉列表中子元素 \n
"""选定下拉列表中子元素
:param text_or_index: 根据文本值选或序号择选项若允许多选传入list或tuple可多选
:param timeout: 超时时间不输入默认实用页面超时时间
:return: 是否选择成功
@ -987,7 +987,7 @@ class Select(object):
return self._select(text_or_index, i, False, timeout)
def select_by_value(self, value, timeout=None):
"""此方法用于根据value值选择项。当元素是多选列表时可以接收list或tuple \n
"""此方法用于根据value值选择项。当元素是多选列表时可以接收list或tuple
:param value: value属性值传入list或tuple可选择多项
:param timeout: 超时时间不输入默认实用页面超时时间
:return: None
@ -996,7 +996,7 @@ class Select(object):
return self._select(value, 'value', False, timeout)
def deselect(self, text_or_index, timeout=None):
"""取消选定下拉列表中子元素 \n
"""取消选定下拉列表中子元素
:param text_or_index: 根据文本或序号取消择选项若允许多选传入list或tuple可取消多项
:param timeout: 超时时间不输入默认实用页面超时时间
:return: None
@ -1006,7 +1006,7 @@ class Select(object):
return self._select(text_or_index, i, True, timeout)
def deselect_by_value(self, value, timeout=None):
"""此方法用于根据value值取消选择项。当元素是多选列表时可以接收list或tuple \n
"""此方法用于根据value值取消选择项。当元素是多选列表时可以接收list或tuple
:param value: value属性值传入list或tuple可取消多项
:param timeout: 超时时间不输入默认实用页面超时时间
:return: None
@ -1023,7 +1023,7 @@ class Select(object):
i.click(by_js=True)
def _select(self, text_value_index, para_type='text', deselect=False, timeout=None):
"""选定或取消选定下拉列表中子元素 \n
"""选定或取消选定下拉列表中子元素
:param text_value_index: 根据文本值选或序号择选项若允许多选传入list或tuple可多选
:param para_type: 参数类型可选 'text''value''index'
:param deselect: 是否取消选择
@ -1072,7 +1072,7 @@ class Select(object):
raise TypeError('只能传入str、int、list和tuple类型。')
def _select_multi(self, text_value_index=None, para_type='text', deselect=False) -> bool:
"""选定或取消选定下拉列表中多个子元素 \n
"""选定或取消选定下拉列表中多个子元素
:param text_value_index: 根据文本值选或序号择选多项
:param para_type: 参数类型可选 'text''value''index'
:param deselect: 是否取消选择
@ -1100,7 +1100,7 @@ class ElementWaiter(object):
"""等待元素在dom中某种状态如删除、显示、隐藏"""
def __init__(self, page_or_ele, loc_or_ele, timeout=None):
"""等待元素在dom中某种状态如删除、显示、隐藏 \n
"""等待元素在dom中某种状态如删除、显示、隐藏
:param page_or_ele: 页面或父元素
:param loc_or_ele: 要等待的元素可以是已有元素定位符
:param timeout: 超时时间默认读取页面超时时间
@ -1142,7 +1142,7 @@ class ElementWaiter(object):
return self._wait_ele('hidden')
def _wait_ele(self, mode):
"""执行等待 \n
"""执行等待
:param mode: 等待模式
:return: 是否等待成功
"""
@ -1215,7 +1215,7 @@ class Scroll(object):
self.driver.run_script(f'{self.t1}.scrollTo(0,{self.t2}.scrollTop);')
def to_location(self, x, y):
"""滚动到指定位置 \n
"""滚动到指定位置
:param x: 水平距离
:param y: 垂直距离
:return: None
@ -1223,7 +1223,7 @@ class Scroll(object):
self.driver.run_script(f'{self.t1}.scrollTo({x},{y});')
def up(self, pixel=300):
"""向上滚动若干像素,水平位置不变 \n
"""向上滚动若干像素,水平位置不变
:param pixel: 滚动的像素
:return: None
"""
@ -1231,14 +1231,14 @@ class Scroll(object):
self.driver.run_script(f'{self.t1}.scrollBy(0,{pixel});')
def down(self, pixel=300):
"""向下滚动若干像素,水平位置不变 \n
"""向下滚动若干像素,水平位置不变
:param pixel: 滚动的像素
:return: None
"""
self.driver.run_script(f'{self.t1}.scrollBy(0,{pixel});')
def left(self, pixel=300):
"""向左滚动若干像素,垂直位置不变 \n
"""向左滚动若干像素,垂直位置不变
:param pixel: 滚动的像素
:return: None
"""
@ -1246,7 +1246,7 @@ class Scroll(object):
self.driver.run_script(f'{self.t1}.scrollBy({pixel},0);')
def right(self, pixel=300):
"""向右滚动若干像素,垂直位置不变 \n
"""向右滚动若干像素,垂直位置不变
:param pixel: 滚动的像素
:return: None
"""

View File

@ -29,8 +29,8 @@ class DriverPage(BasePage):
self._scroll = 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 timeout: 超时时间
:return: DriverElement对象或属性文本
@ -58,7 +58,7 @@ class DriverPage(BasePage):
return loads(self('t:pre').text)
def get(self, url, show_errmsg=False, retry=None, interval=None):
"""访问url \n
"""访问url
:param url: 目标url
:param show_errmsg: 是否显示和抛出异常
:param retry: 重试次数
@ -70,7 +70,7 @@ class DriverPage(BasePage):
return self._url_available
def ele(self, loc_or_ele, timeout=None):
"""返回页面中符合条件的第一个元素 \n
"""返回页面中符合条件的第一个元素
:param loc_or_ele: 元素的定位信息可以是元素对象loc元组或查询字符串
:param timeout: 查找元素超时时间默认与页面等待时间一致
:return: DriverElement对象或属性文本
@ -78,7 +78,7 @@ class DriverPage(BasePage):
return self._ele(loc_or_ele, timeout)
def eles(self, loc_or_str, timeout=None):
"""返回页面中所有符合条件的元素 \n
"""返回页面中所有符合条件的元素
:param loc_or_str: 元素的定位信息可以是loc元组或查询字符串
:param timeout: 查找元素超时时间默认与页面等待时间一致
:return: DriverElement对象或属性文本组成的列表
@ -86,7 +86,7 @@ class DriverPage(BasePage):
return self._ele(loc_or_str, timeout, single=False)
def s_ele(self, loc_or_ele=None):
"""查找第一个符合条件的元素以SessionElement形式返回处理复杂页面时效率很高 \n
"""查找第一个符合条件的元素以SessionElement形式返回处理复杂页面时效率很高
:param loc_or_ele: 元素的定位信息可以是loc元组或查询字符串
:return: SessionElement对象或属性文本
"""
@ -96,14 +96,14 @@ class DriverPage(BasePage):
return make_session_ele(self, loc_or_ele)
def s_eles(self, loc_or_str):
"""查找所有符合条件的元素以SessionElement列表形式返回 \n
"""查找所有符合条件的元素以SessionElement列表形式返回
:param loc_or_str: 元素的定位信息可以是loc元组或查询字符串
:return: SessionElement对象组成的列表
"""
return make_session_ele(self, loc_or_str, single=False)
def _ele(self, loc_or_ele, timeout=None, single=True):
"""返回页面中符合条件的元素,默认返回第一个 \n
"""返回页面中符合条件的元素,默认返回第一个
:param loc_or_ele: 元素的定位信息可以是元素对象loc元组或查询字符串
:param timeout: 查找元素超时时间
:param single: True则返回第一个False则返回全部
@ -144,7 +144,7 @@ class DriverPage(BasePage):
self._wait_object = None
def _d_connect(self, to_url, times=0, interval=1, show_errmsg=False):
"""尝试连接,重试若干次 \n
"""尝试连接,重试若干次
:param to_url: 要访问的url
:param times: 重试次数
:param interval: 重试间隔
@ -234,21 +234,21 @@ class DriverPage(BasePage):
@property
def to_frame(self):
"""用于跳转到frame的对象调用其方法实现跳转 \n
示例 \n
page.to_frame.by_loc('tag:iframe') - 通过传入frame的查询字符串定位 \n
page.to_frame.by_loc((By.TAG_NAME, 'iframe')) - 通过传入定位符定位 \n
page.to_frame.by_id('iframe_id') - 通过frame的id属性定位 \n
page.to_frame('iframe_name') - 通过frame的name属性定位 \n
page.to_frame(iframe_element) - 通过传入元素对象定位 \n
page.to_frame(0) - 通过frame的序号定位 \n
page.to_frame.main() - 跳到最顶层 \n
"""用于跳转到frame的对象调用其方法实现跳转
示例
page.to_frame.by_loc('tag:iframe') - 通过传入frame的查询字符串定位
page.to_frame.by_loc((By.TAG_NAME, 'iframe')) - 通过传入定位符定位
page.to_frame.by_id('iframe_id') - 通过frame的id属性定位
page.to_frame('iframe_name') - 通过frame的name属性定位
page.to_frame(iframe_element) - 通过传入元素对象定位
page.to_frame(0) - 通过frame的序号定位
page.to_frame.main() - 跳到最顶层
page.to_frame.parent() - 跳到上一层
"""
return ToFrame(self)
def set_timeouts(self, implicit=None, pageLoad=None, script=None):
"""设置超时时间单位为秒selenium4以上版本有效 \n
"""设置超时时间单位为秒selenium4以上版本有效
:param implicit: 查找元素超时时间
:param pageLoad: 页面加载超时时间
:param script: 脚本运行超时时间
@ -264,7 +264,7 @@ class DriverPage(BasePage):
self.driver.set_script_timeout(script)
def wait_ele(self, loc_or_ele, timeout=None):
"""等待元素从dom删除、显示、隐藏 \n
"""等待元素从dom删除、显示、隐藏
:param loc_or_ele: 可以是元素查询字符串loc元组
:param timeout: 等待超时时间
:return: 用于等待的ElementWaiter对象
@ -272,13 +272,13 @@ class DriverPage(BasePage):
return ElementWaiter(self, loc_or_ele, timeout)
def check_page(self):
"""检查页面是否符合预期 \n
"""检查页面是否符合预期
由子类自行实现各页面的判定规则
"""
return None
def run_script(self, script, *args):
"""执行js代码 \n
"""执行js代码
:param script: js文本
:param args: 传入的参数
:return: js执行结果
@ -286,7 +286,7 @@ class DriverPage(BasePage):
return self.driver.execute_script(script, *args)
def run_async_script(self, script, *args):
"""以异步方式执行js代码 \n
"""以异步方式执行js代码
:param script: js文本
:param args: 传入的参数
:return: js执行结果
@ -302,7 +302,7 @@ class DriverPage(BasePage):
return self.driver.execute_cdp_cmd(cmd, cmd_args)
def create_tab(self, url=''):
"""新建并定位到一个标签页,该标签页在最后面 \n
"""新建并定位到一个标签页,该标签页在最后面
:param url: 新标签页跳转到的网址
:return: None
"""
@ -311,8 +311,8 @@ class DriverPage(BasePage):
self.get(url)
def close_tabs(self, num_or_handles=None):
"""关闭传入的标签页,默认关闭当前页。可传入多个 \n
注意当程序使用的是接管的浏览器获取到的 handle 顺序和视觉效果不一致不能按序号关闭 \n
"""关闭传入的标签页,默认关闭当前页。可传入多个
注意当程序使用的是接管的浏览器获取到的 handle 顺序和视觉效果不一致不能按序号关闭
:param num_or_handles:要关闭的标签页序号或handle可传入handle和序号组成的列表或元组为None时关闭当前页
:return: None
"""
@ -324,8 +324,8 @@ class DriverPage(BasePage):
self.to_tab(0)
def close_other_tabs(self, num_or_handles=None):
"""关闭传入的标签页以外标签页,默认保留当前页。可传入多个 \n
注意当程序使用的是接管的浏览器获取到的 handle 顺序和视觉效果不一致不能按序号关闭 \n
"""关闭传入的标签页以外标签页,默认保留当前页。可传入多个
注意当程序使用的是接管的浏览器获取到的 handle 顺序和视觉效果不一致不能按序号关闭
:param num_or_handles: 要保留的标签页序号或handle可传入handle和序号组成的列表或元组为None时保存当前页
:return: None
"""
@ -339,8 +339,8 @@ class DriverPage(BasePage):
self.to_tab(0)
def to_tab(self, num_or_handle=0):
"""跳转到标签页 \n
注意当程序使用的是接管的浏览器获取到的 handle 顺序和视觉效果不一致 \n
"""跳转到标签页
注意当程序使用的是接管的浏览器获取到的 handle 顺序和视觉效果不一致
:param num_or_handle: 标签页序号或handle字符串序号第一个为0最后为-1
:return: None
"""
@ -353,14 +353,14 @@ class DriverPage(BasePage):
self.driver.switch_to.window(tab)
def set_ua_to_tab(self, ua):
"""为当前tab设置user agent只在当前tab有效 \n
"""为当前tab设置user agent只在当前tab有效
:param ua: user agent字符串
:return: None
"""
self.driver.execute_cdp_cmd("Network.setUserAgentOverride", {"userAgent": ua})
def get_session_storage(self, item=None):
"""获取sessionStorage信息不设置item则获取全部 \n
"""获取sessionStorage信息不设置item则获取全部
:param item: 要获取的项不设置则返回全部
:return: sessionStorage一个或所有项内容
"""
@ -368,7 +368,7 @@ class DriverPage(BasePage):
return self.run_script(js)
def get_local_storage(self, item=None):
"""获取localStorage信息不设置item则获取全部 \n
"""获取localStorage信息不设置item则获取全部
:param item: 要获取的项目不设置则返回全部
:return: localStorage一个或所有项内容
"""
@ -376,7 +376,7 @@ class DriverPage(BasePage):
return self.run_script(js)
def set_session_storage(self, item, value):
"""设置或删除某项sessionStorage信息 \n
"""设置或删除某项sessionStorage信息
:param item: 要设置的项
:param value: 项的值设置为False时删除该项
:return: None
@ -385,7 +385,7 @@ class DriverPage(BasePage):
self.run_script(s)
def set_local_storage(self, item, value):
"""设置或删除某项localStorage信息 \n
"""设置或删除某项localStorage信息
:param item: 要设置的项
:param value: 项的值设置为False时删除该项
:return: None
@ -394,7 +394,7 @@ class DriverPage(BasePage):
self.run_script(s)
def clean_cache(self, session_storage=True, local_storage=True, cache=True, cookies=True):
"""清除缓存,可选要清除的项 \n
"""清除缓存,可选要清除的项
:param session_storage: 是否清除sessionStorage
:param local_storage: 是否清除localStorage
:param cache: 是否清除cache
@ -411,7 +411,7 @@ class DriverPage(BasePage):
self.run_cdp('Network.clearBrowserCookies')
def screenshot(self, path=None, filename=None, as_bytes=False):
"""截取页面可见范围截图 \n
"""截取页面可见范围截图
:param path: 保存路径
:param filename: 图片文件名不传入时以页面title命名
:param as_bytes: 是否已字节形式返回图片为True时上面两个参数失效
@ -430,7 +430,7 @@ class DriverPage(BasePage):
return img_path
def scroll_to_see(self, loc_or_ele):
"""滚动页面直到元素可见 \n
"""滚动页面直到元素可见
:param loc_or_ele: 元素的定位信息可以是loc元组或查询字符串详见ele函数注释
:return: None
"""
@ -454,7 +454,7 @@ class DriverPage(BasePage):
self.driver.forward()
def set_window_size(self, width=None, height=None):
"""设置浏览器窗口大小默认最大化任一参数为0最小化 \n
"""设置浏览器窗口大小默认最大化任一参数为0最小化
:param width: 浏览器窗口高
:param height: 浏览器窗口宽
:return: None
@ -474,14 +474,14 @@ class DriverPage(BasePage):
self.driver.set_window_size(new_x, new_y)
def chrome_downloading(self, download_path):
"""返回浏览器下载中的文件列表 \n
"""返回浏览器下载中的文件列表
:param download_path: 下载文件夹路径
:return: 文件列表
"""
return glob(f'{download_path}{sep}*.crdownload')
def process_alert(self, ok=True, send=None, timeout=None):
"""处理提示框 \n
"""处理提示框
:param ok: True表示确认False表示取消其它值不会按按钮但依然返回文本值
:param send: 处理prompt提示框时可输入文本
:param timeout: 等待提示框出现的超时时间
@ -523,7 +523,7 @@ class ToFrame(object):
self.page = page
def __call__(self, condition='main'):
"""跳转到(i)frame可传入id、name、序号、元素对象、定位符 \n
"""跳转到(i)frame可传入id、name、序号、元素对象、定位符
:param condition: (i)frame可传入idname序号元素对象定位符
:return: 当前页面对象
"""
@ -544,7 +544,7 @@ class ToFrame(object):
return self.page
def parent(self, level=1):
"""焦点跳转到上级框架,可指定上级层数 \n
"""焦点跳转到上级框架,可指定上级层数
:param level: 上面第几层框架
:return: 框架所在页面对象
"""
@ -555,7 +555,7 @@ class ToFrame(object):
return self.page
def by_id(self, id_):
"""焦点跳转到id为该值的(i)frame \n
"""焦点跳转到id为该值的(i)frame
:param id_: (i)frame的id属性值
:return: 框架所在页面对象
"""
@ -563,7 +563,7 @@ class ToFrame(object):
return self.page
def by_name(self, name):
"""焦点跳转到name为该值的(i)frame \n
"""焦点跳转到name为该值的(i)frame
:param name: (i)frame的name属性值
:return: 框架所在页面对象
"""
@ -571,7 +571,7 @@ class ToFrame(object):
return self.page
def by_index(self, index):
"""焦点跳转到页面中第几个(i)frame \n
"""焦点跳转到页面中第几个(i)frame
:param index: 页面中第几个(i)frame
:return: 框架所在页面对象
"""
@ -579,7 +579,7 @@ class ToFrame(object):
return self.page
def by_loc(self, loc):
"""焦点跳转到根据定位符获取到的(i)frame \n
"""焦点跳转到根据定位符获取到的(i)frame
:param loc: 定位符支持selenium原生和DriverPage定位符
:return: 框架所在页面对象
"""
@ -587,7 +587,7 @@ class ToFrame(object):
return self.page
def by_ele(self, ele):
"""焦点跳转到传入的(i)frame元素对象 \n
"""焦点跳转到传入的(i)frame元素对象
:param ele: (i)frame元素对象
:return: 框架所在页面对象
"""

View File

@ -18,7 +18,7 @@ class MixPage(SessionPage, DriverPage, BasePage):
"""
def __init__(self, mode='d', drission=None, timeout=None, driver_options=None, session_options=None):
"""初始化函数 \n
"""初始化函数
:param mode: 'd' 's'即driver模式和session模式
:param drission: Drission对象不传入时会自动创建有传入时driver_options和session_options参数无效
:param timeout: 超时时间d模式时为寻找元素时间s模式时为连接时间默认10秒
@ -46,8 +46,8 @@ class MixPage(SessionPage, DriverPage, BasePage):
self.timeout = timeout if timeout is not None else 10
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 timeout: 超时时间
:return: 子元素对象或属性文本
@ -91,7 +91,7 @@ class MixPage(SessionPage, DriverPage, BasePage):
return super(SessionPage, self).json
def get(self, url, show_errmsg=False, retry=None, interval=None, **kwargs):
"""跳转到一个url \n
"""跳转到一个url
:param url: 目标url
:param show_errmsg: 是否显示和抛出异常
:param retry: 重试次数
@ -105,7 +105,7 @@ class MixPage(SessionPage, DriverPage, BasePage):
return super().get(url, show_errmsg, retry, interval, **kwargs)
def ele(self, loc_or_ele, timeout=None):
"""返回第一个符合条件的元素、属性或节点文本 \n
"""返回第一个符合条件的元素、属性或节点文本
:param loc_or_ele: 元素的定位信息可以是元素对象loc元组或查询字符串
:param timeout: 查找元素超时时间默认与页面等待时间一致
:return: 元素对象或属性文本节点文本
@ -116,7 +116,7 @@ class MixPage(SessionPage, DriverPage, BasePage):
return super(SessionPage, self).ele(loc_or_ele, timeout=timeout)
def eles(self, loc_or_str, timeout=None):
"""返回页面中所有符合条件的元素、属性或节点文本 \n
"""返回页面中所有符合条件的元素、属性或节点文本
:param loc_or_str: 元素的定位信息可以是loc元组或查询字符串
:param timeout: 查找元素超时时间默认与页面等待时间一致
:return: 元素对象或属性文本组成的列表
@ -127,7 +127,7 @@ class MixPage(SessionPage, DriverPage, BasePage):
return super(SessionPage, self).eles(loc_or_str, timeout=timeout)
def s_ele(self, loc_or_ele=None):
"""查找第一个符合条件的元素以SessionElement形式返回d模式处理复杂页面时效率很高 \n
"""查找第一个符合条件的元素以SessionElement形式返回d模式处理复杂页面时效率很高
:param loc_or_ele: 元素的定位信息可以是loc元组或查询字符串
:return: SessionElement对象或属性文本
"""
@ -137,7 +137,7 @@ class MixPage(SessionPage, DriverPage, BasePage):
return super(SessionPage, self).s_ele(loc_or_ele)
def s_eles(self, loc_or_str):
"""查找所有符合条件的元素以SessionElement形式返回d模式处理复杂页面时效率很高 \n
"""查找所有符合条件的元素以SessionElement形式返回d模式处理复杂页面时效率很高
:param loc_or_str: 元素的定位信息可以是loc元组或查询字符串
:return: SessionElement对象或属性文本组成的列表
"""
@ -147,7 +147,7 @@ class MixPage(SessionPage, DriverPage, BasePage):
return super(SessionPage, self).s_eles(loc_or_str)
def _ele(self, loc_or_ele, timeout=None, single=True):
"""返回页面中符合条件的元素、属性或节点文本,默认返回第一个 \n
"""返回页面中符合条件的元素、属性或节点文本,默认返回第一个
:param loc_or_ele: 元素的定位信息可以是元素对象loc元组或查询字符串
:param timeout: 查找元素超时时间d模式专用
: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)
def get_cookies(self, as_dict=False, all_domains=False):
"""返回cookies \n
"""返回cookies
:param as_dict: 是否以字典方式返回
:param all_domains: 是否返回所有域的cookies
:return: cookies信息
@ -177,7 +177,7 @@ class MixPage(SessionPage, DriverPage, BasePage):
@property
def driver(self):
"""返回 driver 对象,如没有则创建 \n
"""返回 driver 对象,如没有则创建
每次访问时切换到 d 模式用于独有函数及外部调用
:return: WebDriver对象
"""
@ -206,10 +206,10 @@ class MixPage(SessionPage, DriverPage, BasePage):
return self._response.url if self._response else None
def change_mode(self, mode=None, go=True, copy_cookies=True):
"""切换模式,接收's''d',除此以外的字符串会切换为 d 模式 \n
切换时会把当前模式的cookies复制到目标模式 \n
切换后如果go是True调用相应的get函数使访问的页面同步 \n
注意s转d时若浏览器当前网址域名和s模式不一样必须会跳转 \n
"""切换模式,接收's''d',除此以外的字符串会切换为 d 模式
切换时会把当前模式的cookies复制到目标模式
切换后如果go是True调用相应的get函数使访问的页面同步
注意s转d时若浏览器当前网址域名和s模式不一样必须会跳转
:param mode: 模式字符串
:param go: 是否跳转到原模式的url
:param copy_cookies: 是否复制cookies到目标模式
@ -244,7 +244,7 @@ class MixPage(SessionPage, DriverPage, BasePage):
self.get(self._drission.driver.current_url)
def set_cookies(self, cookies, refresh=True):
"""设置cookies \n
"""设置cookies
:param cookies: cookies信息可为CookieJar, list, tuple, str, dict
:param refresh: 设置cookies后是否刷新页面
:return: None
@ -257,14 +257,14 @@ class MixPage(SessionPage, DriverPage, BasePage):
self.refresh()
def cookies_to_session(self, copy_user_agent=False):
"""从driver复制cookies到session \n
"""从driver复制cookies到session
:param copy_user_agent : 是否复制user agent信息
"""
self._drission.cookies_to_session(copy_user_agent)
def cookies_to_driver(self, url=None):
"""从session复制cookies到driver \n
chrome需要指定域才能接收cookies \n
"""从session复制cookies到driver
chrome需要指定域才能接收cookies
:param url: 目标域
:return: None
"""
@ -272,8 +272,8 @@ class MixPage(SessionPage, DriverPage, BasePage):
self._drission.cookies_to_driver(url)
def check_page(self, by_requests=False):
"""d模式时检查网页是否符合预期 \n
默认由response状态检查可重载实现针对性检查 \n
"""d模式时检查网页是否符合预期
默认由response状态检查可重载实现针对性检查
:param by_requests: 是否用内置response检查
:return: bool或NoneNone代表不知道结果
"""
@ -299,7 +299,7 @@ class MixPage(SessionPage, DriverPage, BasePage):
# ----------------重写SessionPage的函数-----------------------
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 data: post方式时提交的数据
:param show_errmsg: 是否显示和抛出异常
@ -319,7 +319,7 @@ class MixPage(SessionPage, DriverPage, BasePage):
return super().download
def chrome_downloading(self, path=None):
"""返回浏览器下载中的文件列表 \n
"""返回浏览器下载中的文件列表
:param path: 下载文件夹路径默认读取配置信息
:return: 正在下载的文件列表
"""

View File

@ -18,7 +18,7 @@ class SessionElement(DrissionElement):
"""session模式的元素对象包装了一个lxml的Element对象并封装了常用功能"""
def __init__(self, ele, page=None):
"""初始化对象 \n
"""初始化对象
:param ele: 被包装的HtmlElement元素
:param page: 元素所在页面对象如果是从 html 文本生成的元素则为 None
"""
@ -34,8 +34,8 @@ class SessionElement(DrissionElement):
return f'<SessionElement {self.tag} {" ".join(attrs)}>'
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 timeout: 不起实际作用用于和DriverElement对应便于无差别调用
:return: SessionElement对象或属性文本
@ -75,14 +75,14 @@ class SessionElement(DrissionElement):
return str(self._inner_ele.text_content())
def parent(self, level_or_loc=1):
"""返回上面某一级父元素,可指定层数或用查询语法定位 \n
"""返回上面某一级父元素,可指定层数或用查询语法定位
:param level_or_loc: 第几级父元素或定位符
:return: 上级元素对象
"""
return super().parent(level_or_loc)
def prev(self, filter_loc='', index=1, timeout=0):
"""返回前面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 \n
"""返回前面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个
:param filter_loc: 用于筛选元素的查询语法
:param index: 前面第几个查询结果元素
:param timeout: 查找元素的超时时间
@ -91,7 +91,7 @@ class SessionElement(DrissionElement):
return super().prev(index, filter_loc, timeout)
def next(self, filter_loc='', index=1, timeout=0):
"""返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 \n
"""返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个
:param filter_loc: 用于筛选元素的查询语法
:param index: 后面第几个查询结果元素
:param timeout: 查找元素的超时时间
@ -100,7 +100,7 @@ class SessionElement(DrissionElement):
return super().next(index, filter_loc, timeout)
def before(self, filter_loc='', index=1, timeout=None):
"""返回前面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 \n
"""返回前面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个
:param filter_loc: 用于筛选元素的查询语法
:param index: 前面第几个查询结果元素
:param timeout: 查找元素的超时时间
@ -109,7 +109,7 @@ class SessionElement(DrissionElement):
return super().before(index, filter_loc, timeout)
def after(self, filter_loc='', index=1, timeout=None):
"""返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 \n
"""返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个
:param filter_loc: 用于筛选元素的查询语法
:param index: 后面第几个查询结果元素
:param timeout: 查找元素的超时时间
@ -118,7 +118,7 @@ class SessionElement(DrissionElement):
return super().after(index, filter_loc, timeout)
def prevs(self, filter_loc='', timeout=0):
"""返回前面全部兄弟元素或节点组成的列表,可用查询语法筛选 \n
"""返回前面全部兄弟元素或节点组成的列表,可用查询语法筛选
:param filter_loc: 用于筛选元素的查询语法
:param timeout: 查找元素的超时时间
:return: 兄弟元素或节点文本组成的列表
@ -126,7 +126,7 @@ class SessionElement(DrissionElement):
return super().prevs(filter_loc, timeout)
def nexts(self, filter_loc='', timeout=0):
"""返回后面全部兄弟元素或节点组成的列表,可用查询语法筛选 \n
"""返回后面全部兄弟元素或节点组成的列表,可用查询语法筛选
:param filter_loc: 用于筛选元素的查询语法
:param timeout: 查找元素的超时时间
:return: 兄弟元素或节点文本组成的列表
@ -134,7 +134,7 @@ class SessionElement(DrissionElement):
return super().nexts(filter_loc, timeout)
def befores(self, filter_loc='', timeout=None):
"""返回后面全部兄弟元素或节点组成的列表,可用查询语法筛选 \n
"""返回后面全部兄弟元素或节点组成的列表,可用查询语法筛选
:param filter_loc: 用于筛选元素的查询语法
:param timeout: 查找元素的超时时间
:return: 本元素前面的元素或节点组成的列表
@ -142,7 +142,7 @@ class SessionElement(DrissionElement):
return super().befores(filter_loc, timeout)
def afters(self, filter_loc='', timeout=None):
"""返回前面全部兄弟元素或节点组成的列表,可用查询语法筛选 \n
"""返回前面全部兄弟元素或节点组成的列表,可用查询语法筛选
:param filter_loc: 用于筛选元素的查询语法
:param timeout: 查找元素的超时时间
:return: 本元素后面的元素或节点组成的列表
@ -150,7 +150,7 @@ class SessionElement(DrissionElement):
return super().afters(filter_loc, timeout)
def attr(self, attr):
"""返回attribute属性值 \n
"""返回attribute属性值
:param attr: 属性名
:return: 属性值文本没有该属性返回None
"""
@ -183,7 +183,7 @@ class SessionElement(DrissionElement):
return self.inner_ele.get(attr)
def ele(self, loc_or_str, timeout=None):
"""返回当前元素下级符合条件的第一个元素、属性或节点文本 \n
"""返回当前元素下级符合条件的第一个元素、属性或节点文本
:param loc_or_str: 元素的定位信息可以是loc元组或查询字符串
:param timeout: 不起实际作用用于和DriverElement对应便于无差别调用
:return: SessionElement对象或属性文本
@ -191,7 +191,7 @@ class SessionElement(DrissionElement):
return self._ele(loc_or_str)
def eles(self, loc_or_str, timeout=None):
"""返回当前元素下级所有符合条件的子元素、属性或节点文本 \n
"""返回当前元素下级所有符合条件的子元素、属性或节点文本
:param loc_or_str: 元素的定位信息可以是loc元组或查询字符串
:param timeout: 不起实际作用用于和DriverElement对应便于无差别调用
:return: SessionElement对象或属性文本组成的列表
@ -199,21 +199,21 @@ class SessionElement(DrissionElement):
return self._ele(loc_or_str, single=False)
def s_ele(self, loc_or_str=None):
"""返回当前元素下级符合条件的第一个元素、属性或节点文本 \n
"""返回当前元素下级符合条件的第一个元素、属性或节点文本
:param loc_or_str: 元素的定位信息可以是loc元组或查询字符串
:return: SessionElement对象或属性文本
"""
return self._ele(loc_or_str)
def s_eles(self, loc_or_str):
"""返回当前元素下级所有符合条件的子元素、属性或节点文本 \n
"""返回当前元素下级所有符合条件的子元素、属性或节点文本
:param loc_or_str: 元素的定位信息可以是loc元组或查询字符串
:return: SessionElement对象或属性文本组成的列表
"""
return self._ele(loc_or_str, single=False)
def _ele(self, loc_or_str, timeout=None, single=True, relative=False):
"""返回当前元素下级符合条件的子元素、属性或节点文本,默认返回第一个 \n
"""返回当前元素下级符合条件的子元素、属性或节点文本,默认返回第一个
:param loc_or_str: 元素的定位信息可以是loc元组或查询字符串
:param timeout: 不起实际作用用于和父类对应
:param single: True则返回第一个False则返回全部
@ -244,8 +244,8 @@ class SessionElement(DrissionElement):
def make_session_ele(html_or_ele, loc=None, single=True):
"""从接收到的对象或html文本中查找元素返回SessionElement对象 \n
如要直接从html生成SessionElement而不在下级查找loc输入None即可 \n
"""从接收到的对象或html文本中查找元素返回SessionElement对象
如要直接从html生成SessionElement而不在下级查找loc输入None即可
:param html_or_ele: html文本BaseParser对象
:param loc: 定位元组或字符串为None时不在下级查找返回根元素
:param single: True则返回第一个False则返回全部

View File

@ -48,7 +48,7 @@ class SessionPage(BasePage):
self._set_options()
def _set_session(self, opt):
"""根据传入字典对session进行设置 \n
"""根据传入字典对session进行设置
:param opt: session配置字典
:return: None
"""
@ -90,7 +90,7 @@ class SessionPage(BasePage):
self.session.cookies.set(cookie['name'], cookie['value'], **kwargs)
def set_headers(self, headers):
"""设置通用的headers设置的headers值回逐个覆盖原有的不会清理原来的 \n
"""设置通用的headers设置的headers值回逐个覆盖原有的不会清理原来的
:param headers: dict形式的headers
:return: None
"""
@ -99,8 +99,8 @@ class SessionPage(BasePage):
self.session.headers[i] = headers[i]
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 timeout: 不起实际作用用于和DriverElement对应便于无差别调用
:return: SessionElement对象或属性文本
@ -137,7 +137,7 @@ class SessionPage(BasePage):
return DownloadSetter(self)
def get(self, url, show_errmsg=False, retry=None, interval=None, timeout=None, **kwargs):
"""用get方式跳转到url \n
"""用get方式跳转到url
:param url: 目标url
:param show_errmsg: 是否显示和抛出异常
:param retry: 重试次数
@ -149,7 +149,7 @@ class SessionPage(BasePage):
return self._s_connect(url, 'get', None, show_errmsg, retry, interval, **kwargs)
def ele(self, loc_or_ele, timeout=None):
"""返回页面中符合条件的第一个元素、属性或节点文本 \n
"""返回页面中符合条件的第一个元素、属性或节点文本
:param loc_or_ele: 元素的定位信息可以是元素对象loc元组或查询字符串
:param timeout: 不起实际作用用于和DriverElement对应便于无差别调用
:return: SessionElement对象或属性文本
@ -157,7 +157,7 @@ class SessionPage(BasePage):
return self._ele(loc_or_ele)
def eles(self, loc_or_str, timeout=None):
"""返回页面中所有符合条件的元素、属性或节点文本 \n
"""返回页面中所有符合条件的元素、属性或节点文本
:param loc_or_str: 元素的定位信息可以是loc元组或查询字符串
:param timeout: 不起实际作用用于和DriverElement对应便于无差别调用
:return: SessionElement对象或属性文本组成的列表
@ -165,21 +165,21 @@ class SessionPage(BasePage):
return self._ele(loc_or_str, single=False)
def s_ele(self, loc_or_ele=None):
"""返回页面中符合条件的第一个元素、属性或节点文本 \n
"""返回页面中符合条件的第一个元素、属性或节点文本
:param loc_or_ele: 元素的定位信息可以是元素对象loc元组或查询字符串
:return: SessionElement对象或属性文本
"""
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):
"""返回页面中符合条件的所有元素、属性或节点文本 \n
"""返回页面中符合条件的所有元素、属性或节点文本
:param loc_or_str: 元素的定位信息可以是元素对象loc元组或查询字符串
:return: SessionElement对象或属性文本
"""
return self._ele(loc_or_str, single=False)
def _ele(self, loc_or_ele, timeout=None, single=True):
"""返回页面中符合条件的元素、属性或节点文本,默认返回第一个 \n
"""返回页面中符合条件的元素、属性或节点文本,默认返回第一个
:param loc_or_ele: 元素的定位信息可以是元素对象loc元组或查询字符串
:param timeout: 不起实际作用用于和父类对应
: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)
def get_cookies(self, as_dict=False, all_domains=False):
"""返回cookies \n
"""返回cookies
:param as_dict: 是否以字典方式返回
:param all_domains: 是否返回所有域的cookies
:return: cookies信息
@ -227,7 +227,7 @@ class SessionPage(BasePage):
return self._download_kit
def post(self, url, data=None, show_errmsg=False, retry=None, interval=None, **kwargs):
"""用post方式跳转到url \n
"""用post方式跳转到url
:param url: 目标url
:param data: 提交的数据
:param show_errmsg: 是否显示和抛出异常
@ -239,7 +239,7 @@ class SessionPage(BasePage):
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):
"""执行get或post连接 \n
"""执行get或post连接
:param url: 目标url
:param mode: 'get' 'post'
:param data: 提交的数据
@ -267,7 +267,7 @@ class SessionPage(BasePage):
return self._url_available
def _make_response(self, url, mode='get', data=None, retry=None, interval=None, show_errmsg=False, **kwargs):
"""生成Response对象 \n
"""生成Response对象
:param url: 目标url
:param mode: 'get' 'post'
:param data: post方式要提交的数据
@ -341,7 +341,7 @@ class DownloadSetter(object):
self._page = page
def save_path(self, path):
"""设置下载保存路径 \n
"""设置下载保存路径
:param path: 下载保存路径
:return: None
"""

View File

@ -30,8 +30,8 @@ class ShadowRootElement(BaseElement):
return f'<ShadowRootElement in {self.parent_ele} >'
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 timeout: 超时时间
:return: DriverElement对象或属性文本
@ -54,7 +54,7 @@ class ShadowRootElement(BaseElement):
return shadow_root.get_attribute('innerHTML')
def parent(self, level_or_loc=1):
"""返回上面某一级父元素,可指定层数或用查询语法定位 \n
"""返回上面某一级父元素,可指定层数或用查询语法定位
:param level_or_loc: 第几级父元素或定位符
:return: DriverElement对象
"""
@ -75,7 +75,7 @@ class ShadowRootElement(BaseElement):
return self.parent_ele.ele(loc, timeout=0)
def next(self, index=1, filter_loc=''):
"""返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 \n
"""返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个
:param index: 第几个查询结果元素
:param filter_loc: 用于筛选元素的查询语法
:return: DriverElement对象
@ -84,7 +84,7 @@ class ShadowRootElement(BaseElement):
return nodes[index - 1] if nodes else None
def before(self, index=1, filter_loc=''):
"""返回前面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 \n
"""返回前面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个
:param index: 前面第几个查询结果元素
:param filter_loc: 用于筛选元素的查询语法
:return: 本元素前面的某个元素或节点
@ -93,7 +93,7 @@ class ShadowRootElement(BaseElement):
return nodes[index - 1] if nodes else None
def after(self, index=1, filter_loc=''):
"""返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 \n
"""返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个
:param index: 后面第几个查询结果元素
:param filter_loc: 用于筛选元素的查询语法
:return: 本元素后面的某个元素或节点
@ -102,7 +102,7 @@ class ShadowRootElement(BaseElement):
return nodes[index - 1] if nodes else None
def nexts(self, filter_loc=''):
"""返回后面所有兄弟元素或节点组成的列表 \n
"""返回后面所有兄弟元素或节点组成的列表
:param filter_loc: 用于筛选元素的查询语法
:return: DriverElement对象组成的列表
"""
@ -115,7 +115,7 @@ class ShadowRootElement(BaseElement):
return self.parent_ele.eles(xpath, timeout=0.1)
def befores(self, filter_loc=''):
"""返回后面全部兄弟元素或节点组成的列表,可用查询语法筛选 \n
"""返回后面全部兄弟元素或节点组成的列表,可用查询语法筛选
:param filter_loc: 用于筛选元素的查询语法
:return: 本元素前面的元素或节点组成的列表
"""
@ -128,7 +128,7 @@ class ShadowRootElement(BaseElement):
return self.parent_ele.eles(xpath, timeout=0.1)
def afters(self, filter_loc=''):
"""返回前面全部兄弟元素或节点组成的列表,可用查询语法筛选 \n
"""返回前面全部兄弟元素或节点组成的列表,可用查询语法筛选
:param filter_loc: 用于筛选元素的查询语法
:return: 本元素后面的元素或节点组成的列表
"""
@ -138,7 +138,7 @@ class ShadowRootElement(BaseElement):
return eles1 + self.parent_ele.eles(xpath, timeout=0.1)
def ele(self, loc_or_str, timeout=None):
"""返回当前元素下级符合条件的第一个元素,默认返回 \n
"""返回当前元素下级符合条件的第一个元素,默认返回
:param loc_or_str: 元素的定位信息可以是loc元组或查询字符串
:param timeout: 查找元素超时时间默认与元素所在页面等待时间一致
:return: DriverElement对象或属性文本
@ -146,7 +146,7 @@ class ShadowRootElement(BaseElement):
return self._ele(loc_or_str, timeout)
def eles(self, loc_or_str, timeout=None):
"""返回当前元素下级所有符合条件的子元素 \n
"""返回当前元素下级所有符合条件的子元素
:param loc_or_str: 元素的定位信息可以是loc元组或查询字符串
:param timeout: 查找元素超时时间默认与元素所在页面等待时间一致
:return: DriverElement对象或属性文本组成的列表
@ -154,21 +154,21 @@ class ShadowRootElement(BaseElement):
return self._ele(loc_or_str, timeout=timeout, single=False)
def s_ele(self, loc_or_str=None) -> Union[SessionElement, str, None]:
"""查找第一个符合条件的元素以SessionElement形式返回处理复杂页面时效率很高 \n
"""查找第一个符合条件的元素以SessionElement形式返回处理复杂页面时效率很高
:param loc_or_str: 元素的定位信息可以是loc元组或查询字符串
:return: SessionElement对象或属性文本
"""
return make_session_ele(self, loc_or_str)
def s_eles(self, loc_or_str):
"""查找所有符合条件的元素以SessionElement列表形式返回处理复杂页面时效率很高 \n
"""查找所有符合条件的元素以SessionElement列表形式返回处理复杂页面时效率很高
:param loc_or_str: 元素的定位信息可以是loc元组或查询字符串
:return: SessionElement对象或属性文本
"""
return make_session_ele(self, loc_or_str, single=False)
def _ele(self, loc_or_str, timeout=None, single=True, relative=False):
"""返回当前元素下级符合条件的子元素,默认返回第一个 \n
"""返回当前元素下级符合条件的子元素,默认返回第一个
:param loc_or_str: 元素的定位信息可以是loc元组或查询字符串
:param timeout: 查找元素超时时间
: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]
def run_script(self, script, *args):
"""执行js代码传入自己为第一个参数 \n
"""执行js代码传入自己为第一个参数
:param script: js文本
:param args: 传入的参数
:return: js执行结果

View File

@ -24,7 +24,7 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
"""整合浏览器和request的页面类"""
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 tab_id: 要控制的标签页id不指定默认为激活的
:param timeout: 超时时间d模式时为寻找元素时间s模式时为连接时间默认10秒
@ -121,8 +121,8 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
pass
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 timeout: 超时时间
:return: 子元素对象
@ -219,7 +219,7 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
@timeout.setter
def timeout(self, second):
"""设置通用超时时间 \n
"""设置通用超时时间
:param second: 秒数
:return: None
"""
@ -238,7 +238,7 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
return self._download_set
def get(self, url, show_errmsg=False, retry=None, interval=None, timeout=None, **kwargs):
"""跳转到一个url \n
"""跳转到一个url
:param url: 目标url
:param show_errmsg: 是否显示和抛出异常
:param retry: 重试次数
@ -255,7 +255,7 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
return super().get(url, show_errmsg, retry, interval, timeout, **kwargs)
def ele(self, loc_or_ele, timeout=None):
"""返回第一个符合条件的元素、属性或节点文本 \n
"""返回第一个符合条件的元素、属性或节点文本
:param loc_or_ele: 元素的定位信息可以是元素对象loc元组或查询字符串
:param timeout: 查找元素超时时间默认与页面等待时间一致
:return: 元素对象或属性文本节点文本
@ -266,7 +266,7 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
return super(SessionPage, self).ele(loc_or_ele, timeout=timeout)
def eles(self, loc_or_str, timeout=None):
"""返回页面中所有符合条件的元素、属性或节点文本 \n
"""返回页面中所有符合条件的元素、属性或节点文本
:param loc_or_str: 元素的定位信息可以是loc元组或查询字符串
:param timeout: 查找元素超时时间默认与页面等待时间一致
:return: 元素对象或属性文本组成的列表
@ -277,7 +277,7 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
return super(SessionPage, self).eles(loc_or_str, timeout=timeout)
def s_ele(self, loc_or_ele=None):
"""查找第一个符合条件的元素以SessionElement形式返回d模式处理复杂页面时效率很高 \n
"""查找第一个符合条件的元素以SessionElement形式返回d模式处理复杂页面时效率很高
:param loc_or_ele: 元素的定位信息可以是loc元组或查询字符串
:return: SessionElement对象或属性文本
"""
@ -287,7 +287,7 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
return super(SessionPage, self).s_ele(loc_or_ele)
def s_eles(self, loc_or_str):
"""查找所有符合条件的元素以SessionElement形式返回d模式处理复杂页面时效率很高 \n
"""查找所有符合条件的元素以SessionElement形式返回d模式处理复杂页面时效率很高
:param loc_or_str: 元素的定位信息可以是loc元组或查询字符串
:return: SessionElement对象或属性文本组成的列表
"""
@ -297,9 +297,9 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
return super(SessionPage, self).s_eles(loc_or_str)
def change_mode(self, mode=None, go=True, copy_cookies=True):
"""切换模式,接收's''d',除此以外的字符串会切换为 d 模式 \n
如copy_cookies为True切换时会把当前模式的cookies复制到目标模式 \n
切换后如果go是True调用相应的get函数使访问的页面同步 \n
"""切换模式,接收's''d',除此以外的字符串会切换为 d 模式
如copy_cookies为True切换时会把当前模式的cookies复制到目标模式
切换后如果go是True调用相应的get函数使访问的页面同步
:param mode: 模式字符串
:param go: 是否跳转到原模式的url
:param copy_cookies: 是否复制cookies到目标模式
@ -339,7 +339,7 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
self.get(url)
def cookies_to_session(self, copy_user_agent=True):
"""把driver对象的cookies复制到session对象 \n
"""把driver对象的cookies复制到session对象
:param copy_user_agent: 是否复制ua信息
:return: None
"""
@ -363,7 +363,7 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
self.set_cookies(cookies, set_driver=True)
def get_cookies(self, as_dict=False, all_domains=False):
"""返回cookies \n
"""返回cookies
:param as_dict: 是否以字典方式返回
:param all_domains: 是否返回所有域的cookies
:return: cookies信息
@ -374,7 +374,7 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
return self._get_driver_cookies(as_dict)
def _get_driver_cookies(self, as_dict=False):
"""获取浏览器cookies \n
"""获取浏览器cookies
:param as_dict: 以dict形式返回
:return: cookies信息
"""
@ -385,7 +385,7 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
return cookies
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 set_session: 是否设置到Session对象
:param set_driver: 是否设置到浏览器
@ -409,7 +409,7 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
super().set_cookies(cookies)
def set_headers(self, headers: dict) -> None:
"""设置固定发送的headers \n
"""设置固定发送的headers
:param headers: dict格式的headers数据
:return: None
"""
@ -439,7 +439,7 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
# ----------------重写SessionPage的函数-----------------------
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 data: post方式时提交的数据
:param show_errmsg: 是否显示和抛出异常
@ -459,7 +459,7 @@ class WebPage(SessionPage, ChromiumPage, BasePage):
return super().download
def _ele(self, loc_or_ele, timeout=None, single=True, relative=False):
"""返回页面中符合条件的元素、属性或节点文本,默认返回第一个 \n
"""返回页面中符合条件的元素、属性或节点文本,默认返回第一个
:param loc_or_ele: 元素的定位信息可以是元素对象loc元组或查询字符串
:param timeout: 查找元素超时时间d模式专用
:param single: True则返回第一个False则返回全部