本节介绍浏览器页面交互功能,元素的交互在下一节。
页面对象包括`ChromiumPage`、d 模式的`WebPage`、`ChromiumTab`、`ChromiumFrame`几种,这里只介绍`ChromiumPage`,其它几种后面专门章节介绍。
# ✔️ 页面跳转
## 📍 `get()`
该方法用于跳转到一个网址。当连接失败时,程序会进行重试。
| 参数名称 | 类型 | 默认值 | 说明 |
|:-------------:|:----------------:|:-------:| --------------------------- |
| `url` | `str` | 必填 | 目标 url |
| `show_errmsg` | `bool` | `False` | 连接出错时是否显示和抛出异常 |
| `retry` | `int` | `None` | 重试次数,为`None`时使用页面参数,默认 3 |
| `interval` | `int`
`float` | `None` | 重试间隔(秒),为`None`时使用页面参数,默认 2 |
| `timeout` | `int`
`float` | `None` | 加载超时时间(秒) |
| 返回类型 | 说明 |
|:------:| ------ |
| `bool` | 是否连接成功 |
**示例:**
```python
page.get('https://www.baidu.com')
```
---
## 📍 `back()`
此方法用于在浏览历史中后退若干步。
| 参数名称 | 类型 | 默认值 | 说明 |
|:-------:|:-----:|:---:| ---- |
| `steps` | `int` | `1` | 后退步数 |
**返回:**`None`
**示例:**
```python
page.back(2) # 后退两个网页
```
---
## 📍 `forward()`
此方法用于在浏览历史中前进若干步。
| 参数名称 | 类型 | 默认值 | 说明 |
|:-------:|:-----:|:---:| ---- |
| `steps` | `int` | `1` | 前进步数 |
**返回:**`None`
```python
page.forward(2) # 前进两步
```
---
## 📍 `refresh()`
此方法用于刷新当前页面。
| 参数名称 | 类型 | 默认值 | 说明 |
|:--------------:|:------:|:-------:| --------- |
| `ignore_cache` | `bool` | `False` | 刷新时是否忽略缓存 |
**返回:**`None`
```python
page.refresh() # 刷新页面
```
---
## 📍 `stop_loading()`
此方法用于强制停止当前页面加载。
**参数:** 无
**返回:**`None`
---
## 📍 `wait_loading()`
此方法用于等待页面进入加载状态。
我们经常会通过点击页面元素进入下一个网页,并立刻获取新页面的元素。但若跳转前的页面拥有和跳转后页面相同定位符的元素,会导致过早获取元素,跳转后失效的问题。使用此方法,会阻塞程序,等待页面开始加载后再继续,从而避免上述问题。
| 参数名称 | 类型 | 默认值 | 说明 |
|:---------:|:------------------------------------:|:------:| ------------------------------------------------- |
| `timeout` | `int`
`float`
`None`
`True` | `None` | 超时时间,为`None`或`Ture`时使用页面`timeout`设置
为数字时等待相应时间 |
| 返回类型 | 说明 |
|:------:| ------------- |
| `bool` | 等待结束时是否进入加载状态 |
**示例:**
```python
ele.click() # 点击某个元素
page.wait_loading() # 等待页面进入加载状态
# 执行在新页面的操作
print(page.title)
```
---
# ✔️ 执行脚本或命令
## 📍 `run_js()`
此方法用于执行 js 脚本。
| 参数名称 | 类型 | 默认值 | 说明 |
|:---------:|:------:|:-------:| ----------------------------------------------- |
| `script` | `str` | 必填 | js 脚本文本 |
| `as_expr` | `bool` | `False` | 是否作为表达式运行,为`True`时`args`参数无效 |
| `*args` | - | 无 | 传入的参数,按顺序在js文本中对应`argument[0]`、`argument[1]`... |
| 返回类型 | 说明 |
|:-----:| ------ |
| `Any` | 脚本执行结果 |
**示例:**
```python
# 用传入参数的方式执行 js 脚本显示弹出框显示 Hello world!
page.run_js('alert(arguments[0]+arguments[1]);', 'Hello', ' world!')
```
---
## 📍 `run_async_script()`
此方法用于以异步方式执行 js 代码。
**参数:**
| 参数名称 | 类型 | 默认值 | 说明 |
|:---------:|:------:|:-------:| ----------------------------------------------- |
| `script` | `str` | 必填 | js 脚本文本 |
| `as_expr` | `bool` | `False` | 是否作为表达式运行,为`True`时`args`参数无效 |
| `*args` | - | 无 | 传入的参数,按顺序在js文本中对应`argument[0]`、`argument[1]`... |
**返回:**`None`
---
## 📍 `run_cdp()`
此方法用于执行 Chrome DevTools Protocol 语句。
cdp 用法详见 [Chrome DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/)。
| 参数名称 | 类型 | 默认值 | 说明 |
|:------------:|:-----:|:---:| ---- |
| `cmd` | `str` | 必填 | 协议项目 |
| `**cmd_args` | - | 无 | 项目参数 |
| 返回类型 | 说明 |
|:------:| ------- |
| `dict` | 执行返回的结果 |
**示例:**
```python
# 停止页面加载
page.run_cdp('Page.stopLoading')
```
---
# ✔️ cookies 及缓存
## 📍 `set_cookies()`
此方法用于设置 cookies。
可以接收`CookieJar`、`list`、`tuple`、`str`、`dict`格式的 cookies。
| 参数名称 | 类型 | 默认值 | 说明 |
|:---------:|:-----------------------------------------------------------:|:---:| ---------- |
| `cookies` | `RequestsCookieJar`
`list`
`tuple`
`str`
`dict` | 必填 | cookies 信息 |
**返回:**`None`
```python
cookies = {'name': 'abc'}
page.set_cookies(cookies, set_session=True, set_driver=True)
```
---
## 📍 `set_session_storage()`
此方法用于设置或删除某项 sessionStorage 信息。
| 参数名称 | 类型 | 默认值 | 说明 |
|:-------:|:----------------:|:---:| -------------- |
| `item` | `str` | 必填 | 要设置的项 |
| `value` | `str`
`False` | 必填 | 为`False`时,删除该项 |
**返回:**`None`
**示例:**
```python
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`
**示例:**
```python
page.clear_cache(cookies=False) # 除了 cookies,其它都清除
```
---
# ✔️ 各种设置
## 📍 `set_timeouts()`
此方法用于设置三种超时时间,单位为秒。可单独设置,为`None`表示不改变原来设置。
| 参数名称 | 类型 | 默认值 | 说明 |
|:-----------:|:--------------------------:|:------:| -------- |
| `implicit` | `int`
`float`
`None` | `None` | 整体超时时间 |
| `page_load` | `int`
`float`
`None` | `None` | 页面加载超时时间 |
| `script` | `int`
`float`
`None` | `None` | 脚本运行超时时间 |
**返回:**`None`
**示例:**
```python
page.set_timeouts(implicit=10, page_load=30)
```
---
## 📍 `set_page_load_strategy`
此属性用于设置页面加载策略,调用其方法选择某种策略。
| 方法名称 | 参数 | 说明 |
|:----------:|:---:| ------------------- |
| `normal()` | 无 | 等待页面完全加载完成,为默认状态 |
| `eager()` | 无 | 等待文档加载完成就结束,不等待资源加载 |
| `none()` | 无 | 页面连接完成就结束 |
**示例:**
```python
page.set_page_load_strategy.normal()
page.set_page_load_strategy.eager()
page.set_page_load_strategy.none()
```
---
## 📍 `set_ua_to_tab()`
此方法用于为浏览器当前标签页设置 user agent,只在当前 tab 有效。
| 参数名称 | 类型 | 默认值 | 说明 |
|:----:|:-----:|:---:| -------------- |
| `ua` | `str` | 必填 | user agent 字符串 |
**返回:**`None`
---
## 📍 `set_headers()`
此方法用于设置额外添加到当前页面请求 headers 的参数。
| 参数名称 | 类型 | 默认值 | 说明 |
|:---------:|:------:|:---:| ----------------- |
| `headers` | `dict` | 必填 | `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`对象,调用其方法执行改变窗口状态。
| 方法 | 参数 | 说明 |
|:---------------------:|:----------------:| ---- |
| `maximized()` | 无 | 最大化 |
| `minimized()` | 无 | 最小化 |
| `fullscreen()` | 无 | 全屏 |
| `normal()` | 无 | 常规 |
| `size(width, height)` | 宽,高 | 设置大小 |
| `location(x, y)` | 屏幕坐标,左上角为 (0, 0) | 设置位置 |
```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()`方法用于随时隐藏和显示浏览器窗口。
与 headless 模式不一样,这两个方法是直接隐藏和显示浏览器进程。在任务栏上也会消失。
只支持 Windows 系统,并且必须已安装 pypiwin32 库才可使用。
🔸 `hide_browser()`
此方法用于隐藏当前浏览器窗口。
**参数:** 无
**返回:**`None`
---
🔸 `show_browser()`
此方法用于显示当前浏览器窗口。
**参数:** 无
**返回:**`None`
**示例:**
```python
page.hide_browser()
```
!>**注意:**
- 浏览器隐藏后并没有关闭,下次运行程序还会接管已隐藏的浏览器
- 浏览器隐藏后,如果有新建标签页,会自行显示出来
---
# ✔️ 滚动页面
## 📍 `scroll`
此属性用于以某种方式滚动页面。
调用时返回一个`Scroll`对象,调用其方法实现页面各种方式的滚动。
| 方法 | 参数 | 功能 |
| ------------------- | ------------------- | ---------------- |
| `to_top()` | 无 | 滚动到顶端,水平位置不变 |
| `to_bottom()` | 无 | 滚动到底端,水平位置不变 |
| `to_half()` | 无 | 滚动到垂直中间位置,水平位置不变 |
| `to_rightmost()` | 无 | 滚动到最右边,垂直位置不变 |
| `to_leftmost()` | 无 | 滚动到最左边,垂直位置不变 |
| `to_location(x, y)` | 滚动条坐标值,左上角为 (0 , 0) | 滚动到指定位置 |
| `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()`
此方法用于滚动页面直到元素可见。
| 参数名称 | 类型 | 默认值 | 说明 |
|:------------:|:-------------------------------------:|:---:| ----------------- |
| `loc_or_ele` | `str`
`tuple`
`ChromiumElement` | 必填 | 元素的定位信息,可以是元素、定位符 |
**返回:**`None`
**示例:**
```python
# 滚动到某个已获取到的元素
ele = page.ele('tag:div')
page.scroll_to_see(ele)
# 滚动到按定位符查找到的元素
page.scroll_to_see('tag:div')
```
---
# ✔️ 处理弹出消息
## 📍 `handle_alert()`
此方法 用于处理提示框。
它能够设置等待时间,等待提示框出现才进行处理,若超时没等到提示框,返回`None`。
也可只获取提示框文本而不处理提示框。
| 参数名称 | 类型 | 默认值 | 说明 |
|:---------:|:----------------:|:------:| ------------------------------------------ |
| `accept` | `bool`
`None` | `True` | `True`表示确认,`False`表示取消,`None`不会按按钮但依然返回文本值 |
| `send` | `str` | `None` | 处理 prompt 提示框时可输入文本 |
| `timeout` | `int`
`float` | `None` | 等待提示框出现的超时时间,为`None`时使用页面整体超时时间 |
| 返回类型 | 说明 |
|:------:| --------------- |
| `str` | 提示框内容文本 |
| `None` | 未等到提示框则返回`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)
```
---
# ✔️ 关闭浏览器
## 📍 `quit()`
此方法用于关闭浏览器。
**参数:** 无
**返回:**`**None`
```python
page.quit()
```