DrissionPage/docs/5_ChromiumPage/4_page_operation.md
2023-02-03 00:03:36 +08:00

507 lines
14 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.

本节介绍浏览器页面交互功能,元素的交互在下一节。
页面对象包括`ChromiumPage`、d 模式的`WebPage``ChromiumTab``ChromiumFrame`几种,这里只介绍`ChromiumPage`,其它几种后面专门章节介绍。
# ✔️ 页面跳转
## 📍 `get()`
该方法用于跳转到一个网址。当连接失败时,程序会进行重试。
| 参数名称 | 类型 | 默认值 | 说明 |
|:-------------:|:----------------:|:-------:| --------------------------- |
| `url` | `str` | 必填 | 目标 url |
| `show_errmsg` | `bool` | `False` | 连接出错时是否显示和抛出异常 |
| `retry` | `int` | `None` | 重试次数,为`None`时使用页面参数,默认 3 |
| `interval` | `int`<br>`float` | `None` | 重试间隔(秒),为`None`时使用页面参数,默认 2 |
| `timeout` | `int`<br>`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`<br>`float`<br>`None`<br>`True` | `None` | 超时时间,为`None``Ture`时使用页面`timeout`设置<br>为数字时等待相应时间 |
| 返回类型 | 说明 |
|:------:| ------------- |
| `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`<br>`list`<br>`tuple`<br>`str`<br>`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`<br>`False` | 必填 | 为`False`时,删除该项 |
**返回:**`None`
**示例:**
```python
page.set_session_storage(item='abc', value='123')
```
---
## 📍 `set_local_storage()`
此方法用于设置或删除某项 localStorage 信息。
| 参数名称 | 类型 | 默认值 | 说明 |
|:-------:|:----------------:|:---:| -------------- |
| `item` | `str` | 必填 | 要设置的项 |
| `value` | `str`<br>`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`<br>`float`<br>`None` | `None` | 整体超时时间 |
| `page_load` | `int`<br>`float`<br>`None` | `None` | 页面加载超时时间 |
| `script` | `int`<br>`float`<br>`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()
```
!>**注意:**<br>- 浏览器隐藏后并没有关闭,下次运行程序还会接管已隐藏的浏览器<br>- 浏览器隐藏后,如果有新建标签页,会自行显示出来
---
# ✔️ 滚动页面
## 📍 `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`<br>`tuple`<br>`ChromiumElement` | 必填 | 元素的定位信息,可以是元素、定位符 |
**返回:**`None`
**示例:**
```python
# 滚动到某个已获取到的元素
ele = page.ele('tag:div')
page.scroll_to_see(ele)
# 滚动到按定位符查找到的元素
page.scroll_to_see('tag:div')
```
---
# ✔️ 处理弹出消息
## 📍 `handle_alert()`
此方法 用于处理提示框。
它能够设置等待时间,等待提示框出现才进行处理,若超时没等到提示框,返回`None`
也可只获取提示框文本而不处理提示框。
| 参数名称 | 类型 | 默认值 | 说明 |
|:---------:|:----------------:|:------:| ------------------------------------------ |
| `accept` | `bool`<br>`None` | `True` | `True`表示确认,`False`表示取消,`None`不会按按钮但依然返回文本值 |
| `send` | `str` | `None` | 处理 prompt 提示框时可输入文本 |
| `timeout` | `int`<br>`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()
```