自动模拟滑块

//嵌入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);
}

猜你喜欢

转载自blog.csdn.net/qq_42048638/article/details/129102580