您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
自动识别验证码并填充“数字暗号”输入框
// ==UserScript==
// @name 数字暗号版
// @namespace http://tampermonkey.net/
// @version 0.6
// @description 自动识别验证码并填充“数字暗号”输入框
// @match *://*/*
// @grant GM_xmlhttpRequest
// @license MIT
// ==/UserScript==
(function () {
'use strict';
const ocrApi = "http://101.126.130.186:5001/predict";
// 延迟函数
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
// 找验证码图片
function findCaptchaElement() {
return document.querySelector(".login-code img");
}
// 找输入框
function findInputBox() {
return document.querySelector("input[placeholder='数字暗号']");
}
// OCR识别并填充
function recognizeFromImg(imgElement) {
if (!imgElement) return;
let imgBase64 = "";
if (imgElement.src.startsWith("data:image")) {
imgBase64 = imgElement.src.split(",")[1];
} else {
console.warn("当前图片不是base64格式");
return;
}
GM_xmlhttpRequest({
method: "POST",
url: ocrApi,
headers: { "Content-Type": "application/json" },
data: JSON.stringify({ image: imgBase64 }),
onload: function (resp) {
try {
const result = JSON.parse(resp.responseText);
console.log("OCR返回:", result);
if (result.success && result.data) {
let inputBox = findInputBox();
if (inputBox) {
inputBox.value = result.data;
inputBox.dispatchEvent(new Event("input", { bubbles: true }));
console.log("验证码已填充:", result.data);
} else {
console.warn("未找到输入框");
}
} else {
console.warn("识别失败:", result.msg);
}
} catch (e) {
console.error("解析OCR结果失败:", e);
}
},
onerror: function (err) {
console.error("OCR请求出错:", err);
}
});
}
// 主逻辑:等待验证码图片出现
async function run() {
for (let i = 0; i < 20; i++) {
const captchaImg = findCaptchaElement();
if (captchaImg) {
console.log("找到验证码图片,开始识别...");
recognizeFromImg(captchaImg);
// 监听图片src变化(刷新验证码时自动识别)
const observer = new MutationObserver(() => {
console.log("验证码刷新,重新识别...");
recognizeFromImg(captchaImg);
});
observer.observe(captchaImg, { attributes: true, attributeFilter: ["src"] });
return;
}
await sleep(500);
}
console.warn("超时:未找到验证码图片");
}
window.addEventListener("load", run);
})();