DrissionPage/docs/使用方法/页面操作.md
2022-01-15 01:00:48 +08:00

465 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

本节介绍页面对象可以使用的方法,有些方法是两种模式共有的,有些只有某种模式可以使用。当调用独有方法时,会自动切换到该模式。如调用`post()`方法时,会先切换到 s 模式,并同步登录信息。
# 两种模式共有的方法
## get()
此方法用于跳转到一个 url详细用法见“使用方法 -> 访问网页”章节。
## ele()、eles()、s_ele()、s_eles()
这些方法用于在页面中查找元素,详细用法见“使用方法 -> 获取页面元素”章节。
## change_mode()
此方法用于转换 MixPage 模式。
切换后默认在目标模式重新跳转到原模式所在 url。
**注意:** s 模式转 d 模式时,若浏览器当前网址域名和 s 模式不一样,必定会跳转。
参数:
- mode目标模式字符串's' 或 'd',默认转换到另一种
- go转换后是否跳转到原模式所在 url
返回None
```python
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。
参数:
- cookiescookies 信息
- refresh设置cookies后是否刷新页面
返回None
```python
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等待超时时间
返回:是否等待成功
```python
# 等待 id 为 div1 的元素被隐藏
page.wait_ele('#div1', 'hidden', 3)
```
## run_script()
此方法用于执行 js 脚本。
参数:
- scriptjs 脚本文本
- *args传入的参数
返回:脚本执行结果
```python
# 执行 js 脚本显示弹出框显示 Hello world!
page.run_script('alert(arguments[0]+arguments[1])', 'Hello', ' world!')
```
## run_async_script()
此方法用于以异步方式执行 js 脚本。
参数:
- scriptjs 脚本文本
- *args传入的参数
返回:脚本执行结果
## set_timeouts()
此方法用于设置三种超时时间selenium 4 以上版本生效。
参数:
- implicit查找元素超时时间
- pageLoad页面加载超时时间
- script脚本运行超时时间
返回None
## to_frame()
此方法用于将页面焦点移到某个 frame 或 iframe。
参数:
- loc_or_eleiframe的定位信息默认跳到最顶层。
返回:当前页面对象,可用于链式操作
loc_or_ele 参数支持以下信息:
- iframe 元素对象DriverElement 和 WebElement 都可以
- 本库或 selenium 定位符,如 'tag:iframe'、(By.XPATH, '//iframe')
- iframe 在页面中的序号,如 0 表示第一个 iframe
- iframe 的 id 或 name 值
- 'main' 或 'parent' 字符串,分别代表跳转到顶层和父 iframe
```python
# 传入元素
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 排到首位,从而导致排序与视觉效果不一致。
```python
# 跳转到第一个标签页
page.to_tab(0)
# 跳转到 handle 为该字符串的标签页
page.to_tab('xxxxxxxxxxxxxxxxxxxx')
```
## create_tab()
此方法用于新建并定位到一个标签页,该标签页在最后面。可指定跳转到一个 url。
参数:
- url新标签页跳转到的 url
返回None
```python
page.create_tab('http://www.baidu.com')
```
## close_tabs()
此方法用于关闭指定的标签页,标签页可以是序号或 handle 值,可关闭多个。默认关闭当前的。
**注意:** 当程序使用的是截关的浏览器,获取到的 handle 顺序和视觉效果不一致,不能按序号关闭。
参数:
- num_or_handles要保留的标签页序号或 handle可传入 list 或 tuple为None时关闭当前页
返回None
```python
# 关闭当前标签页
page.close_tabs()
# 关闭第1、3个标签页
page.close_tabs((0, 2))
```
## close_other_tabs()
此方法用于关闭指定标签页以外的标签页,标签页可以是序号或 handle 值,可保留多个。默认保留当前的。
**注意:** 当程序使用的是截关的浏览器,获取到的 handle 顺序和视觉效果不一致,不能按序号关闭。
参数:
- num_or_handles要保留的标签页序号或 handle可传入 list 或 tuple为None时关闭当前页
返回None
```python
# 关闭除当前标签页外的所有标签页
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':向右
```python
# 页面滚动到底部
page.scroll_to()
# 页面滚动到最右边
page.scroll_to('rightmost')
# 页面向下滚动 200 像素
page.scroll_to('down', 200)
```
## scroll_to_see()
此方法用于滚动页面直到元素可见。
参数:
- loc_or_ele元素的定位信息可以是元素、定位符
返回None
```python
# 滚动到某个已获取到的元素
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 命名
返回:图片完整路径
```python
# 浏览器窗口截图,保存到 D 盘 img 文件夹,文件名为 img1.png
page.screenshot(r'D:\img', 'img1')
```
## set_window_size()
此方法用于设置浏览器窗口大小。
默认最大化任一参数为0最小化。
参数:
- height浏览器窗口高度
- width浏览器窗口宽度
返回None
```python
# 窗口最大化
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
```python
# 确认提示框并获取提示框文本
txt = page.process_alert()
# 点击取消
page.process_alert('cancel')
# 给 prompt 提示框输入文本并点击确定
paeg.process_alert('ok', 'some text')
# 不处理提示框,只获取提示框文本
txt = page.process_alert(None)
```
## check_page()
此方法用于检查页面是否符合预期,它默认返回 None须由子类实现其功能。
用于 POM 模式时,可派生各种页面子类,从而实现检查页面的功能。