Skip to content

🚤 动作链

动作链可以在浏览器上完成一系列交互行为,如鼠标移动、鼠标点击、键盘输入等。

动作链支持ChromiumPageWebPageChromiumTab对象。

可以链式操作,也可以分开执行,每个动作执行即生效,无须perform()

多个动作可以用链式模式操作:

ac.move_to(ele).click().type('some text')

也可以多个操作分开执行:

ac.move_to(ele)
ac.click()
ac.type('some text')

这两种方式效果是一样的,每个动作总会依次执行。

✅️ 创建对象

📌 导入

from DrissionPage.common import ActionChains

📌 ActionChains

创建动作链对象非常简单,只要把WebPage对象或ChromiumPage对象传入即可。动作链只在这个页面上生效。

初始化参数 类型 默认值 说明
page ChromiumPage
WebPage
ChromiumTab
必填 动作链要操作的浏览器页面
from DrissionPage import ChromiumPage
from DrissionPage.common import ActionChains

page = ChromiumPage()
ac = ActionChains(page)

✅️ 移动鼠标

📌 move_to()

此方法用于移动鼠标到元素中点,或页面上的某个绝对坐标。可设置偏移量,当带偏移量时,偏移量相对于元素左上角坐标。

初始化参数 类型 默认值 说明
ele_or_loc ChrmoiumElement
str
Tuple[int, int]
必填 元素对象、文本定位符或绝对坐标,坐标为tuple(int, int) 形式
offset_x int 0 x 轴偏移量,向右为正,向左为负
offset_y int 0 y 轴偏移量,向下为正,向上为负
返回类型 说明
ActionChains 动作链对象本身

示例: 使鼠标移动到 ele 元素上

ele = page('tag:a')
ac.move_to(ele_or_loc=ele)

📌 move()

此方法用于使鼠标相对当前位置移动若干距离。

参数名称 类型 默认值 说明
offset_x int 0 x 轴偏移量,向右为正,向左为负
offset_y int 0 y 轴偏移量,向下为正,向上为负
返回类型 说明
ActionChains 动作链对象本身

示例: 鼠标向右移动 300 像素

ac.move(300, 0)

📌 up()

此方法用于使鼠标相对当前位置向上移动若干距离。

参数名称 类型 默认值 说明
pixel int 必填 鼠标移动的像素值
返回类型 说明
ActionChains 动作链对象本身

示例: 鼠标向上移动 50 像素

ac.up(50)

📌 down()

此方法用于使鼠标相对当前位置向下移动若干距离。

参数名称 类型 默认值 说明
pixel int 必填 鼠标移动的像素值
返回类型 说明
ActionChains 动作链对象本身

示例:

ac.down(50)

📌 left()

此方法用于使鼠标相对当前位置向左移动若干距离。

参数名称 类型 默认值 说明
pixel int 必填 鼠标移动的像素值
返回类型 说明
ActionChains 动作链对象本身

示例:

ac.left(50)

此方法用于使鼠标相对当前位置向右移动若干距离。

参数名称 类型 默认值 说明
pixel int 必填 鼠标移动的像素值
返回类型 说明
ActionChains 动作链对象本身

示例:

ac.right(50)

✅️ 鼠标按键

📌 click()

此方法用于单击鼠标左键,单击前可先移动到元素上。

参数名称 类型 默认值 说明
on_ele ChromiumElement
str
None 要点击的元素对象或文本定位符
返回类型 说明
ActionChains 动作链对象本身

示例:

ac.click('#div1')

📌 r_click()

此方法用于单击鼠标右键,单击前可先移动到元素上。

参数名称 类型 默认值 说明
on_ele ChromiumElement
str
None 要点击的元素对象或文本定位符
返回类型 说明
ActionChains 动作链对象本身

示例:

ac.r_click('#div1')

📌 m_click()

此方法用于单击鼠标中键,单击前可先移动到元素上。

参数名称 类型 默认值 说明
on_ele ChromiumElement
str
None 要点击的元素对象或文本定位符
返回类型 说明
ActionChains 动作链对象本身

示例:

ac.m_click('#div1')

📌 db_click()

此方法用于双击鼠标左键,双击前可先移动到元素上。

参数名称 类型 默认值 说明
on_ele ChromiumElement
str
None 要点击的元素对象或文本定位符
返回类型 说明
ActionChains 动作链对象本身

📌 hold()

此方法用于按住鼠标左键不放,按住前可先移动到元素上。

参数名称 类型 默认值 说明
on_ele ChromiumElement
str
None 要按住的元素对象或文本定位符
返回类型 说明
ActionChains 动作链对象本身

示例:

ac.hold('#div1')

📌 release()

此方法用于释放鼠标左键,释放前可先移动到元素上。

参数名称 类型 默认值 说明
on_ele ChromiumElement
str
None 要释放的元素对象或文本定位符
返回类型 说明
ActionChains 动作链对象本身

示例: 移动到某元素上然后释放鼠标左键

ac.release('#div1')

📌 r_hold()

此方法用于按住鼠标右键不放,按住前可先移动到元素上。

参数名称 类型 默认值 说明
on_ele ChromiumElement
str
None 要按住的元素对象或文本定位符
返回类型 说明
ActionChains 动作链对象本身

📌 r_release()

此方法用于释放鼠标右键,释放前可先移动到元素上。

参数名称 类型 默认值 说明
on_ele ChromiumElement
str
None 要释放的元素对象或文本定位符
返回类型 说明
ActionChains 动作链对象本身

📌 m_hold()

此方法用于按住鼠标中键不放,按住前可先移动到元素上。

参数名称 类型 默认值 说明
on_ele ChromiumElement
str
None 要按住的元素对象或文本定位符
返回类型 说明
ActionChains 动作链对象本身

📌 m_release()

此方法用于释放鼠标中键,释放前可先移动到元素上。

参数名称 类型 默认值 说明
on_ele ChromiumElement
str
None 要释放的元素对象或文本定位符
类型 说明
ActionChains 动作链对象本身

✅️ 滚动滚轮

📌 scroll()

此方法用于滚动鼠标滚轮,滚动前可先移动到元素上。

参数名称 类型 默认值 说明
delta_x int 0 滚轮 x 轴变化值,向右为正,向左为负
delta_y str 0 滚轮 y 轴变化值,向下为正,向上为负
on_ele ChromiumElement
str
None 要滚动的元素对象或文本定位符
返回类型 说明
ActionChains 动作链对象本身

✅️ 键盘按键

📌 key_down()

此方法用于按下键盘按键,特殊字符见 Keys。

参数名称 类型 默认值 说明
key str 必填 按键键值
返回类型 说明
ActionChains 动作链对象本身

示例: 按下 ctrl 键

from DrissionPage.common import Keys

ac.key_down(Keys.CTRL)

📌 key_up()

此方法用于提起键盘按键,特殊字符见 Keys。

参数名称 类型 默认值 说明
key str 必填 按键键值
返回类型 说明
ActionChains 动作链对象本身

示例: 提起 ctrl 键

from DrissionPage.common import Keys

ac.key_up(Keys.CTRL)

📌 type()

此方法用于输入一段或多段文本。也可输入组合键。

参数名称 类型 默认值 说明
text str
list
tuple
必填 要输入的文本或按键,多段文本或组合键可用listtuple传入
返回类型 说明
ActionChains 动作链对象本身

示例:

# 键入一段文本
ac.type('text')

# 键入多段文本
ac.type(('ab', 'cd'))

# 光标向左移动一位再键入文本
ac.type((Keys.LEFT, 'abc'))

✅️ 等待

📌 wait()

此方法用于在动作链中插入停顿。

参数名称 类型 默认值 说明
second float 必填 等待秒数
返回类型 说明
ActionChains 动作链对象本身

示例: 停顿 3 秒

ac.wait(3)

✅️ 示例

📌 模拟输入 ctrl+a

from DrissionPage import ChromiumPage
from DrissionPage.common import Keys, ActionChains

# 创建页面
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)

链式写法:

ac.click('tag:input').key_down(Keys.CTRL).type('a').key_up(Keys.CTRL)

📌 拖拽元素

把一个元素向右拖拽 300 像素:

from DrissionPage import ChromiumPage
from DrissionPage.common import ActionChains

# 创建页面
page = ChromiumPage()
# 创建动作链对象
ac = ActionChains(page)

# 左键按住元素
ac.hold('#div1')
# 向右移动鼠标300像素
ac.right(300)
# 释放左键
ac.release()

把一个元素拖拽到另一个元素上:

ac.hold('#div1').release('#div2')