🚤 页面交互
本节介绍浏览器页面交互功能,元素的交互在下一节。
一个 Tab 对象(ChromiumTab
和MixTab
)控制一个浏览器的标签页,是页面控制的主要单位。
ChromiumPage
和WebPage
也控制一个标签页,只是它们增加了一些浏览器总体控制功能。
下面介绍的功能,除了关闭浏览器,Tab 对象都可使用。
✅️️ 页面跳转
📌 get()
该方法用于跳转到一个网址。当连接失败时,程序会进行重试。
参数名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
url | str | 必填 | 目标 url |
show_errmsg | bool | False | 连接出错时是否显示和抛出异常 |
retry | int | None | 重试次数,为None 时使用页面参数,默认 3 |
interval | float | None | 重试间隔(秒),为None 时使用页面参数,默认 2 |
timeout | float | None | 加载超时时间(秒) |
返回类型 | 说明 |
---|---|
bool | 是否连接成功 |
示例:
page.get('https://www.baidu.com')
📌 back()
此方法用于在浏览历史中后退若干步。
参数名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
steps | int | 1 | 后退步数 |
返回:None
示例:
page.back(2) # 后退两个网页
📌 forward()
此方法用于在浏览历史中前进若干步。
参数名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
steps | int | 1 | 前进步数 |
返回:None
page.forward(2) # 前进两步
📌 refresh()
此方法用于刷新当前页面。
参数名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
ignore_cache | bool | False | 刷新时是否忽略缓存 |
返回:None
示例:
page.refresh() # 刷新页面
📌 stop_loading()
此方法用于强制停止当前页面加载。
参数: 无
返回:None
📌 set.blocked_urls()
此方法用于设置忽略的连接。
参数名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
urls | str list tuple None | 必填 | 要忽略的 url,可传入多个,可用'*' 通配符,传入None 时清空已设置的项 |
返回:None
示例:
page.set.blocked_urls('*.css*') # 设置不加载css文件
✅️️ 元素管理
📌 add_ele()
此方法用于创建一个元素。可选择是否插入到 DOM。
html_or_info
传入元素完整 html 文本时,会插入到 DOM。如insert_to
参数为None
,插入到body
元素。
传入元素信息(格式:(tag, {name: value})
)时,如insert_to
参数为None
,不插入到 DOM。此时返回的元素需用 js 方式点击。
参数名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
html_or_info | str Tuple[str, dict] | 必填 | 新元素的 html 文本或信息;为tuple 可新建不加入到 DOM 的元素 |
insert_to | str ChromiumElement Tuple[str, str] | None | 插入到哪个元素中,可接收元素对象和定位符;如为None ,html_or_info 是str 时添加到 body,否则不添加到 DOM |
before | str ChromiumElement Tuple[str, str] | None | 在哪个子节点前面插入,可接收对象和定位符,为None 插入到父元素末尾 |
返回类型 | 说明 |
---|---|
ChromiumElement | 新建的元素对象 |
添加一个可见的元素:
from DrissionPage import ChromiumPage
page = ChromiumPage()
page.get('https://www.baidu.com')
html = '<a href="https://DrissionPage.cn" target="blank">DrissionPage </a> '
ele = page.add_ele(html, '#s-top-left', '新闻') # 插入到导航栏
ele.click()
添加一个不可见的元素:
from DrissionPage import ChromiumPage
page = ChromiumPage()
info = ('a', {'innerText': 'DrissionPage', 'href': 'https://DrissionPage.cn', 'target': 'blank'})
ele = page.add_ele(info)
ele.click('js') # 需用js点击
📌 remove_ele()
此方法用于从页面上删除一个元素。
参数名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
loc_or_ele | str Tuple[str, str] ChromiumElement | 必填 | 要删除的元素,可以是元素或定位符 |
返回:None
示例:
# 删除一个已获得的元素
ele = page('tag:a')
page.remove_ele(ele)
# 删除用定位符找到的元素
page.remove_ele('tag:a')
✅️️ 执行脚本或命令
📌 run_js()
此方法用于执行 js 脚本。
参数名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
script | str | 必填 | js 脚本文本或脚本文件路径 |
*args | - | 无 | 传入的参数,按顺序在js文本中对应arguments[0] 、arguments[1] ... |
as_expr | bool | False | 是否作为表达式运行,为True 时args 参数无效 |
timetout | float | None | js 超时时间,为None 则使用页面timeouts.script 设置 |
返回类型 | 说明 |
---|---|
Any | 脚本执行结果 |
示例:
# 用传入参数的方式执行 js 脚本显示弹出框显示 Hello world!
page.run_js('alert(arguments[0]+arguments[1]);', 'Hello', ' world!')
- 如果
as_expr
为True
,脚本应是返回一个结果的形式,并且不能有return
- 如果
as_expr
不为`True',脚本应尽量写成一个方法。
📌 run_js_loaded()
此方法用于运行 js 脚本,执行前等待页面加载完毕。
参数名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
script | str | 必填 | js 脚本文本 |
*args | - | 无 | 传入的参数,按顺序在js文本中对应arguments[0] 、arguments[1] ... |
as_expr | bool | False | 是否作为表达式运行,为True 时args 参数无效 |
timetout | float | None | js 超时时间,为None 则使用页面timeouts.script 设置 |
返回类型 | 说明 |
---|---|
Any | 脚本执行结果 |
📌 run_async_js()
此方法用于以异步方式执行 js 代码。
参数:
参数名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
script | str | 必填 | js 脚本文本 |
*args | - | 无 | 传入的参数,按顺序在js文本中对应arguments[0] 、arguments[1] ... |
as_expr | bool | False | 是否作为表达式运行,为True 时args 参数无效 |
返回:None
📌 run_cdp()
此方法用于执行 Chrome DevTools Protocol 语句。
cdp 用法详见 Chrome DevTools Protocol。
参数名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
cmd | str | 必填 | 协议项目 |
**cmd_args | - | 无 | 项目参数 |
返回类型 | 说明 |
---|---|
dict | 执行返回的结果 |
示例:
# 停止页面加载
page.run_cdp('Page.stopLoading')
📌 run_cdp_loaded()
此方法用于执行 Chrome DevTools Protocol 语句,执行前先确保页面加载完毕。
参数名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
cmd | str | 必填 | 协议项目 |
**cmd_args | - | 无 | 项目参数 |
返回类型 | 说明 |
---|---|
dict | 执行返回的结果 |
✅️️ cookies 及缓存
📌 set.cookies()
此方法用于设置 cookie。可设置一个或多个。
设置一个 cookie 支持的格 式:
Cookie
:单个Cookie
对象str
:'name=value; domain=****; ...'
或'name=****; value=****; domain=****; ...'
格式,只支持用';'
分隔dict
:{'name': '****', 'value': '****', 'domain': '****', ...}
或{name: value, 'domain': '****', ...}
格式
设置多个 cookie 支持的格式:
list
或tuple
:上面几种形式的单个 cookie 放到列表中传入即可dict
:{name1: value1, name2: value2, ..., 'domain': '****', ...}
格式str
:'name1=value1; name2=value2; ... domain=****; ...'
格式,多个 cookie 之间只能用';'
分隔CookieJar
:单个CookieJar
对象
参数名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
cookies | Cookie CookieJar list tuple str dict | 必填 | cookies 信息 |
返回:None
示例:
# 可以接受多种类型的参数
cookies1 = ['name1=value1', 'name2=value2']
cookies2 = 'name1=value1; name2=value2; path=/; domain=.example.com;'
cookies3 = {'name1': 'value1', 'name2': 'value2', 'domain': '.example.com'}
page.set.cookies(cookies1)
📌 set.cookies.clear()
此方法用于清除所有 cookie。
参数: 无
返回:None
📌 set.cookies.remove()
此方法用于删除一个 cookie。
参数名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
name | str | 必填 | cookie 的 name 字段 |
url | str | None | cookie 的 url 字段 |
domain | str | None | cookie 的 domain 字段 |
path | str | None | cookie 的 path 字段 |
返回:None
📌 set.session_storage()
此方法用于设置或删除某项 sessionStorage 信息。
参数名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
item | str | 必填 | 要设置的项 |
value | str False | 必填 | 为False 时,删除该项 |
返回:None
示例:
page.set.session_storage(item='abc', value='123')
📌 set.local_storage()
此方法用于设置或删除某项 localStorage 信息。
参数名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
item | str | 必填 | 要设置的项 |
value | str False | 必填 | 为False 时,删除该项 |
返回:None
📌 clear_cache()
此方法用于清除缓存,可选择要清除的项。
参数名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
session_storage | bool | True | 是否清除 sessionstorage |
local_storage | bool | True | 是否清除 localStorage |
cache | bool | True | 是否清除 cache |
cookies | bool | True | 是否清除 cookies |
返回:None
示例:
page.clear_cache(cookies=False) # 除了 cookies,其它都清除