Greasy Fork 支持简体中文。

sbi

这个是公司内容方便员工使用的一个脚本,不涉及任何其他人信息,只是一个方便自己公司同事操作的一个脚本,自动化点击操作

// ==UserScript==
// @name         sbi
// @namespace    http://tampermonkey.net/
// @version      0.31
// @description  这个是公司内容方便员工使用的一个脚本,不涉及任何其他人信息,只是一个方便自己公司同事操作的一个脚本,自动化点击操作
// @author       czt
// @match        https://corp.onlinesbi.sbi/*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        GM_xmlhttpRequest
// @grant        GM_setValue
// @grant        GM_getValue
// @license      AGPL-3.0
// ==/UserScript==

(function () {
  "use strict";
  // 创建容器
    const container = document.createElement("div");
    container.style.position = "fixed";
    container.style.top = "10px";
    container.style.right = "20px";
    container.style.zIndex = 1000;
    container.style.padding = "10px";
    container.style.backgroundColor = "#f1f1f1";
    container.style.border = "1px solid #ccc";
    // 创建输入框
    const input = document.createElement("input");
    input.type = "text";
    input.placeholder = "请输入 ID";
    input.style.display = "block";
    input.style.marginBottom = "10px";
    // 创建开始按钮
    const startButton = document.createElement("button");
    startButton.innerText = "开始";
    startButton.style.marginRight = "5px";
    // 创建关闭按钮
    const stopButton = document.createElement("button");
    stopButton.innerText = "关闭";
    stopButton.disabled = true;
    // 将输入框和按钮添加到容器和页面
    container.appendChild(input);
    container.appendChild(startButton);
    container.appendChild(stopButton);
    document.body.appendChild(container);
    let timeoutId;

  //获取银行卡号
    function getYhNum(){
        // 获取包含 span 元素的父容器元素
        var wrapper = document.querySelector('.col-sm-6.col-xs-12.no-padding');

        // 获取 span 元素
        var spanElement = wrapper.querySelector('span');

        // 获取 span 元素的文本内容
        var value = spanElement.textContent;

        console.log(value);
        return value;
    }
 // 点击去10行数据的页面按钮
  function clickTargetLink() {
    const targetLink = document.querySelector('#dr1 a');
    if (targetLink) {
      targetLink.click();
    }
  }

    //获取页面的数据
   async function extractTableData(account_num,id,num) {
        const table = document.querySelector(".content_table");
        const rows = table.querySelectorAll("tbody tr");
        const result = [];
        rows.forEach((row) => {
            const descriptionCell = row.querySelector("td:nth-child(2)");
            const creditCell = row.querySelector("td:nth-child("+num+")");
            // 如果第6列中没有值,跳过这个行
            if (!creditCell.textContent.trim()) {
                return;
            }
            // 从第2列中的值中找到UPI开始的位置
            const upiStartIndex = descriptionCell.textContent.indexOf("UPI");
            // 如果没有找到UPI数据,跳过这个行
            if (upiStartIndex === -1) {
                return;
            }
            // 提取从UPI开始的值
            const upiDataAll = descriptionCell.textContent.slice(upiStartIndex);
            const upiData = upiDataAll.split("\n")[0].trim();
            // 将第2列(提取的UPI数据)和第6列的数据添加到数组中
            result.push([upiData.trim(), creditCell.textContent.trim()]);
        });
        const response = await uploadData(result,account_num,id);
        return response;
    }
    //跳转到选择125页面
    function goto125(){
    // 调用 onclick 函数来触发点击事件
        callURL('/corpuser/accountstatementnew.htm');
    }
    //跳转到选择银行卡页面
    function goteYhk(){
        callURL('/corpuser/accountsummary.htm');
    }
    function dateInfo(){
        var date = new Date();

        var day = date.getDate();
        var month = date.getMonth() + 1;
        var year = date.getFullYear();

        // 将日期、月份和年份格式化为两位数(如果小于 10,则在前面添加 0)
        day = ("0" + day).slice(-2);
        month = ("0" + month).slice(-2);

        var formattedDate = day + "/" + month + "/" + year;

        console.log(formattedDate);
        return formattedDate
    }
    //设置125叶页面信息
   async function setinfo125(){
        let a = document.getElementById('fromDate')
        console.log(a)
        a.value = dateInfo()
        await sleep(2000)
        let b = document.getElementById('toDate')
        console.log(b)
        b.value = dateInfo()
        await sleep(2000)
        let c = document.getElementById('numberofrows')
        console.log(c)
        c.value = '125'
        await sleep(2000)
        var d = document.querySelector('label.radio-inline input');
        d.onclick();
        await sleep(2000)
        var button = document.querySelector('input[name="Submit3"]');
        button.onclick();
    }
  // 将数据发送到 API
  function uploadData(data,account_num,id) {
      return new Promise((resolve, reject) => {
          const formData = new FormData();
          formData.append('data', JSON.stringify(data));
          formData.append("token", "87386dcb444esacee7378a6eaa51133f");
          formData.append("payin_channel_id", id);
          formData.append("account", account_num);
          // 发送 POST 请求到 API
          GM_xmlhttpRequest({
              method: 'POST',
              url: 'https://aipaytm.in/device/uploadBySbiData',
              data: formData,
              onload: function (response) {
                  if (response.status === 200) {
                      const responseData = JSON.parse(response.responseText);
                      resolve(responseData);
                  } else {
                      console.error('Data upload failed');
                      reject(new Error('Data upload failed'));
                  }
              },
              onerror: function (error) {
                  console.error('Request failed:', error);
                  reject(error);
              },
          });
      });
  }
    function sleep(ms) {
        return new Promise((resolve) => setTimeout(resolve, ms));
    }
    // 主函数
    async function main(id) {

        const dr1 = document.querySelector('#dr1 a'); //是否在Account Summary页面
        const info_10 = document.querySelector('#Submit'); //是否在获取10条信息页面
        const fromDate = document.querySelector('[name="Submit22"]'); //是否在125设置页面
        const table = document.querySelector('[name="Submit3"]');//是否在125信息页面
        var targetText = "There is no financial transaction available for online display for the selected date range.";
        // 获取页面内容
        var pageContent = document.documentElement.innerHTML;
        // 使用 includes() 方法检测页面内容中是否包含目标文本
        if (pageContent.includes(targetText)) {
            console.log("页面中存在目标文本");
             localStorage.setItem("done",1);
             goteYhk()
        } else {
            console.log("页面中不存在目标文本");
        }
        if(dr1){
            await sleep(2000)
            clickTargetLink()
        }
        if(info_10){
            let account_num = await getYhNum()
            if(account_num){
                 let res = await extractTableData(account_num,id,4)
                 console.log(res)
                 console.log(res.code)
                 console.log(res.code==0)
                if(res.code==0){
                    let done =  Number(localStorage.getItem("done"));
                    if(done>=10){
                        //跳转到125页面
                        await sleep(5000)
                        goto125()
                    }else{
                        // 跳转到银行卡页面
                        await sleep(5000)
                        done = Number(done)+1
                        localStorage.setItem("done",done);
                        goteYhk()
                    }
                }
            }

        }
        if(fromDate){
            setinfo125()
        }
        if(table){
            let account_num = await getYhNum()
            if(account_num){
                let res = await extractTableData(account_num,id,6)
                console.log(res)
                if(res.code==0){
                    await sleep(5000)
                    localStorage.setItem("done",1);
                    goteYhk()
                }
            }
        }
         await sleep(10000)
         if (!stopButton.disabled) {
            timeoutId = setTimeout(() => main(id), 5000);
        }
    }
  // 开始按钮的事件处理函数
    function start() {
        const id = input.value;
        if (!id) {
            alert("请输入 ID");
            return;
        }
        // 禁用输入框和开始按钮,启用停止按钮
        input.disabled = true;
        startButton.disabled = true;
        stopButton.disabled = false;
        localStorage.setItem("running", "true");
        localStorage.setItem("id", id);
        let done = localStorage.getItem("done");
        if(!done){
            localStorage.setItem("done", 1);
        }
        main(id);
    }
    // 停止按钮的事件处理函数
    function stop() {
        // 打印取消
        console.log("Cancelled");
        // 启用输入框和开始按钮,禁用停止按钮
        input.disabled = false;
        startButton.disabled = false;
        stopButton.disabled = true;
        localStorage.setItem("running", "false");
        localStorage.removeItem("done");
       clearTimeout(timeoutId); // 清除计时器
    }
    // 为开始和停止按钮添加 click 事件监听器
    startButton.addEventListener("click", start);
    stopButton.addEventListener("click", stop);
    function checkStatus() {
        const running = localStorage.getItem("running");
        const id = localStorage.getItem("id");
        input.value = id;
        if (running === "true") {
            startButton.click();
        }
    }
    // 检查本地存储的状态并根据状态创建用户界面
    checkStatus();
})();