mirror of
https://gitee.com/g1879/DrissionPage.git
synced 2024-12-10 04:00:23 +08:00
497 lines
12 KiB
Markdown
497 lines
12 KiB
Markdown
动作链可以在浏览器上完成一系列交互行为,如鼠标移动、鼠标点击、键盘输入等。
|
|
|
|
动作链支持`ChromiumPage`、`WebPage`、`ChromiumTab`对象。
|
|
|
|
可以链式操作,也可以分开执行,每个动作执行即生效,无须`perform()`。
|
|
|
|
多个动作可以用链式模式操作:
|
|
|
|
```python
|
|
ac.move_to(ele).click().type('some text')
|
|
```
|
|
|
|
也可以多个操作分开执行:
|
|
|
|
```python
|
|
ac.move_to(ele)
|
|
ac.click()
|
|
ac.type('some text')
|
|
```
|
|
|
|
这两种方式效果是一样的,每个动作总会依次执行。
|
|
|
|
# ✔ 创建对象
|
|
|
|
## 📍 导入
|
|
|
|
```python
|
|
from DrissionPage import ActionChains
|
|
```
|
|
|
|
---
|
|
|
|
## 📍 `ActionChains`
|
|
|
|
创建动作链对象非常简单,只要把`WebPage`对象或`ChromiumPage`对象传入即可。动作链只在这个页面上生效。
|
|
|
|
| 初始化参数 | 类型 | 默认值 | 说明 |
|
|
|:------:|:--------------------------------------------:|:---:| ------------ |
|
|
| `page` | `ChromiumPage`<br>`WebPage`<br>`ChromiumTab` | 必填 | 动作链要操作的浏览器页面 |
|
|
|
|
```python
|
|
from DrissionPage import ChromiumPage, ActionChains
|
|
|
|
page = WebPage()
|
|
ac = ActionChains(page)
|
|
```
|
|
|
|
---
|
|
|
|
# ✔ 移动鼠标
|
|
|
|
## 📍 `move_to()`
|
|
|
|
此方法用于移动鼠标到元素中点,或页面上的某个绝对坐标。可设置偏移量,当带偏移量时,偏移量相对于元素左上角坐标。
|
|
|
|
| 初始化参数 | 类型 | 默认值 | 说明 |
|
|
|:------------:|:-----------------------------------------------:|:---:| --------------------------------------- |
|
|
| `ele_or_loc` | `ChrmoiumElement`<br>`str`<br>`Tuple[int, int]` | 必填 | 元素对象、文本定位符或绝对坐标,坐标为`tuple`(int, int) 形式 |
|
|
| `offset_x` | `int` | 0 | x 轴偏移量,向右为正,向左为负 |
|
|
| `offset_y` | `int` | 0 | y 轴偏移量,向下为正,向上为负 |
|
|
|
|
| 返回类型 | 说明 |
|
|
|:--------------:| ------- |
|
|
| `ActionChains` | 动作链对象本身 |
|
|
|
|
**示例:** 使鼠标移动到 ele 元素上
|
|
|
|
```python
|
|
ele = page('tag:a')
|
|
ac.move_to(ele_or_loc=ele)
|
|
```
|
|
|
|
---
|
|
|
|
## 📍 `move()`
|
|
|
|
此方法用于使鼠标相对当前位置移动若干距离。
|
|
|
|
| 参数名称 | 类型 | 默认值 | 说明 |
|
|
|:----------:|:-----:|:---:| ---------------- |
|
|
| `offset_x` | `int` | 0 | x 轴偏移量,向右为正,向左为负 |
|
|
| `offset_y` | `int` | 0 | y 轴偏移量,向下为正,向上为负 |
|
|
|
|
| 返回类型 | 说明 |
|
|
|:--------------:| ------- |
|
|
| `ActionChains` | 动作链对象本身 |
|
|
|
|
**示例:** 鼠标向右移动 300 像素
|
|
|
|
```python
|
|
ac.move(300, 0)
|
|
```
|
|
|
|
---
|
|
|
|
## 📍 `up()`
|
|
|
|
此方法用于使鼠标相对当前位置向上移动若干距离。
|
|
|
|
| 参数名称 | 类型 | 默认值 | 说明 |
|
|
|:-------:|:-----:|:---:| -------- |
|
|
| `pixel` | `int` | 必填 | 鼠标移动的像素值 |
|
|
|
|
| 返回类型 | 说明 |
|
|
|:--------------:| ------- |
|
|
| `ActionChains` | 动作链对象本身 |
|
|
|
|
**示例:** 鼠标向上移动 50 像素
|
|
|
|
```python
|
|
ac.up(50)
|
|
```
|
|
|
|
---
|
|
|
|
## 📍 `down()`
|
|
|
|
此方法用于使鼠标相对当前位置向下移动若干距离。
|
|
|
|
| 参数名称 | 类型 | 默认值 | 说明 |
|
|
|:-------:|:-----:|:---:| -------- |
|
|
| `pixel` | `int` | 必填 | 鼠标移动的像素值 |
|
|
|
|
| 返回类型 | 说明 |
|
|
|:--------------:| ------- |
|
|
| `ActionChains` | 动作链对象本身 |
|
|
|
|
**示例:**
|
|
|
|
```python
|
|
ac.down(50)
|
|
```
|
|
|
|
---
|
|
|
|
## 📍 `left()`
|
|
|
|
此方法用于使鼠标相对当前位置向左移动若干距离。
|
|
|
|
| 参数名称 | 类型 | 默认值 | 说明 |
|
|
|:-------:|:-----:|:---:| -------- |
|
|
| `pixel` | `int` | 必填 | 鼠标移动的像素值 |
|
|
|
|
| 返回类型 | 说明 |
|
|
|:--------------:| ------- |
|
|
| `ActionChains` | 动作链对象本身 |
|
|
|
|
**示例:**
|
|
|
|
```python
|
|
ac.left(50)
|
|
```
|
|
|
|
---
|
|
|
|
## 📍 `right()`
|
|
|
|
此方法用于使鼠标相对当前位置向右移动若干距离。
|
|
|
|
| 参数名称 | 类型 | 默认值 | 说明 |
|
|
|:-------:|:-----:|:---:| -------- |
|
|
| `pixel` | `int` | 必填 | 鼠标移动的像素值 |
|
|
|
|
| 返回类型 | 说明 |
|
|
|:--------------:| ------- |
|
|
| `ActionChains` | 动作链对象本身 |
|
|
|
|
**示例:**
|
|
|
|
```python
|
|
ac.right(50)
|
|
```
|
|
|
|
---
|
|
|
|
# ✔ 鼠标按键
|
|
|
|
## 📍 `click()`
|
|
|
|
此方法用于单击鼠标左键,单击前可先移动到元素上。
|
|
|
|
| 参数名称 | 类型 | 默认值 | 说明 |
|
|
|:--------:|:--------------------------:|:------:| -------------- |
|
|
| `on_ele` | `ChromiumElement`<br>`str` | `None` | 要点击的元素对象或文本定位符 |
|
|
|
|
| 返回类型 | 说明 |
|
|
|:--------------:| ------- |
|
|
| `ActionChains` | 动作链对象本身 |
|
|
|
|
**示例:**
|
|
|
|
```python
|
|
ac.click('#div1')
|
|
```
|
|
|
|
---
|
|
|
|
## 📍 `r_click()`
|
|
|
|
此方法用于单击鼠标右键,单击前可先移动到元素上。
|
|
|
|
| 参数名称 | 类型 | 默认值 | 说明 |
|
|
|:--------:|:--------------------------:|:------:| -------------- |
|
|
| `on_ele` | `ChromiumElement`<br>`str` | `None` | 要点击的元素对象或文本定位符 |
|
|
|
|
| 返回类型 | 说明 |
|
|
|:--------------:| ------- |
|
|
| `ActionChains` | 动作链对象本身 |
|
|
|
|
**示例:**
|
|
|
|
```python
|
|
ac.r_click('#div1')
|
|
```
|
|
|
|
---
|
|
|
|
## 📍 `m_click()`
|
|
|
|
此方法用于单击鼠标中键,单击前可先移动到元素上。
|
|
|
|
| 参数名称 | 类型 | 默认值 | 说明 |
|
|
|:--------:|:--------------------------:|:------:| -------------- |
|
|
| `on_ele` | `ChromiumElement`<br>`str` | `None` | 要点击的元素对象或文本定位符 |
|
|
|
|
| 返回类型 | 说明 |
|
|
|:--------------:| ------- |
|
|
| `ActionChains` | 动作链对象本身 |
|
|
|
|
**示例:**
|
|
|
|
```python
|
|
ac.m_click('#div1')
|
|
```
|
|
|
|
---
|
|
|
|
## 📍 `hold()`
|
|
|
|
此方法用于按住鼠标左键不放,按住前可先移动到元素上。
|
|
|
|
| 参数名称 | 类型 | 默认值 | 说明 |
|
|
|:--------:|:--------------------------:|:------:| -------------- |
|
|
| `on_ele` | `ChromiumElement`<br>`str` | `None` | 要按住的元素对象或文本定位符 |
|
|
|
|
| 返回类型 | 说明 |
|
|
|:--------------:| ------- |
|
|
| `ActionChains` | 动作链对象本身 |
|
|
|
|
**示例:**
|
|
|
|
```python
|
|
ac.hold('#div1')
|
|
```
|
|
|
|
---
|
|
|
|
## 📍 `release()`
|
|
|
|
此方法用于释放鼠标左键,释放前可先移动到元素上。
|
|
|
|
| 参数名称 | 类型 | 默认值 | 说明 |
|
|
|:--------:|:--------------------------:|:------:| -------------- |
|
|
| `on_ele` | `ChromiumElement`<br>`str` | `None` | 要释放的元素对象或文本定位符 |
|
|
|
|
| 返回类型 | 说明 |
|
|
|:--------------:| ------- |
|
|
| `ActionChains` | 动作链对象本身 |
|
|
|
|
**示例:** 移动到某元素上然后释放鼠标左键
|
|
|
|
```python
|
|
ac.release('#div1')
|
|
```
|
|
|
|
---
|
|
|
|
## 📍 `r_hold()`
|
|
|
|
此方法用于按住鼠标右键不放,按住前可先移动到元素上。
|
|
|
|
| 参数名称 | 类型 | 默认值 | 说明 |
|
|
|:--------:|:--------------------------:|:------:| -------------- |
|
|
| `on_ele` | `ChromiumElement`<br>`str` | `None` | 要按住的元素对象或文本定位符 |
|
|
|
|
| 返回类型 | 说明 |
|
|
|:--------------:| ------- |
|
|
| `ActionChains` | 动作链对象本身 |
|
|
|
|
---
|
|
|
|
## 📍 `r_release()`
|
|
|
|
此方法用于释放鼠标右键,释放前可先移动到元素上。
|
|
|
|
| 参数名称 | 类型 | 默认值 | 说明 |
|
|
|:--------:|:--------------------------:|:------:| -------------- |
|
|
| `on_ele` | `ChromiumElement`<br>`str` | `None` | 要释放的元素对象或文本定位符 |
|
|
|
|
| 返回类型 | 说明 |
|
|
|:--------------:| ------- |
|
|
| `ActionChains` | 动作链对象本身 |
|
|
|
|
---
|
|
|
|
## 📍 `m_hold()`
|
|
|
|
此方法用于按住鼠标中键不放,按住前可先移动到元素上。
|
|
|
|
| 参数名称 | 类型 | 默认值 | 说明 |
|
|
|:--------:|:--------------------------:|:------:| -------------- |
|
|
| `on_ele` | `ChromiumElement`<br>`str` | `None` | 要按住的元素对象或文本定位符 |
|
|
|
|
| 返回类型 | 说明 |
|
|
|:--------------:| ------- |
|
|
| `ActionChains` | 动作链对象本身 |
|
|
|
|
---
|
|
|
|
## 📍 `m_release()`
|
|
|
|
此方法用于释放鼠标中键,释放前可先移动到元素上。
|
|
|
|
| 参数名称 | 类型 | 默认值 | 说明 |
|
|
|:--------:|:--------------------------:|:------:| -------------- |
|
|
| `on_ele` | `ChromiumElement`<br>`str` | `None` | 要释放的元素对象或文本定位符 |
|
|
|
|
| 类型 | 说明 |
|
|
|:--------------:| ------- |
|
|
| `ActionChains` | 动作链对象本身 |
|
|
|
|
---
|
|
|
|
# ✔ 滚动滚轮
|
|
|
|
## 📍 `scroll()`
|
|
|
|
此方法用于滚动鼠标滚轮,滚动前可先移动到元素上。
|
|
|
|
| 参数名称 | 类型 | 默认值 | 说明 |
|
|
|:---------:|:--------------------------:|:------:| ------------------- |
|
|
| `delta_x` | `int` | 0 | 滚轮 x 轴变化值,向右为正,向左为负 |
|
|
| `delta_y` | `str` | 0 | 滚轮 y 轴变化值,向下为正,向上为负 |
|
|
| `on_ele` | `ChromiumElement`<br>`str` | `None` | 要滚动的元素对象或文本定位符 |
|
|
|
|
| 返回类型 | 说明 |
|
|
|:--------------:| ------- |
|
|
| `ActionChains` | 动作链对象本身 |
|
|
|
|
---
|
|
|
|
# ✔ 键盘按键
|
|
|
|
## 📍 `key_down()`
|
|
|
|
此方法用于按下键盘按键,特殊字符见 Keys。
|
|
|
|
| 参数名称 | 类型 | 默认值 | 说明 |
|
|
|:-----:|:-----:|:---:| ---- |
|
|
| `key` | `str` | 必填 | 按键键值 |
|
|
|
|
| 返回类型 | 说明 |
|
|
|:--------------:| ------- |
|
|
| `ActionChains` | 动作链对象本身 |
|
|
|
|
**示例:** 按下 ctrl 键
|
|
|
|
```python
|
|
from DrissionPage.keys import Keys
|
|
|
|
ac.key_down(Keys.CTRL)
|
|
```
|
|
|
|
---
|
|
|
|
## 📍 `key_up()`
|
|
|
|
此方法用于提起键盘按键,特殊字符见 Keys。
|
|
|
|
| 参数名称 | 类型 | 默认值 | 说明 |
|
|
|:-----:|:-----:|:---:| ---- |
|
|
| `key` | `str` | 必填 | 按键键值 |
|
|
|
|
| 返回类型 | 说明 |
|
|
|:--------------:| ------- |
|
|
| `ActionChains` | 动作链对象本身 |
|
|
|
|
**示例:** 提起 ctrl 键
|
|
|
|
```python
|
|
from DrissionPage.keys import Keys
|
|
|
|
ac.key_up(Keys.CTRL)
|
|
```
|
|
|
|
---
|
|
|
|
## 📍 `type()`
|
|
|
|
此方法用于输入一段文本。
|
|
|
|
| 参数名称 | 类型 | 默认值 | 说明 |
|
|
|:------:|:-----:|:---:| ------ |
|
|
| `text` | `str` | 必填 | 要输入的文本 |
|
|
|
|
| 返回类型 | 说明 |
|
|
|:--------------:| ------- |
|
|
| `ActionChains` | 动作链对象本身 |
|
|
|
|
**示例:**
|
|
|
|
```python
|
|
ac.type('text')
|
|
```
|
|
|
|
---
|
|
|
|
# ✔ 等待
|
|
|
|
## 📍 `wait()`
|
|
|
|
此方法用于在动作链中插入停顿。
|
|
|
|
| 参数名称 | 类型 | 默认值 | 说明 |
|
|
|:--------:|:-------:|:---:| ---- |
|
|
| `second` | `float` | 必填 | 等待秒数 |
|
|
|
|
| 返回类型 | 说明 |
|
|
|:--------------:| ------- |
|
|
| `ActionChains` | 动作链对象本身 |
|
|
|
|
**示例:** 停顿 3 秒
|
|
|
|
```python
|
|
ac.wait(3)
|
|
```
|
|
|
|
---
|
|
|
|
# ✔ 示例
|
|
|
|
## 📍 模拟输入 ctrl+a
|
|
|
|
```python
|
|
from DrissionPage import ChromiumPage, ActionChains, Keys
|
|
|
|
# 创建页面
|
|
page = ChromiumPage()
|
|
# 创建动作链对象
|
|
ac = ActionChains(page)
|
|
|
|
# 鼠标移动到<input>元素上
|
|
ac.move_to('tag:input')
|
|
# 点击鼠标,使光标落到元素中
|
|
ac.click()
|
|
# 按下 ctrl 键
|
|
ac.key_down(Keys.CTRL)
|
|
# 输入 a
|
|
ac.type('a')
|
|
# 提起 ctrl 键
|
|
ac.key_up(Keys.CTRL)
|
|
```
|
|
|
|
链式写法:
|
|
|
|
```python
|
|
ac.click('tag:input').key_down(Keys.CTRL).type('a').key_up(Keys.CTRL)
|
|
```
|
|
|
|
---
|
|
|
|
## 📍 拖拽元素
|
|
|
|
把一个元素向右拖拽 300 像素:
|
|
|
|
```python
|
|
from DrissionPage import ChromiumPage, ActionChains
|
|
|
|
# 创建页面
|
|
page = ChromiumPage()
|
|
# 创建动作链对象
|
|
ac = ActionChains(page)
|
|
|
|
# 左键按住元素
|
|
ac.hold('#div1')
|
|
# 向右移动鼠标300像素
|
|
ac.right(300)
|
|
# 释放左键
|
|
ac.release()
|
|
```
|
|
|
|
把一个元素拖拽到另一个元素上:
|
|
|
|
```python
|
|
ac.hold('#div1').release('#div2')
|
|
```
|