寻求绕过YouTube限制自动点击「跳过广告」按钮的JS解决方案
YouTube自动跳过广告按钮失效后的解决方案思路
近期YouTube加大了对广告拦截工具的打击力度,从2024年1月17日起,所有自动点击「跳过广告」按钮的方法均被完全禁用。以下是我尝试过但无效的方案,以及可行的解决思路参考:
已尝试但无效的方案
- 直接模拟按钮点击(含原生
click()和手动触发MouseEvent):
const click = (clazz) => { const buttons = document.getElementsByClassName(clazz); for (const button of buttons) { console.log(button) button.click() button.dispatchEvent( new MouseEvent('click') ); } }; click("ytp-ad-skip-button-modern")
- 模拟
mousedown/up、pointerdown/up事件的等效代码,无效果。 - 模拟鼠标悬停(仅改变按钮透明度,无法触发跳过):
const mouseover = (clazz) => { const buttons = document.getElementsByClassName(clazz); for (const button of buttons) { console.log(button) button.dispatchEvent( new MouseEvent('mouseover') ); } }; mouseover('ytp-ad-skip-button-modern')
可行思路参考
- 模拟完整用户交互链路
YouTube可能验证点击的完整操作流程,而非单一事件。按真实用户操作顺序触发事件,并添加微小延迟模拟人类操作间隔:
const simulateFullClick = (element) => { const events = ['mouseover', 'mousedown', 'mouseup', 'click']; events.forEach((eventType, index) => { setTimeout(() => { element.dispatchEvent(new MouseEvent(eventType, { bubbles: true, cancelable: true, view: window })); }, index * 150); }); }; const skipButtons = document.getElementsByClassName('ytp-ad-skip-button-modern'); for (const btn of skipButtons) { simulateFullClick(btn); }
跳过按钮检测,直接操控播放状态
跳过广告本质是切换到正片播放,可尝试逆向YouTube前端代码,找到控制播放的核心实例(如ytplayer相关对象),调用其内部的跳过广告方法。此方法需跟进YouTube版本更新,存在失效风险。结合鼠标位置模拟真实点击
部分检测会验证点击时鼠标是否在按钮区域内,先将鼠标移动到按钮中心再触发点击:
const moveMouseToElement = (element) => { const rect = element.getBoundingClientRect(); const x = rect.left + rect.width / 2; const y = rect.top + rect.height / 2; const moveEvent = new MouseEvent('mousemove', { clientX: x, clientY: y, bubbles: true, view: window }); document.dispatchEvent(moveEvent); }; const skipBtn = document.querySelector('.ytp-ad-skip-button-modern'); if (skipBtn) { moveMouseToElement(skipBtn); setTimeout(() => simulateFullClick(skipBtn), 200); }
- 使用浏览器调试API模拟点击
若基于Chrome扩展开发,可使用chrome.debuggerAPI从浏览器层面触发真实点击,这种方式的事件更难被检测,但需要处理扩展权限和调试API的使用逻辑。
内容的提问来源于stack exchange,提问作者Pet'li
相关产品推荐
相关产品推荐

