10 KiB
本节介绍页面对象可以使用的方法,有些方法是两种模式共有的,有些只有某种模式可以使用。当调用独有方法时,会自动切换到该模式。如调用post()
方法时,会先切换到 s 模式,并同步登录信息。
两种模式共有的方法
get()
此方法用于跳转到一个 url,详细用法见“使用方法 -> 访问网页”章节。
ele()、eles()、s_ele()、s_eles()
这些方法用于在页面中查找元素,详细用法见“使用方法 -> 获取页面元素”章节。
change_mode()
此方法用于转换 MixPage 模式。
切换后默认在目标模式重新跳转到原模式所在 url。
注意: s 模式转 d 模式时,若浏览器当前网址域名和 s 模式不一样,必定会跳转。
参数:
- mode:目标模式字符串,'s' 或 'd',默认转换到另一种
- go:转换后是否跳转到原模式所在 url
返回:None
from DrissionPage import MixPage
from time import sleep
# 创建页面对象,默认 d 模式
page = MixPage()
# 访问个人中心页面(未登录,重定向到登录页面)
page.get('https://gitee.com/profile')
# 打印当前模式和登录前的 title
print('当前模式:', page.mode)
print('登录前title:', page.title, '\n')
# 使用 d 模式输入账号密码登录
page.ele('#user_login').input('your_user_name')
page.ele('#user_password').input('your_password\n')
sleep(1)
# 切换到 session 模式
page.change_mode()
# 打印当前模式和登录后的 title()
print('当前模式:', page.mode)
print('登录后title:', page.title)
输出:
当前模式:d
登录前title: 登录 - Gitee.com
当前模式:s
登录后title: 个人资料 - 码云 Gitee.com
set_cookies()
此方法用于设置 cookies。
可以接收 CookieJar、list、tuple、str、dict 格式的 cookies。
参数:
- cookies:cookies 信息
- refresh:设置cookies后是否刷新页面
返回:None
cookies = {'name': 'abc'}
page.set_cookies(cookies)
cookies_to_session()
此方法用于从 WebDriver 对象复制 cookies 到 Session 对象。
参数:
- copy_user_agent:是否同时复制 user agent 信息
返回:None
cookies_to_driver()
此方法用于从 Session 对象复制 cookies 到 WebDriver 对象。
参数:
- url:指定 url,默认用当前 url
返回:None
download()
此方法用于下载文件,详细用法见“使用方法 -> 下载文件”章节。
close_driver()
此方法用于关闭 WebDriver 对象和浏览器。
参数:无
返回:None
close_session()
此方法用于关闭 Session 对象。
参数:无
返回:None
s 模式独有方法
post()
此方法用于以 post 方式访问 url,具体用法见“使用方法 -> 访问网页”章节。
d 模式独有方法
hide_browser()
此方法用于隐藏浏览器进程窗口,非最小化,任务栏上也可隐藏。
但若操作过程中有新增标签页,浏览器会重新出现。 只支持 Windows 系统,且只有设置了 local 或 debugger_address 时生效。
参数:无
返回:None
show_browser()
此方法用于显示被隐藏的浏览器进程。
只支持 Windows 系统,且只有设置了 local 或 debugger_address 时生效。
参数:无
返回:None
wait_ele()
此方法用于等待元素到达某种状态,支持显示、隐藏、删除三种。
参数:
- loc_or_ele:元素或定位符,支持 selenium 和本库定位符
- mode:等待方式,可选:'del', 'display', 'hidden'
- timeout:等待超时时间
返回:是否等待成功
# 等待 id 为 div1 的元素被隐藏
page.wait_ele('#div1', 'hidden', 3)
run_script()
此方法用于执行 js 脚本。
参数:
- script:js 脚本文本
- *args:传入的参数
返回:脚本执行结果
# 执行 js 脚本显示弹出框显示 Hello world!
page.run_script('alert(arguments[0]+arguments[1])', 'Hello', ' world!')
run_async_script()
此方法用于以异步方式执行 js 脚本。
参数:
- script:js 脚本文本
- *args:传入的参数
返回:脚本执行结果
set_timeouts()
此方法用于设置三种超时时间,selenium 4 以上版本生效。
参数:
- implicit:查找元素超时时间
- pageLoad:页面加载超时时间
- script:脚本运行超时时间
返回:None
to_frame()
此方法用于将页面焦点移到某个 frame 或 iframe。
参数:
- loc_or_ele:iframe的定位信息,默认跳到最顶层。
返回:当前页面对象,可用于链式操作
loc_or_ele 参数支持以下信息:
- iframe 元素对象,DriverElement 和 WebElement 都可以
- 本库或 selenium 定位符,如 'tag:iframe'、(By.XPATH, '//iframe')
- iframe 在页面中的序号,如 0 表示第一个 iframe
- iframe 的 id 或 name 值
- 'main' 或 'parent' 字符串,分别代表跳转到顶层和父 iframe
# 传入元素
iframe = page.ele('tag:iframe')
page.to_frame(iframe)
# 使用定位符
page.to_frame('tag:iframe')
# 使用序号,0 代表第一个
page.to_frame(0)
# 使用 id 或 name 值
page.to_frame('iframe_id')
# 使用 'main' 或 'parent' 字符串
page.to_frame('main')
page.to_frame('parent')
to_tab()
此方法把焦点定位到某个标签页。
参数:
- num_or_handle:标签页序号或 handle 字符串,序号第一个为 0,最后为 -1
返回:None
注意: 自动化过程中若手动点击标签页,会使被点击标签页的 handle 排到首位,从而导致排序与视觉效果不一致。
# 跳转到第一个标签页
page.to_tab(0)
# 跳转到 handle 为该字符串的标签页
page.to_tab('xxxxxxxxxxxxxxxxxxxx')
create_tab()
此方法用于新建并定位到一个标签页,该标签页在最后面。可指定跳转到一个 url。
参数:
- url:新标签页跳转到的 url
返回:None
page.create_tab('http://www.baidu.com')
close_tabs()
此方法用于关闭指定的标签页,标签页可以是序号或 handle 值,可关闭多个。默认关闭当前的。
注意: 当程序使用的是截关的浏览器,获取到的 handle 顺序和视觉效果不一致,不能按序号关闭。
参数:
- num_or_handles:要保留的标签页序号或 handle,可传入 list 或 tuple,为None时关闭当前页
返回:None
# 关闭当前标签页
page.close_tabs()
# 关闭第1、3个标签页
page.close_tabs((0, 2))
close_other_tabs()
此方法用于关闭指定标签页以外的标签页,标签页可以是序号或 handle 值,可保留多个。默认保留当前的。
注意: 当程序使用的是截关的浏览器,获取到的 handle 顺序和视觉效果不一致,不能按序号关闭。
参数:
- num_or_handles:要保留的标签页序号或 handle,可传入 list 或 tuple,为None时关闭当前页
返回:None
# 关闭除当前标签页外的所有标签页
page.close_other_tabs()
# 关闭除第一个以外的标签页
page.close_other_tabs(0)
# 关闭除 handle 为 aaaaa 和 bbbbb 以外的标签页
reserve_list = ('aaaaa', 'bbbbb')
page.close_other_tabs(reserve_list)
scroll_to()
此方法用于按参数指示方式滚动页面。默认状态滚动到底端。
参数:
- mode:滚动方向,为字符串,可选范围见下文
- pixel:滚动的像素
返回:None
mode 参数可在以下选项中选择:
- 'top':页面顶端,选择它时 pixel 参数无效
- 'bottom':页面底端,选择它时 pixel 参数无效
- 'half':页面中间位置,选择它时 pixel 参数无效
- 'rightmost':页面最右边,垂直方向位置不变,选择它时 pixel 参数无效
- 'leftmost':页面最左边,垂直方向位置不变,选择它时 pixel 参数无效
- 'up':向上
- 'down':向下
- 'left':向左
- 'right':向右
# 页面滚动到底部
page.scroll_to()
# 页面滚动到最右边
page.scroll_to('rightmost')
# 页面向下滚动 200 像素
page.scroll_to('down', 200)
scroll_to_see()
此方法用于滚动页面直到元素可见。
参数:
- loc_or_ele:元素的定位信息,可以是元素、定位符
返回:None
# 滚动到某个已获取到的元素
ele = page.ele('tag:div')
page.scroll_to_see(ele)
# 滚动到按定位符查找到的元素
page.scroll_to_see('tag:div')
# 也可用 selenium 定位符
page.scroll_to_see((By.XPATH, '//div'))
refresh()
此方法用于刷新当前页面。
参数:无
返回:None
back()
此方法用于在浏览历史中后退一步。
参数:无
返回:None
forward()
此方法用于在浏览历史中前进一步。
参数:无
返回:None
screenshot()
此方法用于生成页面可见范围截图。图片为 png 格式。
此方法能够自动处理文件重命名的情况,给新文件后面增加序号。
参数:
- path:图片保存路径
- filename:图片文件名,可不写后缀,不传入时以页面 title 命名
返回:图片完整路径
# 浏览器窗口截图,保存到 D 盘 img 文件夹,文件名为 img1.png
page.screenshot(r'D:\img', 'img1')
set_window_size()
此方法用于设置浏览器窗口大小。
默认最大化,任一参数为0最小化。
参数:
- height:浏览器窗口高度
- width:浏览器窗口宽度
返回:None
# 窗口最大化
page.set_window_size()
# 窗口最小化
page.set_window_size(0)
# 设置窗口为 800*600
page.set_window_size(800, 600)
process_alert()
此方法 用于处理提示框。
它能够设置等待时间,等待提示框出现才进行处理,若超时没等到提示框,返回 None。
它可只获取提示框文本而不处理提示框。
参数:
- mode:'ok' 或 'cancel',若输入其它值,不会按按钮但依然返回文本值
- text:处理 prompt 提示框时可输入文本
- timeout:等待提示框出现的超时时间
返回:提示框内容文本,未等到提示框则返回 None
# 确认提示框并获取提示框文本
txt = page.process_alert()
# 点击取消
page.process_alert('cancel')
# 给 prompt 提示框输入文本并点击确定
paeg.process_alert('ok', 'some text')
# 不处理提示框,只获取提示框文本
txt = page.process_alert(None)
check_page()
此方法用于检查页面是否符合预期,它默认返回 None,须由子类实现其功能。
用于 POM 模式时,可派生各种页面子类,从而实现检查页面的功能。