掘金投票小脚本

584 阅读1分钟

Think

然后小伙伴们太tm懒了,就让我写个脚本投票。

然后我就想了三种实现方案

  • Puppteer 无头浏览器,然后包裹成容器,当小伙伴们点我发出去的链接的时候,自动执行投票。
  • 劫持掉掘金的cookie,然后搞个ip池,自己每天刷接口(但这个要考虑的东西太多了)。
  • 写个脚本,小伙伴们自己跑在浏览器挂着就行。

然后我选第三种,简单有轻松10分钟搞定,然后挂在浏览器就就行.

实现

// 每天的投票限额
var dailyVoteLimit = 2;

// 已经投票的次数
var voteCount = 0;

// 最后一次投票的日期
var lastVoteDate = null;

function delay(time) {
  return new Promise(function (resolve) {
    setTimeout(resolve, time);
  });
}

async function checkButtonAndClick() {
  var today = new Date().getDate();

  // 如果今天还没有投票,或者最后一次投票不是今天,重置投票次数
  if (!lastVoteDate || lastVoteDate !== today) {
    voteCount = 0;
    lastVoteDate = today;
  }

  // 如果已经达到了每天的投票限额,就不再投票
  if (voteCount >= dailyVoteLimit) {
    console.log('已经达到今天的投票次数限额');
    return;
  }

  var buttons = document.querySelectorAll('.RankWriter_body-btn__XSKSF');

  // 定义要查找的文本
  var targetText = '给TA投票';

  // 遍历按钮
  for (var i = 0; i < buttons.length; i++) {
    // 检查按钮文本是否为 "我要投票"
    if (buttons[i].textContent === targetText) {
      // 如果找到了正确的按钮
      while (voteCount < dailyVoteLimit) {
        // 模拟点击它
        buttons[i].click();
        voteCount++; // 跟踪投票次数
        console.log('已经投票了' + voteCount + '次');

        // 等待一秒
        await delay(1000);

        // 检查是否出现了弹窗,如果出现了,就点击它一次
        var maskElement = document.querySelector('.arco-icon-hover.arco-modal-close-icon');
        if (maskElement) {
          // 如果出现了弹窗
          maskElement.click();
        }
      }
      break;
    }
  }
}

// 立即投票
checkButtonAndClick();

// 设置在24小时后再投票
setInterval(checkButtonAndClick, 24 * 60 * 60 * 1000);

image.png Ok,来试试?

activity.juejin.cn/rank/2023/w…