DrissionPage模块(三)

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类

BaseParser(object)类

属性和方法

功能

说明

本类定义的方法


ele(locator,index=1,timeout=None)

返回第一个符合条件的元素、属性或节点文本

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类

Browser(object)

属性和方法

功能

说明

本类定义的方法

__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类

Driver(object)

属性和方法

功能

说明

本类定义的方法

__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请求,获得响应后关闭响应对象

  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

python编程爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值