Greasy Fork is available in English.
通过知网的滑动验证码
// ==UserScript== // @name Pass CNKI verification code // @namespace http://tampermonkey.net/ // @version 2024-11-08 // @description 通过知网的滑动验证码 // @author You // @match https://kns.cnki.net/* // @icon https://www.google.com/s2/favicons?sz=64&domain=cnki.net // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; function bezierPath(start, end, control1, control2, steps) { const path = []; for (let t = 0; t <= 1; t += 1 / steps) { const x = (1 - t) ** 3 * start[0] + 3 * (1 - t) ** 2 * t * control1[0] + 3 * (1 - t) * t ** 2 * control2[0] + t ** 3 * end[0]; const y = (1 - t) ** 3 * start[1] + 3 * (1 - t) ** 2 * t * control1[1] + 3 * (1 - t) * t ** 2 * control2[1] + t ** 3 * end[1]; path.push([x + Math.random() * 2 - 1, y + Math.random() * 2 - 1]); } return path; } function simulateSliderMovement(sliderElement, start, end) { const control1 = [start[0] + (end[0] - start[0]) / 4, start[1] - 30]; const control2 = [start[0] + (end[0] - start[0]) * 3 / 4, end[1] + 30]; const path = bezierPath(start, end, control1, control2, 100); // 模拟按下 sliderElement.dispatchEvent(new MouseEvent('mousedown', { clientX: start[0], clientY: start[1], bubbles: true })); // 模拟移动 path.forEach(([x, y], i) => { setTimeout(() => { sliderElement.dispatchEvent(new MouseEvent('mousemove', { clientX: x, clientY: y, bubbles: true })); }, i * 1); // 控制速度 }); // 模拟释放 setTimeout(() => { sliderElement.dispatchEvent(new MouseEvent('mouseup', { clientX: end[0], clientY: end[1], bubbles: true })); }, path.length * 10); } var txt = document.querySelector('.txt').textContent; if (txt == "系统检测到您的访问行为异常,请帮助我们完成 验证"){ // 用法示例 const sliderElement = document.querySelector('.verify-move-block'); var start_x = sliderElement.getBoundingClientRect().x; var offset = document.querySelector('.verify-gap').offsetLeft; simulateSliderMovement(sliderElement, [start_x, 0], [start_x + offset + 30, 0]); } // Your code here... })();