青龙面板——百度贴吧全关注自动签到脚本

js代码加密

// 依赖
const axios = require("axios");
const FormData = require("form-data");
const cheerio = require("cheerio"); // 解析html;
const iconv = require("iconv-lite"); // 解决中文乱码

const cookieList = ["BDUSS=1jeldTVE9HMEJWaHB2UG5xa0phUzh4aW9zZjljT2V1bTZtd0puSVJXU1ptaXBrSVFBQUFBJCQAAAAAAAAAAAEAAAAdthFZT2~GvbWtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJkNA2SZDQNkeW;STOKEN=b0990788491410b926b28ba6a550e2a703a363e45146fd022dff5b68b348ac88; BAIDUID=F5BC2E0DEC258FD7EA3DCE8B97A65770:FG=1"];

let cookieNum = 0;

function run() {
  // 是否设置环境变量
  setTimeout(() => {
    console.log(`\n开始获取环境变量${cookieNum + 1}\n\n`);
    // TB_COOKIE:变量名
    // process.env.TB_COOKIE: 获取环境变量
    // if (process.env.TB_COOKIE) {
    if (cookieList[cookieNum]) {
      setTimeout(() => {
        console.log("TB_COOKIE读取成功\n\n");

        setTimeout(() => {
          console.log(`\n%cHello 本脚本由龟龟制作,5秒后开始执行 🚀\n\n\n\n`, "color:#0dd8d8; background:#0b1021; font-size:1.5rem; padding:0.15rem 0.25rem; margin: 1rem auto; font-family: Rockwell; border: 2px solid #0dd8d8; border-radius: 4px;font-weight: bold; text-shadow: 1px 1px 1px #00af87bf;");
          setTimeout(() => {
            getMyLike();
          }, 5000);
        }, 1000);
      }, 1000);
    } else {
      setTimeout(() => {
        console.log("未读取到TB_COOKIE,请先配置环境变量\n\n");
        setTimeout(() => {
          console.log("脚本执行结束\n");
        }, 1000);
      }, 1000);
    }
  }, 1000);
}

run();

// axios调用接口
const service = axios.create({
  baseURL: "https://tieba.baidu.com/",
});

// 请求拦截
service.interceptors.request.use(
  (config) => {
    config.headers["Content-Type"] = "application/x-www-form-urlencoded; charset=UTF-8";
    config.headers["Accept"] = "*/*";
    config.headers["Connection"] = "keep-alive";
    config.headers["Host"] = "tieba.baidu.com";
    // config.headers["Cookie"] = process.env.TB_COOKIE;
    config.headers["Cookie"] = cookieList[cookieNum];
    return config;
  },
  (error) => {
    // do something with request error
    // for debug
    console.log(error);
    return Promise.reject(error);
  }
);

// 保存所有关注的贴吧
let arr = [];

// 保存所有签到失败的吧
let errorArr = [];

// 获取关注的贴吧
function getMyLike(current = 1) {
  service({
    url: `f/like/mylike?pn=${current}`,
    method: "get",
    responseType: "arraybuffer",
    responseEncoding: "utf8",
  })
    .then((response) => {
      let { data } = response;
      // 解码
      let html = iconv.decode(data, "gbk");

      // 解析html
      const $ = cheerio.load(html);

      // 获取当前页
      const current = $(".pagination>.current").text();

      // 获取当前页所有吧名
      $("table tr:gt(0)").each(function () {
        arr.push($(this).find("td:first").text());
      });

      //   当前页
      if (current) {
        console.log(`\n%c开始获取关注列表第${current}页内所有贴吧...\n`, "color: #f709bb; font-family: sans-serif; text-decoration: underline;");

        setTimeout(() => {
          getMyLike(Number(current) + 1);
        }, 5000);
      } else {
        console.log(`\n%c所有关注的贴吧已获取完毕,即将开始执行签到...🚀\n\n`, "color:#0dd8d8; background:#0b1021; font-size:1.5rem; padding:0.15rem 0.25rem; margin: 1rem auto; font-family: Rockwell; border: 2px solid #0dd8d8; border-radius: 4px;font-weight: bold; text-shadow: 1px 1px 1px #00af87bf;");
        setTimeout(() => {
          // 执行签到
          Promise.all(mapSignList(arr)).then((res) => {
            setTimeout(() => {
              let sinErrArr = errorArr.filter((item) => item.msg !== "贴吧目录出问题啦,请到贴吧签到吧反馈");
              const sinArr = sinErrArr.map((item) => item.name);

              if (sinArr.length) {
                console.log("\n\n签到已执行完毕,即将开始为签到出错的吧重新签到\n\n");
                setTimeout(() => {
                  Promise.all(mapSignList(sinArr)).then((res) => {
                    cookieNum += 1;

                    if (cookieNum === cookieList.length) {
                      console.log(`\n%c脚本已全部执行完毕,再见🚀...\n`, "font-weight: bold; color: #0dd8d8; text-decoration: underline;");
                    } else {
                      run();
                    }
                  });
                }, 3000);
              } else {
                cookieNum += 1;

                if (cookieNum === cookieList.length) {
                  console.log(`\n%c脚本已全部执行完毕,再见🚀...\n`, "font-weight: bold; color: #0dd8d8; text-decoration: underline;");
                } else {
                  run();
                }
              }
            }, 3000);
          });
        }, 2000);
      }
    })
    .catch(function (error) {
      console.log(error);
    });
}

// 签到
function mapSignList(sinArr) {
  let index = 0;

  function nextSign() {
    if (index >= sinArr.length) {
      return Promise.resolve();
    }

    const item = sinArr[index++];
    return new Promise((resolve, reject) => {
      let data = new FormData();
      data.append("ie", "utf-8");
      data.append("kw", item);

      service({
        url: "sign/add",
        method: "post",
        data: data,
      })
        .then((response) => {
          if (response.data.no == "0") {
            console.log(item + "   " + "签到成功\n");
            resolve("签到成功");
          } else {
            console.log(item + "   " + response.data.error + "\n");

            if (response.data.error != "亲,你之前已经签过了") {
              errorArr.push({
                name: item,
                msg: response.data.error,
              });
            }
            resolve(response.data.error);
          }
        })
        .catch(function (error) {
          console.log(error);
          reject(error);
        });
    }).then(() => {
      return new Promise((resolve) => {
        setTimeout(() => {
          // 防止封ip,10秒执行一次签到
          resolve(nextSign());
        }, 10000);
      });
    });
  }

  return [nextSign()];
}


青龙面板——百度贴吧全关注自动签到脚本
http://localhost:8090//archives/qing-long-mian-ban-jiao-ben--bai-du-tie-ba-quan-guan-zhu-zi-dong-qian-dao
作者
龟龟
发布于
2023年03月16日
更新于
2024年09月07日
许可协议