适应动态变化的 iframe 选择器,自动查找并点击 iframe 内的确认按钮
// ==UserScript==
// @name 自动点击确认按钮(动态选择器版)
// @namespace http://tampermonkey.net/
// @version 2.1
// @description 适应动态变化的 iframe 选择器,自动查找并点击 iframe 内的确认按钮
// @author You
// @match https://onlinenew.enetedu.com/gdlnnu/Common/VideoPlayHFiveAli*
// @match https://onlinenew.enetedu.com/gdlnnu/Common/VideoPlayChoiceHFiveAli*
// @grant none
// ==/UserScript==
(function() {
'use strict';
let lastLogTime = 0;
const logInterval = 30000;
// 打印调试信息,限制日志频率为每 30 秒一次
function debugLog(message) {
const now = new Date().getTime();
if (now - lastLogTime > logInterval) {
console.log(`[DEBUG] ${message}`);
lastLogTime = now;
}
}
// 查找并点击确认按钮
function clickConfirmButton(iframeDocument) {
debugLog('尝试找到确认按钮...');
let confirmButton = iframeDocument.querySelector('#cdnad_box > div > div > button');
if (confirmButton) {
debugLog('找到确认按钮');
let event = new MouseEvent('click', { bubbles: true });
confirmButton.dispatchEvent(event); // 模拟点击
debugLog('已点击确认按钮');
} else {
debugLog('未找到确认按钮,稍后重试...');
}
}
// 查找并处理所有符合条件的 iframe
function checkAllIframes() {
let iframes = document.querySelectorAll('iframe'); // 查找所有 iframe
debugLog(`页面上找到 ${iframes.length} 个 iframe`);
iframes.forEach(iframe => {
let iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
if (iframeDocument) {
let confirmButton = iframeDocument.querySelector('#cdnad_box > div > div > button');
if (confirmButton) {
debugLog('在 iframe 中找到确认按钮,点击它...');
clickConfirmButton(iframeDocument);
}
}
});
}
// 防抖机制:限制触发频率
let debounceTimeout;
function debounce(func, delay) {
clearTimeout(debounceTimeout);
debounceTimeout = setTimeout(func, delay);
}
// 监听 DOM 变化,动态加载时触发
function observeDOMChanges() {
const observer = new MutationObserver(() => {
// 在 DOM 变化时使用防抖机制,防止频繁触发
debounce(checkAllIframes, 500); // 500 毫秒防抖
});
observer.observe(document.body, { childList: true, subtree: true });
}
// 脚本初始化
function init() {
debugLog('脚本已启动,开始查找 iframe 并点击确认按钮...');
checkAllIframes(); // 初次检查所有 iframe
setInterval(checkAllIframes, 60000); // 每 1 分钟检查一次
observeDOMChanges(); // 监听 DOM 变化,处理动态加载的 iframe
}
init(); // 执行初始化函数
})();