您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
因域名到期,不再开放公开 api,本接口仅供个人内网使用,如需使用,请自行搭建验证码识别服务Find an img with src containing "api-uaa/v1/validate/code", get Base64, and send it for captcha code
当前为
// ==UserScript== // @name 自动提取政和验证码-x // @namespace http://tampermonkey.net/ // @version 1.1 // @description 因域名到期,不再开放公开 api,本接口仅供个人内网使用,如需使用,请自行搭建验证码识别服务Find an img with src containing "api-uaa/v1/validate/code", get Base64, and send it for captcha code // @match *://*/* // @grant GM_xmlhttpRequest // @license Apache-2.0 // ==/UserScript== (function() { 'use strict'; // 在页面加载完成后执行脚本 window.addEventListener('load', function() { console.log("页面已加载,开始自动提取验证码"); // 查找所有 img 标签 var imgElements = document.getElementsByTagName('img'); // 遍历所有 img 标签 for (let imgElement of imgElements) { // 检查 img 标签的 src 属性是否包含指定的 URL 部分 if (imgElement.src.includes('api-uaa/v1/validate/code')) { console.log("图片地址:", imgElement.src); // 创建一个 canvas 元素 var canvas = document.createElement('canvas'); var context = canvas.getContext('2d'); // 确保 canvas 的尺寸与图片相同 canvas.width = imgElement.naturalWidth; canvas.height = imgElement.naturalHeight; // 图片加载完成后将其绘制到 canvas 上 imgElement.onload = async function() { imgElement.setAttribute('crossOrigin', 'anonymous'); context.drawImage(imgElement, 0, 0); // 这里不指定格式,自动使用图片的原格式 const imgBase64 = canvas.toDataURL(); console.log("图片imgBase64:", imgBase64); //.replace(/^data:image\/(png|jpg|gif);base64,/, ''); // 调用获取验证码的函数 await getCaptchaCode(imgBase64, imgElement); }; // 如果图片已经加载完成,立即处理 if (imgElement.complete) { imgElement.onload(); } // 找到匹配的图片后退出循环 break; } } }); // 定义获取验证码的函数 async function getCaptchaCode(imageBase64, imgElement) { try { var formData = new FormData(); formData.append("image", imageBase64); GM_xmlhttpRequest({ method: "POST", url: "http://172.30.30.66:9898/ocr", headers: { "accept": "application/json", "User-Agent": navigator.userAgent }, data: formData, onload: function(response) { const jsonResponse = JSON.parse(response.responseText); // 检查 code 是否为 200 if (jsonResponse.code === 200) { var inputElement = findClosestInput(imgElement); if (inputElement) { inputElement.value = jsonResponse.data; // 使用 data 字段的值 // 手动触发 input 事件,以便页面检测到输入的变化 var event = new Event('input', { bubbles: true }); inputElement.dispatchEvent(event); // 如果还有其他事件检测输入,可以一并触发 var changeEvent = new Event('change', { bubbles: true }); inputElement.dispatchEvent(changeEvent); console.log('Captcha code filled into input:', jsonResponse.data); } else { console.log('No input element found in parent elements.'); } } else { console.error('API returned an error:', jsonResponse.message); } }, onerror: function(error) { console.error('Error:', error); } }); } catch(error) { console.error("Failed to get captcha code:", error); } } // 定义从 img 元素开始逐级向上查找最近的 input 元素的函数 function findClosestInput(element) { while (element) { element = element.parentElement; if (!element) break; var inputs = element.getElementsByTagName('input'); if (inputs.length > 0) { return inputs[inputs.length - 1]; // 返回找到的最后一个 input 元素 } } return null; } })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址