//嵌入js 滑块脚本
function start() {
let js_time1 = null;
let time2 = null;
let checkSlideFlag = false;
let getImagesPollingNumber = 0;
let slipperPollingNumber = 0;
let retryRemoveNumber = 0;
let slipperBtn = "";
async function getslipperBtn() {
console.log("getslipperBtn", checkSlideFlag);
if (checkSlideFlag) {
return;
}
try {
slipperBtn = document.querySelector(".secsdk-captcha-drag-icon");
} catch {
slipperBtn = null;
}
if (slipperBtn) {
checkSlideFlag = true;
console.log("获取到滑块元素");
await getimage();
} else {
slipperPollingNumber++;
if (slipperPollingNumber > 10) {
console.log("未获取到滑块元素", slipperPollingNumber);
return;
}
}
}
//检测是否要刷新滑块图片
function checkMsg() {
let msgDom = "";
try {
msgDom = document.querySelectorAll(".sc-htoDjs");
} catch {
msgDom = null;
}
if (msgDom) {
// let errDom = msgDom[0].innerHTML;
let errDom = msgDom[0];
if (errDom && RegExp(/网络故障/).test(errDom.innerHTML)) {
console.log(RegExp(/网络故障/).test(errDom.innerHTML), "innerHTML");
setTimeout(() => {
document.querySelectorAll(".secsdk_captcha_refresh")[0].click();
}, 2000);
}
}
}
//获取滑块图片
async function getimage() {
let file = "";
let sub_file = "";
try {
file = document.getElementById("captcha-verify-image").attributes["src"]
.nodeValue;
sub_file = document.getElementsByClassName("captcha_verify_img_slide")[0]
.attributes["src"].nodeValue;
} catch {
file = "";
sub_file = "";
}
if (file && sub_file) {
console.log("获取图片成功", new Date().getTime(), file, sub_file);
let list = null;
try {
list = [{x:120,y:220}] // 需要动态获取图片坐标
} catch {
list = null;
if (retryRemoveNumber < 5) {
setTimeout(async () => {
await getimage();
console.log(`重试次数${retryRemoveNumber}`);
}, 2000);
}
}
if (!list) {
console.log("获取坐标失败");
}
let startPosition = slipperBtn.getBoundingClientRect();
let ratio = 1.0;
var img_url = file + "?" + Date.parse(new Date());
// 创建对象
var img = new Image();
// 改变图片的src
img.src = img_url;
// 加载完成执行
img.onload = () => {
// 打印
console.log("img-width:", img.width);
let imgWidth = img.width;
let domWidth = document.querySelector(
"#captcha-verify-image"
).offsetWidth;
ratio = (domWidth / imgWidth).toFixed(2);
console.log("domWidth", domWidth, imgWidth, ratio);
console.log(
list[0].x,
list[0].x * ratio - startPosition.width / 2,
"移动的x轴"
);
const clientX = startPosition.left;
const clientY = startPosition.top + startPosition.height / 2;
console.log(clientX, clientY, "滑块开始位置");
setTimeout(() => {
dragandDrop(
slipperBtn,
clientX,
clientY,
list[0].x * ratio - startPosition.width / 2
);
}, 2000);
};
} else {
console.log("getImagesPollingNumber", getImagesPollingNumber);
getImagesPollingNumber++;
if (getImagesPollingNumber > 10) {
return;
}
setTimeout(async () => {
await getimage();
console.log(1234);
}, 2000);
}
}
//模拟移动滑块
function dragandDrop(elem, clientX, clientY, distance) {
console.log("dragandDrop", new Date().getTime());
var k = 0;
var interval;
iME(elem, "mousedown", 0, 0, clientX, clientY);
interval = setInterval(function () {
k++;
iter(k);
console.log("dragandDrop", k, distance);
if (k > distance) {
console.log("mouseup");
clearInterval(interval);
iME(elem, "mouseup", clientX + k, clientY, 220 + k, 400);
}
}, 10);
function iter(y) {
iME(elem, "mousemove", clientX + y, clientY, clientX + y, clientY);
}
function iME(obj, event, screenXArg, screenYArg, clientXArg, clientYArg) {
var mousemove = document.createEvent("MouseEvent");
mousemove.initMouseEvent(
event,
true,
true,
window,
0,
screenXArg,
screenYArg,
clientXArg,
clientYArg,
0,
0,
0,
0,
0,
null
);
obj.dispatchEvent(mousemove);
}
// setTimeout(() => {
// console.log('滑动结束');
// checkSlideFlag = false;
// }, 3000);
}
//获取滑块位置属性
async function checkSlide() {
// 滑动滑块
const slideDom =
(await waitStart(() => {
return document.querySelector(".nc_iconfont");
})) ||
(await waitStart(() => {
return document.querySelector(".btn_slide");
}));
const slidetounlockDom =
(await waitStart(() => {
return document.querySelector(".slidetounlock");
})) ||
(await waitStart(() => {
return document.querySelector(".scale_text");
}));
if (slideDom && slidetounlockDom) {
const slideDomInfo = slideDom.getBoundingClientRect();
const slidetounlockDomInfo = slidetounlockDom.getBoundingClientRect();
const distance = slidetounlockDomInfo.width - slideDomInfo.width;
const clientX = slideDomInfo.left;
const clientY = slideDomInfo.top + slideDomInfo.height / 2;
dragandDrop(slideDom, clientX, clientY, distance);
}
}
//轮询获取滑块
js_time1 = setInterval(() => {
getslipperBtn();
}, 3000);
//轮询是否是网络错误而没有获取到滑块
time2 = setInterval(() => {
checkMsg();
}, 4000);
}
自动模拟滑块
最新推荐文章于 2023-07-19 17:45:45 发布