首页 / DrissionPage 入门教程 / 鼠标与键盘操作

DrissionPage 入门教程

鼠标与键盘操作

本教程共 42 篇 · 第 27 篇 · 更新于 2026-07-29 · 约 5 分钟阅读

DrissionPageDrissionPage 入门教程鼠标操作键盘操作右键双击悬停组合键

27. 鼠标与键盘操作

本节目标:掌握元素的鼠标和键盘高级操作,学完能处理右键菜单、双击、悬停触发、组合键等复杂交互场景。

鼠标操作

右键点击 click.right()

click.right() 用于右键单击元素,触发上下文菜单。

from DrissionPage import Chromium

tab = Chromium().latest_tab
tab.get('https://www.baidu.com')

# 右键点击元素
ele = tab.ele('t:a')
ele.click.right()

中键点击 click.middle()

click.middle() 用于中键单击元素。常用于在新标签页打开链接。

# 中键点击链接,在新标签页打开
tab = ele.click.middle(get_tab=True)
print(tab.title)  # 新标签页的标题

多次点击 click.multi()

click.multi() 用于左键多次点击元素,默认双击。

# 双击元素
ele.click.multi()

# 三连击
ele.click.multi(times=3)

偏移点击 click.at()

click.at() 可以点击元素内的指定位置,或元素附近的区域。偏移量相对于元素左上角。

# 点击元素中点(和 click() 一样但没有重试功能)
ele.click.at()

# 点击元素右上方 50*50 的位置
ele.click.at(50, -50)

# 只在 x 方向偏移,y 保持中点
ele.click.at(offset_x=50)

# 指定鼠标按键和点击次数
ele.click.at(50, 50, button='right', count=2)
Note

click() 的区别:前者没有自动重试和等待功能,但更精确。适合确定元素可见时的精确点击。

悬停 hover()

hover() 用于鼠标悬停在元素上,触发 hover 效果。

# 悬停在元素中点
ele.hover()

# 悬停在元素内指定偏移位置
ele.hover(50, -30)

拖拽 drag() / drag_to()

拖拽操作在 §22 也有涉及,这里补充更多细节。

# 向右下方拖拽 50*50 像素,用时 1 秒
ele.drag(50, 50, 1)

# 拖拽到另一个元素上
ele1 = tab.ele('#draggable')
ele2 = tab.ele('#target')
ele1.drag_to(ele2)

# 拖拽到坐标
ele1.drag_to((300, 400))

键盘操作

基本输入

如 §22 所述,input() 是最常用的键盘输入方法。

ele.input('DrissionPage')

组合键输入

使用 Keys 类可以输入组合键。

from DrissionPage.common import Keys

# 单个特殊键
ele.input(Keys.ENTER)       # 回车
ele.input(Keys.TAB)         # Tab
ele.input(Keys.ESC)         # Escape
ele.input(Keys.BACKSPACE)   # 退格
ele.input(Keys.DELETE)      # 删除
ele.input(Keys.SPACE)       # 空格

# 组合键
ele.input(Keys.CTRL_A)      # Ctrl+A 全选
ele.input(Keys.CTRL_C)      # Ctrl+C 复制
ele.input(Keys.CTRL_V)      # Ctrl+V 粘贴

# 自定义组合键(用元组)
ele.input((Keys.CTRL, 'a'))       # Ctrl+A
ele.input((Keys.CTRL, Keys.DEL))  # Ctrl+Delete

# 多段输入(用列表)
ele.input(['hello', Keys.TAB, 'world'])

常用 Keys 常量

# 字母和数字直接用字符串
ele.input('a')
ele.input('1')

# 功能键
Keys.ENTER
Keys.TAB
Keys.ESC
Keys.BACKSPACE
Keys.DELETE
Keys.SPACE
Keys.UP        # 上箭头
Keys.DOWN      # 下箭头
Keys.LEFT      # 左箭头
Keys.RIGHT     # 右箭头
Keys.HOME
Keys.END
Keys.PAGE_UP
Keys.PAGE_DOWN

# 修饰键
Keys.CTRL
Keys.SHIFT
Keys.ALT

# 组合快捷键
Keys.CTRL_A    # 全选
Keys.CTRL_C    # 复制
Keys.CTRL_V    # 粘贴
Keys.CTRL_X    # 剪切
Keys.CTRL_Z    # 撤销
Keys.CTRL_Y    # 重做

输入并回车

# 方式一:在字符串末尾加 \n
ele.input('DrissionPage\n')

# 方式二:使用 enter 参数
ele.input('DrissionPage', enter=True)

# 方式三:用 Keys.ENTER
ele.input('DrissionPage')
ele.input(Keys.ENTER)

模拟逐字输入

input() 默认直接填入整段文本。如果需要模拟人类逐字输入(带随机延迟),可以用动作链的 type() 方法。

# 动作链的 type() 逐个字符按下
tab.actions.click('#kw').type('DrissionPage')

综合示例:复制粘贴操作

from DrissionPage import Chromium
from DrissionPage.common import Keys

tab = Chromium().latest_tab
tab.get('https://www.baidu.com')

# 在输入框中输入内容
input_box = tab.ele('#kw')
input_box.input('test')

# 全选
input_box.input(Keys.CTRL_A)

# 复制
input_box.input(Keys.CTRL_C)

# 清空
input_box.input((Keys.CTRL, 'a', Keys.DEL))

# 粘贴
input_box.input(Keys.CTRL_V)

综合示例:右键菜单操作

# 右键点击链接
link = tab.ele('t:a')
link.click.right()

# 等待右键菜单出现
tab.wait.ele_displayed('.context-menu')

# 点击菜单中的"在新标签页打开"
tab.ele('text:在新标签页打开').click()

综合示例:悬停展开菜单

# 悬停在导航菜单上
nav = tab.ele('#nav')
nav.hover()

# 等待子菜单出现
tab.wait.ele_displayed('.sub-menu')

# 点击子菜单项
tab.ele('.sub-menu > .item@text=产品').click()

综合示例:拖拽排序

# 拖拽元素到目标位置
item = tab.ele('#item-1')
target = tab.ele('#item-5')
item.drag_to(target)

# 或者用坐标拖拽
item.drag(0, 120, 0.5)  # 向下拖拽 120 像素,用时 0.5 秒