自动跳转登录页并传递凭据的JS脚本运行失效,该如何调整修复?
脚本问题原因及修复方案
核心问题
你写的脚本存在两个致命问题导致无法运行:
- 执行逻辑顺序错误:在第一个页面点击跳转按钮后,当前页面的所有JS代码会直接失效,不可能继续在跳转到的第二个页面运行,原脚本把两个页面的逻辑写在同一个上下文里,完全无法生效
- 语法错误:JS 中
if判断的条件必须用括号包裹,且不存在then关键字,原代码的语法不符合规范,本身就会直接报错
修复方案
如果你是用 Tampermonkey(油猴)这类用户脚本管理器运行代码,需要先匹配两个页面的地址,再根据当前所处页面执行对应逻辑,示例代码如下:
// 根据当前页面地址执行对应操作 const firstPageUrl = "替换为你第一个页面的实际URL"; const secondPageUrl = "https://example.com/secondpage"; if (window.location.href === firstPageUrl) { // 第一页逻辑:点击跳转登录按钮 document.querySelector(".click_hereTo_login")?.click(); } else if (window.location.href === secondPageUrl) { // 第二页逻辑:等页面元素加载完成后填写表单提交 window.addEventListener("DOMContentLoaded", () => { document.getElementById("id").value = "12322"; document.getElementById("password").value = "4444"; document.querySelector(".login")?.click(); }); }
可选优化
如果第二页的表单元素是动态渲染的,DOM加载完成时还没生成,可以加元素等待逻辑避免报错:
// 封装元素等待方法 function waitForElement(selector) { return new Promise((resolve) => { if (document.querySelector(selector)) { return resolve(document.querySelector(selector)); } const observer = new MutationObserver(() => { const target = document.querySelector(selector); if (target) { observer.disconnect(); resolve(target); } }); observer.observe(document.body, { childList: true, subtree: true }); }); } // 第二页调用示例 if (window.location.href === secondPageUrl) { waitForElement("#id").then(() => { document.getElementById("id").value = "12322"; document.getElementById("password").value = "4444"; document.querySelector(".login")?.click(); }); }
内容的提问来源于stack exchange,提问作者MasterPlayer
相关产品推荐
相关产品推荐

