DrissionPage模块(六)

6. _functions目录

_functions目录结构

_functions目录下共有8个文件。

6.1 browser.py文件

定义了10个函数,主要是打开浏览器。

6.1.1 函数

函数

功能

说明

connect_browser(option)

连接或启动浏览器

option: ChromiumOptions对象

return: 返回是否接管的浏览器

get_launch_args(opt)

从ChromiumOptions获取命令行启动参数

opt: ChromiumOptions

return: 启动参数列表

set_prefs(opt)

处理启动配置中的prefs项,目前只能对已存在文件夹配置

opt: ChromiumOptions

return: None

set_flags(opt)

处理启动配置中的flags项

opt: ChromiumOptions

return: None

test_connect(ip, port, timeout=30)

测试浏览器是否可用

    :param ip: 浏览器ip

    :param port: 浏览器端口

    :param timeout: 超时时间(秒)

    :return: None

get_chrome_path(ini_path)

从ini文件或系统变量中获取chrome可执行文件的路径

_run_browser(port, path: str, args)

创建浏览器进程

    :param port: 端口号

    :param path: 浏览器路径

    :param args: 启动参数

    :return: 进程对象

_make_leave_in_dict(target_dict: dict, src: list, num: int, end: int)

把prefs中a.b.c形式的属性转为a['b']['c']形式

    :param target_dict: 要处理的字典

    :param src: 属性层级列表[a, b, c]

    :param num: 当前处理第几个

    :param end: src长度

    :return: None

_set_value_to_dict(target_dict: dict, src: list, value)

把a.b.c形式的属性的值赋值到a['b']['c']形式的字典中

    :param target_dict: 要处理的字典

    :param src: 属性层级列表[a, b, c]

    :param value: 属性值

    :return: None

_remove_arg_from_dict(target_dict: dict, arg: str)

把a.b.c形式的属性从字典中删除

    :param target_dict: 要处理的字典

    :param arg: 层级属性,形式'a.b.c'

    :return: None

​​​​​​​6.2 by.py

主要是定义了查询元素的模式,配合locator使用。

By符号

By符号

BY.ID

id

By.CLASS_NAME

class name

By.XPATH

xpath

By.CSS_SELECTOR

css selector

By.LINK_TEXT

link text

By.NAME

name

By.PARTIAL_LINK_TEXT

partial link text

By.TAG_NAME

tag name

​​​​​​​6.3  key.py

Key.py定义的类和函数:

序号

名称

说明

1

Key

Key类

2

keyDefinitions

字典

3

modifierBit

字典

4

keys_to_typing(value)

把要输入的内容连成字符串,去掉其中 ctrl 等键。

返回的modifier表示是否有按下组合键

5

keyDescriptionForString(_modifiers, keyString)

6

send_key(page, modifier, key)

发送一个字,在键盘中的字符触发按键,其它直接发送文本

7

input_text_or_keys(page, text_or_keys)

输入文本,也可输入组合键,组合键用tuple形式输入

6.3.1 Key类

定义了Key类,对键盘上的特殊键作了定义,用于配合动作链。

属性

属性值

属性

属性值

CTRL_A

('\ue009', 'a')

CTRL_C

('\ue009', 'c')

CTRL_X

('\ue009', 'x')

CTRL_V

('\ue009', 'v')

CTRL_Z

('\ue009', 'z')

CTRL_Y

('\ue009', 'y')

NULL

'\ue000'

CANCEL

'\ue001'

HELP

'\ue002'

BACKSPACE

'\ue003'

BACK_SPACE

'\ue003'

TAB

'\ue004'

CLEAR

'\ue005'

RETURN

'\ue006'

ENTER

'\ue007'

SHIFT

'\ue008'

LEFT_SHIFT

'\ue008'

CONTROL

'\ue009'

CTRL

'\ue009'

LEFT_CONTROL

ALT

LEFT_ALT

PAUSE

ESCAPE

SPACE

PAGE_UP

PAGE_DOWN

END

HOME

LEFT

ARROW_LEFT

UP

ARROW_UP

RIGHT

ARROW_RIGHT

DOWN

ARROW_DOWN

INSERT

DEL

DELETE

SEMICOLON

EQUALS

NUMPAD0

NUMPAD1

NUMPAD2

NUMPAD3

NUMPAD4

NUMPAD5

NUMPAD6

NUMPAD7

NUMPAD8

NUMPAD9

MULTIPL

ADD

SUBTRACT

DECIMAL

DIVIDE

F1

F2

F3

F4

F5

F6

F7

F8

F9

F10

F11

F12

META

COMMAND

6.3.2 字典

6.3.2.1 字典keyDefinitions

keyDefinitions = {x:{'keyCode': y, 'key':x, 'code': z},}

x:键盘上的符号

y:ASCII码

z:字符串代码

6.3.2.2 字典modifierBit

modifierBit = {'\ue00a': 1, '\ue009': 2, '\ue03d': 4, '\ue008': 8}

6.3.3 函数

函数

功能

keys_to_typing(value)

把要输入的内容连成字符串,去掉其中 ctrl 等键。

返回的modifier表示是否有按下组合键

Value= v1, v2, ..., vn=*[ v1, v2, ..., vn]=*( v1, v2, ..., vn)

keyDescriptionForString(_modifiers, keyString)

send_key(page, modifier, key)

发送一个字,在键盘中的字符触发按键,其它直接发送文本

input_text_or_keys(page, text_or_keys)

输入文本,也可输入组合键,组合键用tuple形式输入

page: ChromiumBase对象

text_or_keys: 文本值或按键组合

return: self

​​​​​​​6.4  locator.py

功能是对定位符的解析。

函数

功能

说明

is_loc(text)

判断text是否是定位符

text.startswith()

get_loc(loc,

translate_css=False,

 css_mode=False)

接收本库定位语法或selenium定位元组,转换为标准定位元组,可翻译css selector为xpath

loc: 本库定位语法或selenium定位元组

translate_css: 是否翻译css selector为xpath,用于相对定位

css_mode: 是否尽量用css selector方式

return: DrissionPage定位元组

调用translate_XXXX()函数

调用str_to_XXX()函数

loc:(定位模式, 定位串)

str_to_xpath_loc(loc)

将loc转换成本库的xpath定位元组

loc: 查找语法字符串

return: 匹配符元组

str_to_css_loc(loc)

将loc转换成本库的css定位元组

loc: 查找语法字符串

return: 匹配符元组

_make_single_xpath_str(tag: str,

text: str)

生成单属性xpath语句

tag: 标签名

text: 待处理的字符串

return: xpath字符串

_make_multi_xpath_str(tag: str,

text: str)

生成多属性xpath语句

tag: 标签名

text: 待处理的字符串

return: xpath字符串

_make_search_str(search_str: str)

将"转义,不知何故不能直接用 \ 来转义

search_str: 查询字符串

return: 把"转义后的字符串

_make_single_css_str(tag: str,

text: str)

生成单属性css selector语句

tag: 标签名

text: 待处理的字符串

return: css selector字符串

_make_multi_css_str(tag: str,

text: str)

生成多属性css selector语句

tag: 标签名

text: 待处理的字符串

return: css selector字符串

tranlate_css_loc(loc)

把By类型的loc元组转换为css selector或xpath类型的

loc: By类型的loc元组

return: css selector或xpath类型的loc元组

css_trans(txt)

​​​​​​​6.5 settings.py

定义了Settings类

属性

说明

raise_when_ele_not_found

False

raise_when_click_failed

False

raise_when_wait_failed

False

single_tab_obj

True

cdp_timeout

30

auto_handle_alert

None

6.6 tools.py

tools.py定义的函数和类:

序号

名称

说明

1

port_is_using(ip,port)

检查端口是否被占用

2

clean_folder(folder_path, ignore=None)

3

show_or_hide_browser(page, hide=True)

4

get_browser_progress_id(progress, address)

5

get_hwnds_from_pid(pid, title)

6

wait_until(function, kwargs=None, timeout=10)

7

configs_to_here(save_name=None)

8

raise_error(result, ignore=None)

9

PortFinder(object)

6.6.1 函数

函数

功能

说明

port_is_using(ip,port)

检查端口是否被占用

ip: 浏览器地址

port: 浏览器端口

return: bool

从socket导入socket,AF_INET,SOCK_STREAM,利用套字节的功能测试端口是否已被占用

clean_folder(folder_path,

ignore=None)

清空一个文件夹,除了ignore里的文件和文件夹

    :param folder_path: 要清空的文件夹路径

    :param ignore: 忽略列表

    :return: None

利用pathlib中Path类的功能

和shutil中的rmtree函数

show_or_hide_browser(page, hide=True)

执行显示或隐藏浏览器窗口

    :param page: ChromePage对象

    :param hide: 是否隐藏

    :return: None

从库platform导入system

从win32gui导入ShowWindow

从win32con导入SW_HIDE,SW_SHOW

get_browser_progress_id(progress,

address)

获取浏览器进程id

    :param progress: 已知的进程对象,没有时传入None

    :param address: 浏览器管理地址,含端口

    :return: 进程id或None

from os import popen

 popen(f'netstat

 -nao | findstr :{port}').read().split('\n')

get_hwnds_from_pid(pid, title)

通过PID查询句柄ID

    :param pid: 进程id

    :param title: 窗口标题

    :return: 进程句柄组成的列表

wait_until(function,

kwargs=None,

timeout=10)

待传入的方法返回值不为假

    :param function: 要执行的方法

    :param kwargs: 方法参数

    :param timeout: 超时时间(秒)

    :return: 执行结果,超时抛出TimeoutError

from trime import perf_counter,sleep

configs_to_here(save_name=None)

把默认ini文件复制到当前目录

    :param save_name: 指定文件名,为None则命名为'dp_configs.ini'

    :return: None

raise_error(result, ignore=None)

抛出error对应报错

    :param result: 包含error的dict

    :param ignore: 要忽略的错误

    :return: None

6.6.2 PortFinder

PortFinder(object)类

属性

功能

说明

used_port

字典

lock

Lock对象

方法

__init__(self, path=None)

get_port(scope=None)

​​​​​​​6.7 web.py

web.py定义了html文本的处理函数。

6.7.1 函数

函数

功能

说明

get_ele_txt(e)

返回元素的文本

e:元素

return: bool

format_html(text)

处理html编码字符

    :param text: html文本

    :return: 格式化后的html文本

location_in_viewport(page, loc_x, loc_y)

判断给定的坐标是否在视口中          |n

    :param page: ChromePage对象

    :param loc_x: 页面绝对坐标x

    :param loc_y: 页面绝对坐标y

    :return: bool

offset_scroll(ele, offset_x, offset_y)

接收元素及偏移坐标,把坐标滚动到页面中间,返回该点在视口中的坐标

    有偏移量时以元素左上角坐标为基准,没有时以click_point为基准

    :param ele: 元素对象

    :param offset_x: 偏移量x

    :param offset_y: 偏移量y

    :return: 视口中的坐标

make_absolute_link(link,

baseURI=None)

获取绝对url

    :param link: 超链接

    :param baseURI: 页面或iframe的url

    :return: 绝对链接

is_js_func(func)

检查文本是否js函数

cookie_to_dict(cookie)

把Cookie对象转为dict格式

    :param cookie: Cookie对象、字符串或字典

    :return: cookie字典

cookies_to_tuple(cookies)

把cookies转为tuple格式

    :param cookies: cookies信息,可为CookieJar, list, tuple, str, dict

    :return: 返回tuple形式的cookies

set_session_cookies(session, cookies)

设置Session对象的cookies

    :param session: Session对象

    :param cookies: cookies信息

    :return: None

set_browser_cookies(page, cookies)

设置cookies值

    :param page: 页面对象

    :param cookies: cookies信息

    :return: None

is_cookie_in_driver(page, cookie)

查询cookie是否在浏览器内

    :param page: BasePage对象

    :param cookie: dict格式cookie

    :return: bool

get_blob(page, url, as_bytes=True)

获取知道blob资源

    :param page: 资源所在页面对象

    :param url: 资源url

    :param as_bytes: 是否以字节形式返回

    :return: 资源内容

save_page(tab,

path=None,

name=None,

as_pdf=False,

kwargs=None)

把当前页面保存为文件,如果path和name参数都为None,只返回文本

tab: Tab或Page对象

path: 保存路径,为None且name不为None时保存在当前路径

name: 文件名,为None且path不为None时用title属性值

as_pdf: 为Ture保存为pdf,否则为mhtml且忽略kwargs参数

kwargs: pdf生成参数

:return: as_pdf为True时返回bytes,否则返回文件文本

get_mhtml(page,

path=None,

name=None)

把当前页面保存为mhtml文件,如果path和name参数都为None,只返回mhtml文本

page: 要保存的页面对象

path: 保存路径,为None且name不为None时保存在当前路径

name: 文件名,为None且path不为None时用title属性值

return: mhtml文本

get_pdf(page,

path=None,

name=None,

kwargs=None)

把当前页面保存为pdf文件,如果path和name参数都为None,只返回字节

page: 要保存的页面对象

path: 保存路径,为None且name不为None时保存在当前路径

name: 文件名,为None且path不为None时用title属性值

kwargs: pdf生成参数

return: pdf文本

tree(ele_or_page)

把页面或元素对象DOM结构打印出来

    :param ele_or_page: 页面或元素对象

    :return: None

format_headers(txt)

从浏览器复制的文本生成dict格式headers,文本用换行分隔

    :param txt: 从浏览器复制的原始文本格式headers

    :return: dict格式headers

_dict_cookies_to_tuple(cookies: dict)

把dict形式的cookies转换为tuple形式

    :param cookies: 单个或多个cookies,单个时包含'name'和'value'

    :return: 多个dict格式cookies组成的列表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

python编程爱好者

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

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

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

打赏作者

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

抵扣说明:

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

余额充值