545 lines
13 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.

本节介绍`WebPage`对象可以使用的方法,有些方法是两种模式共有的,有些只有某种模式可以使用。当调用独有方法时,会自动切换到该模式。如调用`post()`方法时,会先切换到 s 模式,并同步登录信息。
# ✔️ 页面跳转
## 📍 `get()`
此方法用于跳转到一个 url两种模式都支持详细用法见“使用方法 -> 访问网页”章节。
**参数:**
- `url`:目标 url
- `show_errmsg`:是否显示和抛出异常,默认不抛出,连接错误会返回 `None`
- `retry`:重试次数,与页面对象的设置一致,默认 3 次
- `interval`:重试间隔(秒),与页面对象的设置一致,默认 2 秒
- `timeout`:连接超时时间(秒)
- `**kwargs`s 模式用到的连接参数,具体见 requests 用法
**返回:**`bool`类型,表示是否连接成功
```python
page.get('https://www.baidu.com')
```
## 📍 `post()`
此方法用于以 post 方式访问 url仅 s 模式支持。具体用法见“使用方法 -> 访问网页”章节。
参数:
- `url`:目标 url
- `data`:提交的数据,可以是`dict``str`类型
- `json`:提交的数据,可以是`dict``str`类型
- `show_errmsg`:是否显示和抛出异常,默认不抛出,连接错误会返回`None`
- `retry`:重试次数,与页面对象的设置一致,默认 3 次
- `interval`:重试间隔(秒),与页面对象的设置一致,默认 2 秒
- `**kwargs`:连接参数,具体见 requests 用法
返回:**`bool`类型,表示是否连接成功
```python
page.post('https://xxxxxx', data=data)
```
## 📍 `back()`
此方法用于在浏览历史中后退若干步d 模式独有。
**参数:**
- `steps`:后退步数
**返回:**`None`
```python
page.back(2) # 后退两个网页
```
## 📍 `forward()`
此方法用于在浏览历史中前进若干步d 模式独有。
**参数:**
- `steps`:前进步数
**返回:**`None`
```python
page.forward(2) # 前进两步
```
## 📍 `refresh()`
此方法用于刷新当前页面d 模式独有。
**参数:**
- `ignore_cache`:刷新时是否忽略缓存
**返回:**`None`
```python
page.refresh() # 刷新页面
```
## 📍 `stop_loading()`
此方法用于强制当前页面加载d 模式独有。
参数:无
返回:`None`
## 📍 `wait_loading()`
此方法用于等待页面进入加载状态d 模式独有。
我们经常会通过点击页面元素进入下一个网页,并立刻获取新页面的元素。但若跳转前的页面拥有和跳转后页面相同定位符的元素,会导致过早获取元素,跳转后失效的问题。使用此方法,会阻塞程序,等待页面开始加载后再继续,从而避免上述问题。
**参数:**
- `timeout`:超时时间
**返回:** 等待结束时是否进入加载状态
```python
ele.click() # 点击某个元素
page.wait_loading() # 等待页面进入加载状态
# 执行在新页面的操作
```
# ✔️切换页面模式
## 📍 `change_mode()`
此方法是`WebPage`用于切换模式的方法。
切换后默认在目标模式重新跳转到原模式所在 url。
参数:
- `mode`:目标模式字符串,`'s'``'d'`,默认转换到另一种
- `go`:转换后是否跳转到原模式所在 url
- `copy_cookies`是否复制cookies到目标模式
返回:`None`
以下例子演示用浏览器登录 gitee 网站,再切换到 s 模式。可见 s 模式依然处于登录状态。
```python
from DrissionPage import WebPage
# 创建页面对象,默认 d 模式
page = WebPage()
# 访问个人中心页面(未登录,重定向到登录页面)
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')
page.wait_loading()
# 切换到 session 模式
page.change_mode()
# 打印当前模式和登录后的 title
print('当前模式:', page.mode)
print('登录后title', page.title)
```
输出:
```
当前模式d
登录前title 登录 - Gitee.com
当前模式s
登录后title 个人资料 - 码云 Gitee.com
```
# ✔️ 执行脚本或命令
## 📍 `run_js()`
此方法用于执行 js 脚本d 模式独有。
**参数:**
- `script`js 脚本文本
- `as_expr`:是否作为表达式运行,为`True``args`参数无效
- `*args`传入的参数按顺序在js文本中对应`argument[0]``argument[1]`...
**返回:** 脚本执行结果
```python
# 用传入参数的方式执行 js 脚本显示弹出框显示 Hello world!
page.run_js('alert(arguments[0]+arguments[1]);', 'Hello', ' world!')
```
## 📍 `run_async_script()`
此方法用于以异步方式执行 js 代码d 模式独有。
**参数:**
- `script`js 文本
- `as_expr`:是否作为表达式运行,为`True``args`参数无效
- `*args`:传入 js 的参数按顺序在js文本中对应`argument[0]``argument[1]`...
**返回:**`None`
## 📍 `run_cdp()`
此方法用于执行 Chrome DevTools Protocol 语句d 模式独有。cdp
用法详见[Chrome DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/)。
**参数:**
- `cmd`:协议项目
- `**cmd_args`:项目参数
**返回:** 该语句返回的值
```python
# 停止页面加载
page.run_cdp('Page.stopLoading')
```
# ✔️ cookies 及缓存
## 📍 `set_cookies()`
此方法用于对浏览器或`Session`对象设置 cookies两种模式都支持。
可以接收`CookieJar``list``tuple``str``dict`格式的 cookies。
**参数:**
- `cookies`cookies 信息
- `set_session`:是否设置到`Session`对象
- `set_driver`:是否设置到浏览器
**返回:**`None`
```python
cookies = {'name': 'abc'}
page.set_cookies(cookies, set_session=True, set_driver=True)
```
## 📍 `cookies_to_session()`
此方法用于从浏览器复制 cookies 到`Session`对象。不会触发模式切换。
**参数:**
- `copy_user_agent`:是否同时复制 user agent 信息
**返回:**`None`
```python
page.cookies_to_session()
```
## 📍 `cookies_to_driver()`
此方法用于从`Session`对象复制 cookies 到浏览器。不会触发模式切换。
**参数:**
**返回:**`None`
## 📍 `set_session_storage()`
此方法用于设置或删除某项 sessionStorage 信息d 模式独有。
**参数:**
- `item`:要设置的项
- `value`:项的值,设置为`False`时,删除该项
**返回:**`None`
```python
page.set_session_storage(item='abc', value='123')
```
## 📍 `set_local_storage()`
此方法用于设置或删除某项 localStorage 信息d 模式独有。
**参数:**
- `item`:要设置的项
- `value`:项的值,设置为`False`时,删除该项
**返回:**`None`
## 📍 `clear_cache()`
此方法用于清除缓存可选要清除的项d 模式独有。
**参数:**
- `session_storage`:是否清除 sessionstorage
- `local_storage`:是否清除 localStorage
- `cache`:是否清除 cache
- `cookies`:是否清除 cookies
**返回:**`None`
```python
page.clear_cache(cookies=False) # 除了 cookies其它都清除
```
# ✔️ 各种设置
## 📍 `set_timeouts()`
此方法用于设置三种超时时间,单位为秒。可单独设置,为`None`表示不改变原来设置。
**参数:**
- `implicit`:查找元素超时时间
- `page_load`:页面加载超时时间
- `lscript`:脚本运行超时时间
**返回:**`None`
```python
page.set_timeouts(implicit=10, page_load=30)
```
## 📍 `set_page_load_strategy`
此属性用于设置页面加载策略d 模式独有。
页面加载策略有三种:
- `normal`:等待页面完全加载完成,为默认状态
- `eager`:等待文档加载完成就结束,不等待资源加载
- `none`:页面连接完成就结束
```python
page.set_page_load_strategy.eager()
```
## 📍 `set_ua_to_tab()`
此方法用于为浏览器当前标签页设置 user agent只在当前 tab 有效d 模式独有。
**参数:**
- `ua`user agent 字符串
**返回:**`None`
## 📍 `set_headers()`
此方法用于设置headers参数两种模式都支持。s 模式下,新 headers 值会逐项覆盖原来的,不会删除原来未被设置的值。
**参数:**
- `headers``dict`形式的 headers
**返回:**`None`
```python
h = {'connection': 'keep-alive', 'accept-charset': 'GB2312,utf-8;q=0.7,*;q=0.7'}
page.set_headers(headers=h)
```
# ✔️ 窗口管理
## 📍 调整大小和位置
`set_window`属性返回一个`WindowSetter`对象用于执行改变窗口的各种方法d 模式独有。
| 方法 | 参数 | 说明 |
| --------------------- | ---- | ---- |
| `maximized()` | 无 | 最大化 |
| `minimized()` | 无 | 最小化 |
| `fullscreen()` | 无 | 全屏 |
| `normal()` | 无 | 常规 |
| `size(width, height)` | 宽,高 | 设置大小 |
| `location(x, y)` | 屏幕坐标 | 设置位置 |
```python
# 窗口最大化
page.set_window.maximized()
# 窗口全屏,即 F11
page.set_window.fullscreen()
# 恢复普通窗口
page.set_window.normal()
# 设置窗口大小
page.set_window.size(500, 500)
# 设置窗口位置
page.set_window.location(200, 200)
```
## 📍 隐藏和显示窗口
`hide_browser()``show_browser()`方法用于随时隐藏和显示浏览器窗口d 模式独有。
与 headless 模式不一样,这两个方法是直接隐藏和显示浏览器进程。在任务栏上也会消失。
只支持 Windows 系统,并且必须已安装 pypiwin32 库才可使用。
`hide_browser()`
**参数:**
返回:`None`
`show_browser()`
**参数:**
返回:`None`
```python
page.hide_browser()
```
**注意:**
- 浏览器隐藏后并没有关闭,下次运行程序还会接管已隐藏的浏览器
- 浏览器隐藏后,如果有新建标签页,会自行显示出来
# ✔️ 滚动页面
## 📍 `scroll`
此属性用于以某种方式滚动页面d 模式独有。
调用此属性返回一个`Scroll`对象,调用该对象方法实现各种方式的滚动。
| 方法 | 参数说明 | 功能 |
| ------------------- | ------ | ---------------- |
| `to_top()` | 无 | 滚动到顶端,水平位置不变 |
| `to_bottom()` | 无 | 滚动到底端,水平位置不变 |
| `to_half()` | 无 | 滚动到垂直中间位置,水平位置不变 |
| `to_rightmost()` | 无 | 滚动到最右边,垂直位置不变 |
| `to_leftmost()` | 无 | 滚动到最左边,垂直位置不变 |
| `to_location(x, y)` | 滚动条坐标值 | 滚动到指定位置 |
| `up(pixel)` | 滚动的像素 | 向上滚动若干像素,水平位置不变 |
| `down(pixel)` | 滚动的像素 | 向下滚动若干像素,水平位置不变 |
| `right(pixel)` | 滚动的像素 | 向左滚动若干像素,垂直位置不变 |
| `left(pixel)` | 滚动的像素 | 向右滚动若干像素,垂直位置不变 |
```python
# 页面滚动到底部
page.scroll.to_bottom()
# 页面滚动到最右边
page.scroll.to_rightmost()
# 页面向下滚动 200 像素
page.scroll.down(200)
# 滚动到指定位置
page.scroll.to_location(100, 300)
```
## 📍 `scroll_to_see()`
此方法用于滚动页面直到元素可见d 模式独有。
**参数:**
- `loc_or_ele`:元素的定位信息,可以是元素、定位符
**返回:**`None`
```python
# 滚动到某个已获取到的元素
ele = page.ele('tag:div')
page.scroll_to_see(ele)
# 滚动到按定位符查找到的元素
page.scroll_to_see('tag:div')
```
# ✔️ 处理弹出消息
## 📍 `handle_alert()`
此方法 用于处理提示框d 模式独有。
它能够设置等待时间,等待提示框出现才进行处理,若超时没等到提示框,返回`None`
它可只获取提示框文本而不处理提示框。
**参数:**
- `accept``True`表示确认,`False`表示取消,其它值不会按按钮但依然返回文本值
- `send`:处理 prompt 提示框时可输入文本
- `timeout`:等待提示框出现的超时时间
**返回:** 提示框内容文本,未等到提示框则返回`None`
```python
# 确认提示框并获取提示框文本
txt = page.handle_alert()
# 点击取消
page.handle_alert(accept=False)
# 给 prompt 提示框输入文本并点击确定
paeg.handle_alert(accept=True, send='some text')
# 不处理提示框,只获取提示框文本
txt = page.handle_alert(accept=None)
```
# ✔️ 关闭
## 📍 `close_driver()`
此方法用于关闭`WebPage`控制的浏览器,并切换到 s 模式。
**参数:**
**返回:**`None`
```python
page.close_driver()
```
## 📍 `close_session()`
此方法用于关闭`WebPage`控制的`Session`对象,并切换到 d 模式。
**参数:**
**返回:`**None`
```python
page.close_session()
```
## 📍`quit()`
此方法用于退出浏览器并且关闭 Session 对象。彻底关闭`WebPage`对象。
**参数:**
**返回:`**None`
```python
page.quit()
```