Selenium驱动Chrome时如何通过代码禁用F1、F11默认功能
Chrome环境下禁用F1、F11按键默认行为的实现方案
页面端JS拦截(通用方案)
直接在目标页面加载最早期绑定keydown事件,在捕获阶段拦截对应按键,阻止默认行为触发即可,该方案对所有运行在页面内的自动化脚本生效。
// 拦截逻辑需要尽可能早执行,不要等DOM加载完成再绑定,避免漏过初始阶段的按键事件 document.addEventListener('keydown', (e) => { // F1对应键码112,F11对应键码122 if ([112, 122].includes(e.keyCode)) { e.preventDefault(); e.returnValue = false; // 兼容旧版Chrome // 此处可添加自定义逻辑,触发你的自动化脚本对应流程 } }, true); // 第三个参数设为true,在事件捕获阶段触发,优先级高于页面其他按键事件
关键注意点
- 必须在
keydown阶段拦截,Chrome的F1打开帮助页、F11切换全屏/剧场模式的逻辑都在该阶段触发,等到keyup阶段再阻止已经失效 - 事件绑定要加
true启用捕获阶段触发,避免页面内其他脚本绑定的按键事件阻止冒泡,导致拦截逻辑不生效 - 拦截逻辑仅对当前注入脚本的页面生效,不会影响Chrome其他标签页或浏览器全局功能
自动化框架适配方案
如果你是通过Puppeteer、Playwright、Selenium这类自动化工具控制Chrome,可以不用修改站点业务代码,直接通过框架能力把拦截脚本提前注入到页面中:
- Playwright/Puppeteer:使用
page.evaluateOnNewDocument方法传入上述拦截代码,框架会在每个页面加载、所有业务脚本运行前自动执行拦截逻辑,不会出现漏拦截 - Selenium:通过CDP命令调用
Page.addScriptToEvaluateOnNewDocument能力注入拦截脚本,效果和上述方案一致;无头模式下F11的剧场模式默认不会触发,但F1的跳转行为仍需拦截
补充说明
该方案仅建议在你自己控制的自动化运行环境中使用,如果是面向普通用户的公开站点,拦截默认功能键会违背用户使用习惯,造成操作困扰。
内容的提问来源于stack exchange,提问作者Shmulik b
相关产品推荐
相关产品推荐

