Tampermonkey脚本改进:自动化网页点击、数值计算及结果输入
本文探讨如何优化tampermonkey脚本,实现网页元素自动化操作和数值计算,解决自动点击、数据提取、计算及结果输入的问题。目标是编写一个更稳健的脚本,自动点击“激励”按钮,获取“当前效率”值,代入公式(100 – 当前效率) × 344计算,并将结果输入指定输入框,最后点击“确定”按钮,并循环此过程直至所有“当前效率”值达到100。
原脚本的主要问题在于选择器过于依赖页面绝对路径、缺乏等待机制以及错误处理。改进后的脚本应遵循以下原则:
1. 可靠的选择器: 避免使用脆弱的绝对路径选择器(/html/body/…)。 应使用css选择器,结合元素的类名(class)、ID(id)或其他独特的属性,提高选择器的鲁棒性。例如,document.querySelector(‘.incentive-button’) 或 document.getElementById(‘efficiency-value’)。
2. 等待机制: 在点击“激励”按钮后,页面需要时间更新“当前效率”值。 应使用setTimeout函数或await (若使用async/await) 添加延迟,确保数据更新后再进行后续操作,避免读取旧值导致计算错误。 例如:
specificButton.click(); setTimeout(() => { // 获取更新后的效率值 }, 500); // 延迟500毫秒
3. 错误处理: 脚本应包含错误处理,例如检查元素是否存在 (if (element) { … }),数值转换是否成功 (parseInt(value),并检查返回值是否为NaN)。 处理异常情况,避免脚本因错误而中断。
4. 循环控制: 使用while循环,并设置终止条件(所有“当前效率”值为100)。 循环内应包含点击、数据提取、计算和结果输入等步骤。 可以使用一个数组或其他数据结构存储所有“当前效率”值,方便检查终止条件。
改进后的脚本结构示例 (需根据实际页面元素调整选择器):
(function() { 'use strict'; async function automateProcess() { const incentiveButton = document.querySelector('.incentive-button'); const efficiencyElement = document.querySelector('#efficiency-value'); const inputField = document.querySelector('#result-input'); const confirmButton = document.querySelector('.confirm-button'); while (true) { if (!incentiveButton || !efficiencyElement || !inputField || !confirmButton) { console.error("元素未找到!"); break; // 退出循环 } incentiveButton.click(); await new Promise(resolve => setTimeout(resolve, 500)); // 等待页面更新 const efficiency = parseInt(efficiencyElement.textContent); if (isNaN(efficiency)) { console.error("无法解析效率值!"); break; // 退出循环 } if (efficiency === 100) { break; // 退出循环 } const result = (100 - efficiency) * 344; inputField.value = result; confirmButton.click(); await new Promise(resolve => setTimeout(resolve, 500)); // 等待页面更新 } } automateProcess(); })();
记住,以上代码仅为示例,实际应用中需要根据目标网页的具体HTML结构调整选择器。 良好的错误处理和对页面结构变化的容错能力是编写稳定脚本的关键。