Continue seeded Qinglong script collection
This commit is contained in:
164
脚本库/web版/账密/V2EX每日签到/2025-04-28_sudojia_v2ex_e79de91c.js
Normal file
164
脚本库/web版/账密/V2EX每日签到/2025-04-28_sudojia_v2ex_e79de91c.js
Normal file
@@ -0,0 +1,164 @@
|
||||
// # Source: https://github.com/sudojia/AutoTaskScript/blob/script/src/web/sudojia_v2ex.js
|
||||
// # Raw: https://raw.githubusercontent.com/sudojia/AutoTaskScript/script/src/web/sudojia_v2ex.js
|
||||
// # Repo: sudojia/AutoTaskScript
|
||||
// # Path: src/web/sudojia_v2ex.js
|
||||
// # UploadedAt: 2025-04-28T19:26:13+08:00
|
||||
// # SHA256: e79de91c9a8a74b74490bd2e55f3dadbc876f960a00be966caf61fde2f50c7ae
|
||||
// # Category: web版/账密
|
||||
// # Evidence: web/H5关键词 + username/password/login
|
||||
//
|
||||
|
||||
/**
|
||||
* v2ex 每日签到 https://www.v2ex.com/
|
||||
*
|
||||
* export V2EX_COOKIE = 'xxxxx'
|
||||
* 多账号用 & 或换行
|
||||
*
|
||||
* @author Telegram@sudojia
|
||||
* @site https://blog.imzjw.cn
|
||||
* @date 2024/5/22
|
||||
*
|
||||
* const $ = new Env('V2EX每日签到')
|
||||
* cron: 0 9 * * *
|
||||
*/
|
||||
const initScript = require('../utils/initScript')
|
||||
const {$, notify, sudojia, checkUpdate} = initScript('V2EX每日签到');
|
||||
const cheerio = require('cheerio');
|
||||
const v2exList = process.env.V2EX_COOKIE ? process.env.V2EX_COOKIE.split(/[\n&]/) : [];
|
||||
let message = '';
|
||||
// 接口地址
|
||||
const baseUrl = 'https://www.v2ex.com';
|
||||
// 请求头
|
||||
const headers = {
|
||||
'Accept-Encoding': `gzip, deflate, br`,
|
||||
'Connection': `keep-alive`,
|
||||
'Accept': `text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8`,
|
||||
"User-Agent": sudojia.getRandomUserAgent('PC'),
|
||||
};
|
||||
!(async () => {
|
||||
await checkUpdate($.name, v2exList);
|
||||
console.log(`\n已随机分配 User-Agent\n\n${headers['user-agent'] || headers['User-Agent']}`);
|
||||
for (let i = 0; i < v2exList.length; i++) {
|
||||
const index = i + 1;
|
||||
headers.Cookie = v2exList[i];
|
||||
console.log(`\n*****第[${index}]个${$.name}账号*****`);
|
||||
const isCookie = await checkCookie();
|
||||
if (!isCookie) {
|
||||
console.error('Cookie 已失效');
|
||||
await notify.sendNotify(`「Cookie失效通知」`, `${$.name}账号[${index}] Cookie 已失效,请重新登录获取 Cookie\n\n`);
|
||||
continue;
|
||||
}
|
||||
message += `📣====${$.name}账号[${index}]====📣\n`;
|
||||
await $.wait(sudojia.getRandomWait(800, 1200));
|
||||
await main();
|
||||
await $.wait(sudojia.getRandomWait(2000, 3000));
|
||||
}
|
||||
if (message) {
|
||||
await notify.sendNotify(`「${$.name}」`, `${message}`);
|
||||
}
|
||||
})().catch((e) => $.logErr(e)).finally(() => $.done());
|
||||
|
||||
async function main() {
|
||||
await getOnce();
|
||||
await wait();
|
||||
await getInfo();
|
||||
}
|
||||
|
||||
/**
|
||||
* 检测 Cookie 有效返回 true
|
||||
*
|
||||
* @return {Promise<boolean>}
|
||||
*/
|
||||
async function checkCookie() {
|
||||
try {
|
||||
const data = await sudojia.sendRequest('https://v2ex.com/', 'get', headers);
|
||||
return data.indexOf('登出') > -1;
|
||||
} catch (e) {
|
||||
console.error(`检测 Cookie 状态发生异常:${e}`);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取once
|
||||
*
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async function getOnce() {
|
||||
try {
|
||||
const data = await sudojia.sendRequest(`${baseUrl}/mission/daily`, 'GET', headers, {})
|
||||
const $ = cheerio.load(data);
|
||||
const targetLink = $('a.top').eq(1);
|
||||
const userName = targetLink.text();
|
||||
message += `【用户名称】${userName}\n`
|
||||
if (data.indexOf('每日登录奖励已领取') < 0) {
|
||||
console.log('开始签到...')
|
||||
const once = $('input[type="button"]')[0].attribs['onclick'].match(/once=(\d+)/)[1];
|
||||
await wait();
|
||||
await checkIn(once);
|
||||
} else {
|
||||
message += `【签到状态】已经签到过了\n`
|
||||
console.log('已经签到过了');
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(`获取 once 发生异常:${e}`);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 签到
|
||||
*
|
||||
* @param once
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async function checkIn(once) {
|
||||
try {
|
||||
const data = await sudojia.sendRequest(`${baseUrl}/mission/daily/redeem?once=${once}`, 'GET', headers, {})
|
||||
if (data.indexOf('每日登录奖励已领取') > -1) {
|
||||
console.log('签到成功');
|
||||
message += `【签到状态】签到成功!\n`
|
||||
const continueDays = data.match(/已连续登录 (\d+?) 天/)[1];
|
||||
message += `【签到统计】已连续签到${continueDays}天\n`
|
||||
} else {
|
||||
console.log('签到失败');
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(`签到时发生异常:${e}`);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户信息
|
||||
*
|
||||
* @return {Promise<void>}
|
||||
*/
|
||||
async function getInfo() {
|
||||
try {
|
||||
const data = await sudojia.sendRequest(`${baseUrl}/balance`, 'GET', headers, {})
|
||||
const $ = cheerio.load(data);
|
||||
const balanceArea = $('.balance_area').first();
|
||||
// 提取文本内容
|
||||
const text = balanceArea.text();
|
||||
// 使用正则表达式匹配数字
|
||||
const matches = text.match(/\d+/g);
|
||||
let goldAmount = 0;
|
||||
let silverAmount = 0;
|
||||
let bronzeAmount = 0;
|
||||
// 如果匹配到三个数字,则分别赋值给金币、银币和铜币
|
||||
if (matches && matches.length === 3) {
|
||||
goldAmount = parseInt(matches[0], 10);
|
||||
silverAmount = parseInt(matches[1], 10);
|
||||
bronzeAmount = parseInt(matches[2], 10);
|
||||
} else if (matches && matches.length === 2) {
|
||||
silverAmount = parseInt(matches[0], 10);
|
||||
bronzeAmount = parseInt(matches[1], 10);
|
||||
}
|
||||
message += `【账户余额】${goldAmount}金币 ${silverAmount}银币 ${bronzeAmount}铜币\n\n`
|
||||
} catch (e) {
|
||||
console.error(`获取获取用户信息时发生异常:${e}`);
|
||||
}
|
||||
}
|
||||
|
||||
async function wait() {
|
||||
await $.wait(sudojia.getRandomWait(2000, 3000));
|
||||
}
|
||||
Reference in New Issue
Block a user