3. _base目录
_base目录结构
3.1 base.py
base.py定义了四个类:
序号 | 名称 | 功能 |
3..1.1 | BaseParser(object) | 所有页面、元素类的基类 |
3.1.2 | BaseElement(BaseParser) | 各BaseElement |
3.1.3 | DrissionElement(BaseElement) | ChromiumElement 和 SessionElement的基类,但不是ShadowRoot的基类 |
3.1.4 | BasePage(BaseParser) | 页面类的基类 |
3.1.1 BaseParser类
属性和方法 | 功能 | 说明 |
本类定义的方法 | ||
| 返回第一个符合条件的元素、属性或节点文本 locator::元素的定位信息,可以是元素对象,loc元组,或查询字符串 index: 获取第几个,从1开始,可传入负数获取倒数第几个 timeout: 查找元素超时时间,默认与页面等待时间一致 return: 调用_ele()的结果,即元素对象或属性、文本节点文本 | 调用了本类的方法 _ele(locator, timeout, index=index, method='ele()') |
eles(locator,timeout=None) | 返回所有符合条件的元素、属性或节点文本 locator::元素的定位信息,可以是元素对象,loc元组,或查询字符串 timeout: 查找元素超时时间,默认与页面等待时间一致 return: 调用_ele()的结果,即元素对象或属性、文本节点文本 | 调用了本类的方法 _ele(locator, timeout, index=None) |
s_ele( locator=None) | 返回所有符合条件的元素,以SessionElement形式返回 pass,由子类重写 | |
s_eles(locator) | 返回所有符合条件的元素,以SessionElement形式返回 pass,由子类重写 | |
_ele(locator, timeout=None, index=1, raise_err=None, method=None) | 返回符合定位条件的元素 locator:定位符 timeout:查找元素等待的 Index:返回第index个元素,默认返回第1个元素,如无则返回所有元素 rase_err:如未找到元素时抛出的错误信息 method:查找元素的方法 pass,由子类重写 | |
_find_elements(locator, timeout=None ,index=1, relative=False, raise_err=None) | 返回符合条件的元素或元素列表 locator:定位符 timeout:查找元素等待的 Index:返回第index个元素,默认返回第1个元素,如无则返回所有元素 Relative:是否相对路径查找 rase_err:如未找到元素时抛出的错误信息 pass,由子类重写 | |
@property html() | passs,由子类重写 Return:’’ | |
本类定义的属性 | ||
3.1.2 BaseElement类
BaseElement(BaseParser)
属性和方法 | 功能 | 说明 |
本类定义的方法 | ||
__init__(self, owner=None) | 初始化三个属性 | |
parent(level_or_loc=1) | pass | |
next(index=1) | pass | |
nexts() | pass | |
_ele(locator, timeout=None ,index=1, relative=False, raise_err=None, method=None) | 调用获取元素的方法 locator: 定位符,键值对字符串’method:定位表达式’ timeout: 超时时间(秒) index: 获取第几个,从1开始,可传入负数获取倒数第几个 relative: 是否相对定位 raise_err: 找不到时是否抛出异常 method: 调用的方法名 return: 元素对象或它们组成的列表 | 返回调用BasePaser的_find_elements方法定位到的元素, 如无定位的元素,则返回字典 {“locator”:定位符, “method”:定位方法} |
@tag() | return:None | |
本类定义的属性 | ||
owner | 指定元素创建实例后的父级实例 | |
page | 返回父级实例的页面属性 | |
_type | 返回‘BaseElement’ |
3.1.2 DrissionElement类
DrissionElement(BaseElement)
属性和方法 | 功能 | 说明 |
本类定义的方法 | ||
@property link() | 返回href或src绝对url return self.attr('href') or self.attr('src') | |
@property css_path() | 返回css path路径 return self._get_ele_path(‘css’) | |
@property xpath() | 返回xpath路径 return self._get_ele_path(‘xpath’) | |
@property comments() | 返回元素注释文本组成的列表 return self.eled(‘xpath:.//comment()’) | |
text(text-node_only=True) | 返回元素内所有直接子节点的文本,包括元素和文本节点 text_node_only: 是否只返回文本节点 return: 文本列表 | |
parent(level_or_loc=1, index=1) | 返回上面某一级父元素,可指定层数或用查询语法定位 level_or_loc: 第几级父元素,1开始,或定位符 index: 当level_or_loc传入定位符,使用此参数选择第几个结果,1开始 return: 上级元素对象 | 返回_ele()方法结果 |
child(locator='', index=1, timeout=None, ele_only=True) | 返回直接子元素元素或节点组成的列表,可用查询语法筛选 locator: 用于筛选的查询语法 index: 第几个查询结果,1开始 timeout: 查找节点的超时时间(秒) ele_only: 是否只获取元素,为False时把文本、注释节点也纳入 return: 直接子元素或节点文本组成的列表 | 返回_ele()方法结果 |
prev(locator='', index=1, timeout=None, ele_only=True) | 返回前面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 locator: 用于筛选的查询语法 index: 前面第几个查询结果,1开始 timeout: 查找节点的超时时间(秒) ele_only: 是否只获取元素,为False时把文本、注释节点也纳入 return: 兄弟元素 | 返回_get_relative()结果 |
next(locator='', index=1, timeout=None, ele_only=True) | 返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 locator: 用于筛选的查询语法 index: 后面第几个查询结果,1开始 timeout: 查找节点的超时时间(秒) ele_only: 是否只获取元素,为False时把文本、注释节点也纳入 return: 兄弟元素 | 返回_get_relative()结果 |
before(locator='', index=1, timeout=None, ele_only=True) | 返回前面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 locator: 用于筛选的查询语法 index: 前面第几个查询结果,1开始 timeout: 查找节点的超时时间(秒) ele_only: 是否只获取元素,为False时把文本、注释节点也纳入 return: 本元素前面的某个元素或节点 | 返回_get_relative()结果 |
after(locator='', index=1, timeout=None, ele_only=True) | 返回后面的一个兄弟元素,可用查询语法筛选,可指定返回筛选结果的第几个 locator: 用于筛选的查询语法 index: 后面第几个查询结果,1开始 timeout: 查找节点的超时时间(秒) ele_only: 是否只获取元素,为False时把文本、注释节点也纳入 return: 本元素后面的某个元素或节点 | |
children( locator='', timeout=None, ele_only=True) | 返回直接子元素元素或节点组成的列表,可用查询语法筛选 locator: 用于筛选的查询语法 timeout: 查找节点的超时时间(秒) ele_only: 是否只获取元素,为False时把文本、注释节点也纳入 return: 直接子元素或节点文本组成的列表 | |
prevs( locator='', timeout=None, ele_only=True) | 返回前面全部兄弟元素或节点组成的列表,可用查询语法筛选 :param locator: 用于筛选的查询语法 :param timeout: 查找节点的超时时间(秒) :param ele_only: 是否只获取元素,为False时把文本、注释节点也纳入 :return: 兄弟元素或节点文本组成的列表 | |
nexts(locator='', timeout=None, ele_only=True) | 返回后面全部兄弟元素或节点组成的列表,可用查询语法筛选 :param locator: 用于筛选的查询语法 :param timeout: 查找节点的超时时间(秒) :param ele_only: 是否只获取元素,为False时把文本、注释节点也纳入 :return: 兄弟元素或节点文本组成的列表 | |
befores(locator='', timeout=None, ele_only=True) | 返回后面全部兄弟元素或节点组成的列表,可用查询语法筛选 :param locator: 用于筛选的查询语法 :param timeout: 查找节点的超时时间(秒) :param ele_only: 是否只获取元素,为False时把文本、注释节点也纳入 :return: 本元素前面的元素或节点组成的列表 | |
afters(locator='', timeout=None, ele_only=True) | 回前面全部兄弟元素或节点组成的列表,可用查询语法筛选 :param locator: 用于筛选的查询语法 :param timeout: 查找节点的超时时间(秒) :param ele_only: 是否只获取元素,为False时把文本、注释节点也纳入 :return: 本元素后面的元素或节点组成的列表 | |
_get_relative(func, direction, brother, locator='', index=1, timeout=None, ele_only=True) | 获取一个亲戚元素或节点,可用查询语法筛选,可指定返回筛选结果的第几个 func: 方法名称 direction: 方向,'following' 或 'preceding' locator: 用于筛选的查询语法 index: 前面第几个查询结果,1开始 timeout: 查找节点的超时时间(秒) ele_only: 是否只获取元素,为False时把文本、注释节点也纳入 :return: 本元素前面的某个元素或节点 | |
_get_relatives(index=None, locator='', direction='following', brother=True, timeout=.5, ele_only=True) | 按要求返回兄弟元素或节点组成的列表 index: 获取第几个,该参数不为None时只获取该编号的元素 locator: 用于筛选的查询语法 direction: 'following' 或 'preceding',查找的方向 brother: 查找范围,在同级查找还是整个dom前后查找 timeout: 查找等待时间(秒) return: 元素对象或字符串 | |
@property attrs() | return: None | |
@property text() | return: | |
@property raw_data() | return: | |
@abctractmethod attrs(name:str) | return:’’ | |
_get_ele_path(mode) | return:’’ | |
_find_elememts(locator, timeout=None, index=1, relative=False, raise_err=Nine) | pass |
3.1.3 BasePage类
BasePage类,继承BaseParser类,是页面类的基类,用于创建页面对象。
BasePage(BaseParser)
属性和方法 | 功能 | 说明 |
本类定义的方法 | ||
__init__(self) | 初始化属性 | |
@property title() | 返回网页的标题 | 带属性装饰器的title() |
@property timeout() | 返回查找元素等待的秒数 | 带属性装饰器的timeout() |
@setter timeout(second) | 设置查找元素等待的秒数 | 带设置装饰器的timeout(second) |
@property url_available() | 返回当前访问的url有效性 Return:self._url_available | 返回_url_vailable属性值 |
@property download_path() | 返回默认下载路径 return:self._download_path | 带属性装饰器的download_path() |
@property download() | 返回下载器对象 return:self._DownloadKit | 带属性装饰器的download() |
_before_connect(url, retry, interval) | 连接前的准备 url: 要访问的url retry: 重试次数 interval: 重试间隔 return: 重试次数、间隔、是否文件组成的tuple | |
@property url() | 返回当前网页的标题 return:None | 带属性装饰器的url() |
@property json() | 如response返回的是json格式,则返回字典 | 带属性装饰器的json() |
@property user_agent() | 带属性装饰器的usaer_ugent() | |
@abstractmethod cookies(as_dict=False, all_info=False) | 跳转url,同get() | |
_ele(locator, timeout=None, index=1, raise_err=None, method=None) | 调用获取元素的方法 locator: 定位符,键值对字符串’method:定位表达式’ timeout: 超时时间(秒) index: 获取第几个,从1开始,可传入负数获取倒数第几个 relative: 是否相对定位 raise_err: 找不到时是否抛出异常 method: 调用的方法名 return: 元素对象或它们组成的列表 | 返回调用BasePaser的_find_elements方法定位到的元素, 如无定位的元素,则返回字典 {“locator”:定位符, “method”:定位方法} |
@abstractmethod get(self, url, show_errmsg=False, retry=None, interval=None) | 跳转访问url pass | |
本类定义的属性 | ||
_url | 对象的url属性 | |
_timeout | 对象超时设置属性,默认为10s | |
_url_available | 对象的url是否有效,默认为None | |
retry_times | 对象连接url的最大次数,默认为3次 | |
retry_interval | 对象连接url的间隔时间,默认为2秒 | |
_DownloadKit | 对象下载器对象,默认为None | |
_download_path | 对象下载路径,默认为None | |
_none_ele_return_vale | 设置未找到元素时返回的值,默认为False | |
_none_ele_vale | 默认为None | |
_type | 默认为’BasePage’ |
DrissionElement类,继承了BaseElement类,是SessionElement和ChromiumElement的基类,但ShadowRoot的基类。
3.2 browser.py
browser.py文件定义的类和函数:
序号 | 名称 | 功能 |
1 | Browser(object) |
3.2.1 Browser类
属性和方法 | 功能 | 说明 |
本类定义的方法 | ||
__new__(cls, address, browser_id, page) | address: 浏览器地址 browser_id: 浏览器id page: ChromiumPage对象 | |
__init__(self, address, browser_id, page) | address: 浏览器地址 browser_id: 浏览器id page: ChromiumPage对象 | |
_get_driver(self, tab_id, owner=None) | 新建并返回指定tab id的Driver :param tab_id: 标签页id :param owner: 使用该驱动的对象 :return: Driver对象 | |
_onTargetCreated(self, **kwargs) | 标签页创建时执行 | |
_onTargetDestroyed(self, **kwargs) | 标签页关闭时执行 | |
connect_to_page(self) | 执行与page相关的逻辑 | |
run_cdp(self, cmd, **cmd_args) | 执行Chrome DevTools Protocol语句 :param cmd: 协议项目 :param cmd_args: 参数 :return: 执行的结果 | |
@property def driver(self) | ||
@property def tabs_count(self) | 回标签页数量 | |
@property def tab_ids(self) | 返回所有标签页id组成的列表 | |
@property def process_id(self) | 返回浏览器进程id | |
find_tabs(self, title=None, url=None, tab_type=None) | 找符合条件的tab,返回它们组成的列表,title和url是与关系 title: 要匹配title的文本 url: 要匹配url的文本 tab_type: tab类型,可用列表输入多个 return: dict格式的tab信息列表列表 | |
close_tab(self, tab_id) | 关闭标签页,tab_id: 标签页id,return: None | |
stop_driver(self, driver) | 停止一个Driver, driver: Driver对象,return: None | |
activate_tab(self, tab_id) | 使标签页变为活动状态,tab_id: 标签页id,return: None | |
get_window_bounds(self, tab_id=None) | 返回浏览器窗口位置和大小信息 tab_id: 标签页id return: 窗口大小字典 | |
new_tab(self, new_window=False, background=False, new_context=False) | 新建一个标签页 new_window: 是否在新窗口打开标签页 background: 是否不激活新标签页,如new_window为True则无效 new_context: 是否创建新的上下文 return: 新标签页id | |
reconnect(self) | 断开重连 | |
quit(self, timeout=5, force=False) | 关闭浏览器 timeout: 等待浏览器关闭超时时间(秒) force: 是否立刻强制终止进程 return: None | |
_on_disconnect(self) |
3.3 driver.py
driver.py文件定义的类和函数:
序号 | 名称 | 功能 |
3.3.1 | Driver(object) | |
3.3.2 | BrowserDriver(Driver) |
3.3.1 Driver类
属性和方法 | 功能 | 说明 |
本类定义的方法 | ||
__init__(self, tab_id, tab_type, address, owner=None) | tab_id: 标签页id tab_type: 标签页类型 address: 浏览器连接地址 owner: 创建这个驱动的对象 | |
run(_method, **kwargs) | 执行cdp方法 _method: cdp方法名 kwargs: cdp参数 return: 执行结果 | |
start() | 启动连接 | |
Stop() | 中断连接 | |
本类定义的属性 | ||
id | 标签页id | |
address | 浏览器连接地址address | |
type | 标签页类型tab_type | |
owner | 创建这个驱动的对象 |
3.3.2 BrowserDriver类
BrowserDriver(Driver)
属性和方法 | 功能 | 说明 |
本类定义的方法 | ||
__new__(self, tab_id, tab_type, address, owner=None) | tab_id: 标签页id tab_type: 标签页类型 address: 浏览器连接地址 owner: 创建这个驱动的对象 | |
__init__(self, tab_id, tab_type, address, owner=None) | tab_id: 标签页id tab_type: 标签页类型 address: 浏览器连接地址 owner: 创建这个驱动的对象 | |
get(url) | 跳转url,发送get请求,获得响应后关闭响应对象 |