Selenium中无法使用右键点击,如何模拟菜单键/应用键?
如何在Selenium中模拟菜单键(应用键)打开下拉菜单
遇到右键点击被策略限制的情况确实挺棘手的,不过我们可以直接模拟菜单键的按键操作来绕开这个问题,下面给你几个可行的方案:
方案一:直接发送菜单键的Unicode字符
菜单键对应的Unicode编码是\uE05D,你可以先让目标元素获得焦点,再通过send_keys方法发送这个字符:
# 定位目标元素 element = driver.find_element(By.ID, "target-element") # 让元素获得焦点(点击或调用focus方法) element.click() # 发送菜单键触发下拉菜单 element.send_keys("\uE05D")
这个方法在Chrome和Firefox中兼容性都不错,操作起来也简单。
方案二:使用ActionChains发送键码
菜单键的Windows键盘键码是十进制93(十六进制0x5D),你可以通过Keys.chr()生成对应键值,再结合ActionChains执行操作:
from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.keys import Keys element = driver.find_element(By.ID, "target-element") actions = ActionChains(driver) # 移动到元素上、聚焦,再发送菜单键 actions.move_to_element(element).click().send_keys(Keys.chr(0x5D)).perform()
这个方式适合需要先准确定位元素,再触发菜单的场景。
方案三:用JavaScript模拟按键事件
如果上面两种方法都没效果,可以尝试通过JavaScript直接给元素派发键盘事件:
element = driver.find_element(By.ID, "target-element") # 构造菜单键的keydown事件脚本 script = """ const menuKeyEvent = new KeyboardEvent('keydown', { keyCode: 93, bubbles: true, cancelable: true }); arguments[0].dispatchEvent(menuKeyEvent); """ # 先让元素聚焦 element.click() # 执行脚本触发菜单 driver.execute_script(script, element)
额外注意事项
- 如果页面通过
oncontextmenu事件禁用了右键菜单,可能菜单键也会被拦截,这时候可以先通过JS解除限制:driver.execute_script("document.oncontextmenu = null;") - 不同操作系统的键逻辑略有差异,上述方案在Windows和Linux环境下基本通用,Mac环境可能需要调整键码适配系统快捷键。
内容的提问来源于stack exchange,提问作者Mrk
相关产品推荐
相关产品推荐

