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 秒