mirror of
https://github.com/shufflewzc/faker2.git
synced 2025-04-23 02:48:44 +08:00
update
This commit is contained in:
parent
4b00c67991
commit
64b45f836a
109
jd_beauty.js
109
jd_beauty.js
@ -1,20 +1,24 @@
|
||||
/*
|
||||
美丽研究院
|
||||
修复+尽量优化为同步执行,减少并发,说不定就减小黑号概率了呢?
|
||||
https://raw.githubusercontent.com/aTenb/jdOpenSharePicker/master/jd_beautyStudy.js
|
||||
更新时间:2021-12-03
|
||||
来源 Dylan
|
||||
活动入口:京东app首页-美妆馆-底部中间按钮
|
||||
定时自定义,集中访问可能炸
|
||||
活动入口:京东app首页-美妆馆-底部中间按钮
|
||||
#随机定时运行一次
|
||||
*/
|
||||
const $ = new Env('美丽研究院');
|
||||
const notify = $.isNode() ? require('./sendNotify') : '';
|
||||
const jdCookieNode = $.isNode() ? require('./jdCookie.js') : '';
|
||||
|
||||
|
||||
const WebSocket = require('ws');
|
||||
const UA = process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : (require('./USER_AGENTS').USER_AGENT)
|
||||
const JD_API_HOST = 'https://api.m.jd.com/client.action';
|
||||
$.accountCheck = true;
|
||||
$.init = false;
|
||||
let cookiesArr = [], cookie = '', message;
|
||||
|
||||
function oc(fn, defaultVal) {
|
||||
try {
|
||||
return fn()
|
||||
@ -22,6 +26,7 @@ function oc(fn, defaultVal) {
|
||||
return undefined
|
||||
}
|
||||
}
|
||||
|
||||
if ($.isNode()) {
|
||||
Object.keys(jdCookieNode).forEach((item) => {
|
||||
cookiesArr.push(jdCookieNode[item])
|
||||
@ -30,7 +35,7 @@ if ($.isNode()) {
|
||||
} else {
|
||||
cookiesArr = [$.getdata('CookieJD'), $.getdata('CookieJD2'), ...jsonParse($.getdata('CookiesJD') || "[]").map(item => item.cookie)].filter(item => !!item);
|
||||
}
|
||||
const JD_API_HOST = 'https://api.m.jd.com/client.action';
|
||||
|
||||
!(async () => {
|
||||
if (!cookiesArr[0]) {
|
||||
$.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"});
|
||||
@ -50,7 +55,7 @@ const JD_API_HOST = 'https://api.m.jd.com/client.action';
|
||||
$.nickName = '';
|
||||
message = '';
|
||||
$.token = '';
|
||||
//await TotalBean();
|
||||
await TotalBean();
|
||||
console.log(`\n******开始【京东账号${$.index}】${$.nickName || $.UserName}*********\n`);
|
||||
if (!$.isLogin) {
|
||||
$.msg($.name, `【提示】cookie已失效`, `京东账号${$.index} ${$.nickName || $.UserName}\n请重新登录获取\nhttps://bean.m.jd.com/`, {"open-url": "https://bean.m.jd.com/"});
|
||||
@ -61,9 +66,7 @@ const JD_API_HOST = 'https://api.m.jd.com/client.action';
|
||||
continue
|
||||
}
|
||||
await accountCheck();
|
||||
while (!$.hasDone) {
|
||||
await $.wait(3000)
|
||||
}
|
||||
await $.wait(10000)
|
||||
if ($.accountCheck) {
|
||||
await jdBeauty();
|
||||
}
|
||||
@ -87,7 +90,7 @@ async function accountCheck() {
|
||||
await $.wait(10000)
|
||||
await getIsvToken2()
|
||||
await $.wait(10000)
|
||||
await getToken()
|
||||
await getAuth()
|
||||
await $.wait(10000)
|
||||
if (!$.token) {
|
||||
console.log(`\n\n提示:请尝试换服务器ip或者设置"xinruimz-isv.isvjcloud.com"域名直连,或者自定义UA再次尝试(环境变量JD_USER_AGENT)\n\n`)
|
||||
@ -102,9 +105,9 @@ async function accountCheck() {
|
||||
client.onopen = async () => {
|
||||
console.log(`美容研究院服务器连接成功`);
|
||||
client.send('{"msg":{"type":"action","args":{"source":1},"action":"_init_"}}');
|
||||
await $.wait(10000);
|
||||
await $.wait(20000);
|
||||
client.send(`{"msg":{"type":"action","args":{"source":1},"action":"get_user"}}`);
|
||||
await $.wait(10000);
|
||||
await $.wait(20000);
|
||||
};
|
||||
client.onmessage = async function (e) {
|
||||
if (e.data !== 'pong' && e.data && safeGet(e.data)) {
|
||||
@ -143,7 +146,6 @@ async function jdBeauty() {
|
||||
async function mr() {
|
||||
$.coins = 0
|
||||
let positionList = ['b1', 'h1', 's1', 'b2', 'h2', 's2']
|
||||
let positionList2 = ['b2', 'h2', 's2']
|
||||
$.tokens = []
|
||||
$.pos = []
|
||||
$.helpInfo = []
|
||||
@ -165,24 +167,18 @@ async function mr() {
|
||||
await $.wait(10000);
|
||||
}
|
||||
console.log(`\n========生产任务相关========\n`)
|
||||
for (let help of helpInfo) {
|
||||
client.send(help);
|
||||
}
|
||||
await $.wait(3000)
|
||||
client.send(`{"msg":{"type":"action","args":{},"action":"get_produce_material"}}`)
|
||||
await $.wait(10000);
|
||||
await $.wait(20000);
|
||||
// 获得正在生产的商品信息
|
||||
client.send('{"msg":{"type":"action","args":{},"action":"product_producing"}}')
|
||||
await $.wait(10000);
|
||||
// 获得库存
|
||||
client.send(`{"msg":{"type":"action","args":{},"action":"get_package"}}`)
|
||||
await $.wait(20000);
|
||||
// 获得可生成的商品列表
|
||||
client.send(`{"msg":{"type":"action","args":{"page":1,"num":10},"action":"product_lists"}}`)
|
||||
await $.wait(10000);
|
||||
await $.wait(20000);
|
||||
// 获得原料生产列表
|
||||
for (let pos of positionList) {
|
||||
client.send(`{"msg":{"type":"action","args":{"position":"${pos}"},"action":"produce_position_info_v2"}}`)
|
||||
await $.wait(10000);
|
||||
await $.wait(20000);
|
||||
}
|
||||
console.log(`\n========日常任务相关========`)
|
||||
client.send(`{"msg":{"type":"action","args":{},"action":"check_up"}}`)
|
||||
@ -196,7 +192,7 @@ async function mr() {
|
||||
await $.wait(50000);
|
||||
//最后做时间最久的日常任务
|
||||
client.send(`{"msg":{"type":"action","args":{},"action":"shop_products"}}`)
|
||||
await $.wait(10000);
|
||||
await $.wait(20000);
|
||||
}
|
||||
};
|
||||
client.onclose = () => {
|
||||
@ -205,10 +201,7 @@ async function mr() {
|
||||
$.init = true;
|
||||
$.hasDone = true;
|
||||
for (let i = 0; i < $.pos.length && i < $.tokens.length; ++i) {
|
||||
client.send(`{"msg":{"type":"action","args":{"inviter_id":"${$.userInfo.id}"},"action":"employee_get_user"}}`);
|
||||
$.helpInfo.push(`{"msg":{"type":"action","args":{"inviter_id":"${$.userInfo.id}","position":"${$.pos[i]}","token":"${$.tokens[i]}"},"action":"employee_v2"}}`)
|
||||
client.send(`{"msg":{"type":"action","args":{"inviter_id":"${$.userInfo.id}","position":"${$.pos[i]}"},"action":"employee_speed_v2"}}`);
|
||||
client.send(`{"msg":{"action":"write","type":"action","args":{"action_type":3,"channel":2,"source_app":2}}}`);
|
||||
$.helpInfo.push(`{"msg":{"type":"action","args":{"inviter_id":"${$.userInfo.id}","position":"${$.pos[i]}","token":"${$.tokens[i]}"},"action":"employee"}}`)
|
||||
}
|
||||
};
|
||||
client.onmessage = async function (e) {
|
||||
@ -223,9 +216,9 @@ async function mr() {
|
||||
// 去签到
|
||||
console.log(`去做签到任务`)
|
||||
client.send(`{"msg":{"type":"action","args":{},"action":"sign_in"}}`)
|
||||
await $.wait(10000);
|
||||
await $.wait(20000);
|
||||
client.send(`{"msg":{"action":"write","type":"action","args":{"action_type":1,"channel":2,"source_app":2}}}`)
|
||||
await $.wait(10000);
|
||||
await $.wait(20000);
|
||||
}
|
||||
break
|
||||
case "get_user":
|
||||
@ -235,7 +228,7 @@ async function mr() {
|
||||
console.log(`去做新手任务`)
|
||||
for (let i = $.userInfo.step; i < 15; ++i) {
|
||||
client.send(`{"msg":{"type":"action","args":{},"action":"newcomer_update"}}`)
|
||||
await $.wait(10000);
|
||||
await $.wait(20000);
|
||||
}
|
||||
} else
|
||||
$.init = true;
|
||||
@ -288,14 +281,11 @@ async function mr() {
|
||||
}
|
||||
await $.wait(10000);
|
||||
}
|
||||
if ($.taskState.meetingplace_view.length <= vo.data.meetingplaces.length) {
|
||||
for (let vc of vo.data.meetingplaces) {
|
||||
console.log(`去做第${vc.name}浏览会场任务`)
|
||||
client.send(`{"msg":{"type":"action","args":{"source":1,"meetingplace_id":${vc.id}},"action":"meetingplace_view"}}`)
|
||||
await $.wait(2500)
|
||||
for (let i = $.taskState.meetingplace_view; i < $.taskState.mettingplace_count; ++i) {
|
||||
console.log(`去做第${i + 1}次浏览会场任务`)
|
||||
client.send(`{"msg":{"type":"action","args":{"source":1},"action":"meetingplace_view"}}`)
|
||||
await $.wait(10000);
|
||||
}
|
||||
}
|
||||
|
||||
if ($.taskState.today_answered === 0) {
|
||||
console.log(`去做每日问答任务`)
|
||||
client.send(`{"msg":{"type":"action","args":{"source":1},"action":"get_question"}}`)
|
||||
@ -366,7 +356,7 @@ async function mr() {
|
||||
client.send(`{"msg":{"type":"action","args":{"position":"${vo.data.position}","material_id":${ma.id}},"action":"material_produce_v2"}}`)
|
||||
await $.wait(5000);
|
||||
} else {
|
||||
ma = $.material.base[1]['items'][positionList2.indexOf(vo.data.position)]
|
||||
ma = $.material.base[1]['items'][positionList.indexOf(vo.data.position)]
|
||||
if (ma) {
|
||||
console.log(`else去生产${ma.name}`)
|
||||
client.send(`{"msg":{"type":"action","args":{"position":"${vo.data.position}","material_id":${ma.id}},"action":"material_produce_v2"}}`)
|
||||
@ -412,7 +402,7 @@ async function mr() {
|
||||
case "product_lists":
|
||||
let need_material = []
|
||||
if (vo.code === '200' || vo.code === 200) {
|
||||
$.products = vo.data.filter(vo=>vo.level===$.level-1)
|
||||
$.products = vo.data.filter(vo=>vo.level===$.level)
|
||||
console.log(`========可生产商品信息========`)
|
||||
for (let product of $.products) {
|
||||
let num = Infinity
|
||||
@ -441,7 +431,6 @@ async function mr() {
|
||||
console.log(`【${product.name}】可生产份数大于0,去生产`)
|
||||
//product_produce 产品研发里的生产
|
||||
client.send(`{"msg":{"type":"action","args":{"product_id":${product.id},"amount":${num}},"action":"product_produce"}}`)
|
||||
client.send(`{"msg":{"type":"action","args":{"product_id":${product.id},"amount":${num}},"action":"once_completion"}}`)
|
||||
await $.wait(10000);
|
||||
} else {
|
||||
console.log(msg)
|
||||
@ -505,9 +494,9 @@ async function mr() {
|
||||
for (let benefit of vo.data) {
|
||||
if (benefit.type === 1) { //type 1 是京豆
|
||||
//console.log(`benefit:${JSON.stringify(benefit)}`);
|
||||
if(benefit.description === "1 京豆" && parseInt(benefit.day_exchange_count) < 5 && $.total > benefit.coins){
|
||||
if(benefit.description === "1 京豆" && parseInt(benefit.day_exchange_count) < 10 && $.total > benefit.coins){
|
||||
$timenum = parseInt($.total / benefit.coins);
|
||||
if ($timenum > 5) $timenum = 5;
|
||||
if ($timenum > 10) $timenum = 10;
|
||||
console.log(`\n可兑换${$timenum}次京豆:`)
|
||||
for (let i = 0; i < $timenum; i++){
|
||||
client.send(`{"msg":{"type":"action","args":{"benefit_id":${benefit.id}},"action":"to_exchange"}}`);
|
||||
@ -529,7 +518,7 @@ async function mr() {
|
||||
break
|
||||
case "to_exchange":
|
||||
if(oc(() => vo.data.coins)){
|
||||
console.log(`兑换${vo.data.coins/-10000}京豆成功`)
|
||||
console.log(`兑换${vo.data.coins/-1000}京豆成功`)
|
||||
}else{
|
||||
console.log(`兑换京豆失败`)
|
||||
}
|
||||
@ -537,15 +526,15 @@ async function mr() {
|
||||
case "get_produce_material":
|
||||
$.material = vo.data
|
||||
break
|
||||
//case "to_employee":
|
||||
// console.log(`雇佣助力码【${oc(() => vo.data.token)}】`)
|
||||
// if(oc(() => vo.data.token)){
|
||||
// $.tokens.push(vo.data.token)
|
||||
// }else{
|
||||
// console.log(`not exist:${oc(() => vo.data)}`)
|
||||
// }
|
||||
// break
|
||||
case "employee_v2":
|
||||
case "to_employee":
|
||||
console.log(`雇佣助力码【${oc(() => vo.data.token)}】`)
|
||||
if(oc(() => vo.data.token)){
|
||||
$.tokens.push(vo.data.token)
|
||||
}else{
|
||||
console.log(`not exist:${oc(() => vo.data)}`)
|
||||
}
|
||||
break
|
||||
case "employee":
|
||||
console.log(`${vo.msg}`)
|
||||
break
|
||||
}
|
||||
@ -588,24 +577,18 @@ function getIsvToken() {
|
||||
}
|
||||
|
||||
async function getIsvToken2() {
|
||||
for (let i=0; i<3; i++){
|
||||
var body = await getSignfromDY('isvObfuscator',{"id":"","url":"https://xinruimz-isv.isvjcloud.com"})
|
||||
if(body) break;
|
||||
await $.wait(5000)
|
||||
}
|
||||
let config = {
|
||||
url: 'https://api.m.jd.com/client.action?functionId=isvObfuscator',
|
||||
body: body,
|
||||
body: await getSignfromDY('isvObfuscator',{"id":"","url":"https://xinruimz-isv.isvjcloud.com"}),
|
||||
headers: {
|
||||
'Host': 'api.m.jd.com',
|
||||
'accept': '*/*',
|
||||
'user-agent': UA,
|
||||
//'accept-language': 'zh-Hans-JP;q=1, en-JP;q=0.9, zh-Hant-TW;q=0.8, ja-JP;q=0.7, en-US;q=0.6',
|
||||
//'content-type': 'application/x-www-form-urlencoded',
|
||||
'accept-language': 'zh-Hans-JP;q=1, en-JP;q=0.9, zh-Hant-TW;q=0.8, ja-JP;q=0.7, en-US;q=0.6',
|
||||
'content-type': 'application/x-www-form-urlencoded',
|
||||
'Cookie': cookie
|
||||
}
|
||||
}
|
||||
|
||||
return new Promise(resolve => {
|
||||
$.post(config, async (err, resp, data) => {
|
||||
try {
|
||||
@ -665,10 +648,10 @@ let data = `functionId=${functionId}&body=${encodeURIComponent(JSON.stringify(bo
|
||||
})
|
||||
})
|
||||
}
|
||||
function getToken() {
|
||||
function getAuth() {
|
||||
let config = {
|
||||
url: 'https://xinruimz-isv.isvjcloud.com/api/auth',
|
||||
body: JSON.stringify({"token":$.token2,"source":"01","channel":"meizhuangguandibudaohang"}),
|
||||
body: JSON.stringify({"token":$.token2,"source":"01"}),
|
||||
headers: {
|
||||
'Host': 'xinruimz-isv.isvjcloud.com',
|
||||
'Accept': 'application/x.jd-school-island.v1+json',
|
||||
@ -679,7 +662,7 @@ function getToken() {
|
||||
'user-agent': UA,
|
||||
'Referer': 'https://xinruimz-isv.isvjcloud.com/logined_jd/',
|
||||
'Authorization': 'Bearer undefined',
|
||||
'Cookie': `IsvToken=${$.token2};`
|
||||
'Cookie': `IsvToken=${$.isvToken};`
|
||||
}
|
||||
}
|
||||
return new Promise(resolve => {
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -27,9 +27,9 @@ let shopname=''
|
||||
const token = [
|
||||
"75196DED685B6BF6EB7B55FBD9E45A77",
|
||||
"A1577946DE409D3AC4B4FDCFF4681625",
|
||||
"E0087463F85940305DCA705308208EBB",
|
||||
"BDC952E78780604530F13CBCFB89336A",
|
||||
"773D63918C47D32F33DDB2FB78C5820A",
|
||||
"35161A49032726A1A48E435DD2874114",
|
||||
"BF347A3DBB16134C9A4E602FE93C16AB",
|
||||
"DA71409388CE531378225A6BBF96CDFE",
|
||||
"71DEC5804B8E333A9DAA0BF16EC6C8EB",
|
||||
"A6D7A29DB6C46B7D3F7CD6EC3AE110C6",
|
||||
@ -40,7 +40,7 @@ const token = [
|
||||
"6F79CE75B2D272EBC34718C6C07CB63B",
|
||||
"8CC487234D54778E2F1C738C79B397BA",
|
||||
"500B9537712BD828EFC8C4D036B9752A",
|
||||
"12E0F8E3B60238F010D09F944543247B",
|
||||
"C94708F50069ACB06C01C725D9F331D8",
|
||||
"96569C6643EC94DDCEEC05DADD5367BA",
|
||||
"612AB059DEDF1AE49910BC575AEDF97B",
|
||||
"71DEC5804B8E333A9DAA0BF16EC6C8EB",
|
||||
|
575
jd_jinggengInvite.py
Normal file
575
jd_jinggengInvite.py
Normal file
@ -0,0 +1,575 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
File: jd_jinggengInvite.py(jinggeng邀请入会有礼)
|
||||
Author: HarbourJ
|
||||
Date: 2022/8/1 22:37
|
||||
TG: https://t.me/HarbourToulu
|
||||
cron: 1 1 1 1 1 1
|
||||
new Env('jinggeng邀请入会有礼');
|
||||
活动入口: https://jinggeng-isv.isvjcloud.com/ql/front/showInviteJoin?id=9e80809282a4bdc90182ab254c7e0a12&user_id=1000121005&inviterNick=Ny0m1K1tVHIJvt0j4SQ9RbRPXMHHf%2BDrNmMVfT8S5hq3SjYMAACrbEHZQ40J5yPY
|
||||
变量设置: export redis_url="redis_ip", export redis_pwd="xxx"(没有可写变量)
|
||||
export jinggengInviteJoin="9e80809282a4bdc90182ab254c7e0a12&1000121005"(活动id&店铺id)
|
||||
"""
|
||||
|
||||
import time
|
||||
import requests
|
||||
import sys
|
||||
import re
|
||||
import os
|
||||
from bs4 import BeautifulSoup
|
||||
from datetime import datetime
|
||||
import json
|
||||
import random
|
||||
from urllib.parse import quote_plus, unquote_plus
|
||||
import logging
|
||||
logging.basicConfig(level=logging.INFO, format='%(message)s')
|
||||
logger = logging.getLogger()
|
||||
import warnings
|
||||
warnings.filterwarnings("ignore", category=DeprecationWarning)
|
||||
|
||||
try:
|
||||
if "aarch" in os.uname().machine:
|
||||
from utils.jd_sign_arm64 import *
|
||||
else:
|
||||
from utils.jd_sign_x86 import *
|
||||
except:
|
||||
from utils.jd_sign import *
|
||||
try:
|
||||
from jdCookie import get_cookies
|
||||
getCk = get_cookies()
|
||||
except:
|
||||
logger.info("请先下载依赖脚本,\n下载链接: https://raw.githubusercontent.com/HarbourJ/HarbourToulu/main/jdCookie.py")
|
||||
sys.exit(3)
|
||||
try:
|
||||
if os.environ.get("redis_url"):
|
||||
redis_url = os.environ["redis_url"] # redis ip
|
||||
else:
|
||||
redis_url = "172.17.0.1"
|
||||
if os.environ.get("redis_pwd"):
|
||||
redis_pwd = os.environ["redis_pwd"] # redis 密码
|
||||
else:
|
||||
redis_pwd = ""
|
||||
except:
|
||||
redis_url = "172.17.0.1"
|
||||
redis_pwd = ""
|
||||
|
||||
try:
|
||||
if os.environ.get("jinggengInviteJoin"):
|
||||
jinggengInviteJoin = os.environ["jinggengInviteJoin"]
|
||||
else:
|
||||
jinggengInviteJoin = "9e8080e0828365a10182868854b40115&1000004385"
|
||||
except:
|
||||
jinggengInviteJoin = "9e80809282a4bdc90182ab254c7e0a12&1000121005"
|
||||
|
||||
inviterNicks = [
|
||||
"Ny0m1K1tVHIJvt0j4SQ9RbRPXMHHf%2BDrNmMVfT8S5hq3SjYMAACrbEHZQ40J5yPY",
|
||||
"pWGUWZJQ3actex0X2vQyLsjNhNaYFy2HteErE6izlhTf9nrGY7gBkCdGU4C6z%2FxD"
|
||||
]
|
||||
if "&" not in jinggengInviteJoin:
|
||||
logger.info("⚠️jinggengInviteJoin变量有误!退出程序!")
|
||||
sys.exit()
|
||||
ac_id = jinggengInviteJoin.split("&")[0]
|
||||
user_id = jinggengInviteJoin.split("&")[1]
|
||||
inviterNick = random.choice(inviterNicks)
|
||||
activity_url = f"https://jinggeng-isv.isvjcloud.com/ql/front/showInviteJoin?id={ac_id}&user_id={user_id}&inviterNick={inviterNick}"
|
||||
|
||||
def redis_conn():
|
||||
try:
|
||||
import redis
|
||||
try:
|
||||
pool = redis.ConnectionPool(host=redis_url, port=6379, decode_responses=True, socket_connect_timeout=5, password=redis_pwd)
|
||||
r = redis.Redis(connection_pool=pool)
|
||||
r.get('conn_test')
|
||||
logger.info('✅redis连接成功')
|
||||
return r
|
||||
except:
|
||||
logger.info("⚠️redis连接异常")
|
||||
except:
|
||||
logger.info("⚠️缺少redis依赖,请运行pip3 install redis")
|
||||
|
||||
def getToken(ck, r=None):
|
||||
try:
|
||||
# redis缓存Token 活动域名+pt_pin
|
||||
pt_pin = unquote_plus(re.compile(r'pt_pin=(.*?);').findall(ck)[0])
|
||||
except:
|
||||
# redis缓存Token 活动域名+ck前7位(获取pin失败)
|
||||
pt_pin = ck[:8]
|
||||
try:
|
||||
if r is not None:
|
||||
Token = r.get(f'{activityUrl.split("https://")[1].split("-")[0]}_{pt_pin}')
|
||||
# logger.info("Token过期时间", r.ttl(f'{activityUrl.split("https://")[1].split("-")[0]}_{pt_pin}'))
|
||||
if Token is not None:
|
||||
logger.info(f"♻️获取缓存Token->: {Token}")
|
||||
return Token
|
||||
else:
|
||||
logger.info("🈳去设置Token缓存-->")
|
||||
s.headers = {
|
||||
'Connection': 'keep-alive',
|
||||
'Accept-Encoding': 'gzip, deflate, br',
|
||||
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
|
||||
'User-Agent': '',
|
||||
'Cookie': ck,
|
||||
'Host': 'api.m.jd.com',
|
||||
'Referer': '',
|
||||
'Accept-Language': 'zh-Hans-CN;q=1 en-CN;q=0.9',
|
||||
'Accept': '*/*'
|
||||
}
|
||||
sign_txt = sign({"url": f"{activityUrl}", "id": ""}, 'isvObfuscator')
|
||||
# logger.info(sign_txt)
|
||||
f = s.post('https://api.m.jd.com/client.action', verify=False, timeout=30)
|
||||
if f.status_code != 200:
|
||||
logger.info(f.status_code)
|
||||
return
|
||||
else:
|
||||
if "参数异常" in f.text:
|
||||
return
|
||||
Token_new = f.json()['token']
|
||||
logger.info(f"Token->: {Token_new}")
|
||||
if r.set(f'{activityUrl.split("https://")[1].split("-")[0]}_{pt_pin}', Token_new, ex=1800):
|
||||
logger.info("✅Token缓存设置成功")
|
||||
else:
|
||||
logger.info("❌Token缓存设置失败")
|
||||
return Token_new
|
||||
else:
|
||||
s.headers = {
|
||||
'Connection': 'keep-alive',
|
||||
'Accept-Encoding': 'gzip, deflate, br',
|
||||
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
|
||||
'User-Agent': '',
|
||||
'Cookie': ck,
|
||||
'Host': 'api.m.jd.com',
|
||||
'Referer': '',
|
||||
'Accept-Language': 'zh-Hans-CN;q=1 en-CN;q=0.9',
|
||||
'Accept': '*/*'
|
||||
}
|
||||
sign_txt = sign({"url": f"{activityUrl}", "id": ""}, 'isvObfuscator')
|
||||
# logger.info(sign_txt)
|
||||
f = s.post('https://api.m.jd.com/client.action', verify=False, timeout=30)
|
||||
if f.status_code != 200:
|
||||
logger.info(f.status_code)
|
||||
return
|
||||
else:
|
||||
if "参数异常" in f.text:
|
||||
return
|
||||
Token = f.json()['token']
|
||||
logger.info(f"Token->: {Token}")
|
||||
return Token
|
||||
except:
|
||||
return
|
||||
|
||||
def getJdTime():
|
||||
url = "http://api.m.jd.com/client.action?functionId=queryMaterialProducts&client=wh5"
|
||||
headers = {
|
||||
'Accept': '*/*',
|
||||
'Accept-Encoding': 'gzip, deflate',
|
||||
'Accept-Language': 'zh-CN,zh;q=0.9',
|
||||
'Host': 'api.m.jd.com',
|
||||
'Proxy-Connection': 'keep-alive',
|
||||
'Upgrade-Insecure-Requests': '1',
|
||||
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
|
||||
}
|
||||
try:
|
||||
response = requests.request("GET", url, headers=headers, timeout=2)
|
||||
if response.status_code == 200:
|
||||
res = response.json()
|
||||
jdTime = res['currentTime2']
|
||||
except:
|
||||
jdTime = int(round(time.time() * 1000))
|
||||
return jdTime
|
||||
|
||||
def randomString(e, flag=False):
|
||||
t = "0123456789abcdef"
|
||||
if flag: t = t.upper()
|
||||
n = [random.choice(t) for _ in range(e)]
|
||||
return ''.join(n)
|
||||
|
||||
def refresh_cookies(res):
|
||||
if res.cookies:
|
||||
cookies = res.cookies.get_dict()
|
||||
set_cookie = [(set_cookie + "=" + cookies[set_cookie]) for set_cookie in cookies]
|
||||
global activityCookie
|
||||
activityCookieMid = [i for i in activityCookie.split(';') if i != '']
|
||||
for i in activityCookieMid:
|
||||
for x in set_cookie:
|
||||
if i.split('=')[0] == x.split('=')[0]:
|
||||
if i.split('=')[1] != x.split('=')[1]:
|
||||
activityCookieMid.remove(i)
|
||||
activityCookie = ''.join(sorted([(set_cookie + ";") for set_cookie in list(set(activityCookieMid + set_cookie))]))
|
||||
|
||||
def getActivity(index=1, isOpenCard=0, inviterCode=None, getIndex=0):
|
||||
url = f"{activityUrl}&isOpenCard={isOpenCard}&from=kouling"
|
||||
if len(token) == 0:
|
||||
IsvToken = ''
|
||||
else:
|
||||
IsvToken = f"IsvToken={token};"
|
||||
headers = {
|
||||
'Host': 'jinggeng-isv.isvjcloud.com',
|
||||
'Accept-Encoding': 'gzip, deflate, br',
|
||||
'Connection': 'keep-alive',
|
||||
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
|
||||
'User-Agent': ua,
|
||||
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
|
||||
'Referer': url,
|
||||
'Cookie': IsvToken + activityCookie
|
||||
}
|
||||
response = requests.request("GET", url, headers=headers)
|
||||
html_text = response.text
|
||||
if response.status_code == 493:
|
||||
logger.info(response.status_code, "⚠️ip疑似黑了,休息一会再来撸~")
|
||||
sys.exit()
|
||||
# if response.cookies:
|
||||
cookies = response.cookies.get_dict()
|
||||
set_cookies = [(set_cookie + "=" + cookies[set_cookie]) for set_cookie in cookies]
|
||||
set_cookie = ''.join(sorted([(set_cookie + ";") for set_cookie in set_cookies]))
|
||||
if getIndex == 3:
|
||||
return set_cookie
|
||||
if "活动时间" in html_text:
|
||||
refresh_cookies(response)
|
||||
soup = BeautifulSoup(html_text, 'html.parser')
|
||||
errorMsg = soup.find('input', attrs={'id': 'errorMsg'})['value']
|
||||
inviteSucc = soup.find('input', attrs={'id': 'inviteSucc'})['value']
|
||||
if len(errorMsg) != 0:
|
||||
errorMsg0 = errorMsg
|
||||
if len(inviteSucc) != 0:
|
||||
errorMsg0 = inviteSucc
|
||||
if index == 1:
|
||||
if getIndex == 2:
|
||||
pass
|
||||
shop_title = soup.find('input', attrs={'id': 'shop_title'})['value'].replace(' ', '')
|
||||
actName = soup.find('input', attrs={'id': 'actName'})['value']
|
||||
shop_sid = soup.find('input', attrs={'id': 'shop_sid'})['value']
|
||||
inviteSuccNums = (soup.find('input', attrs={'id': 'helpLogs'})['value'])
|
||||
inviteSetting2s = eval(soup.find('input', attrs={'id': 'inviteSetting2'})['value'])
|
||||
logger.info(f"店铺名称: {shop_title} \n活动名称: {actName} \n店铺ID: {shop_sid}")
|
||||
num1 = {'1': 'one', '2': 'two', '3': 'three', '4': 'four'}
|
||||
num2 = {'1': 'leveOneNum', '2': 'leveTwoNum', '3': 'leveThreeNum', '4': 'leveFourNum'}
|
||||
needInviteNums = []
|
||||
for a in range(len(inviteSetting2s)):
|
||||
b = a + 1
|
||||
inviteSetting2 = inviteSetting2s[num1[str(b)]]
|
||||
# equityEndTime = inviteSetting2['equityEndTime']
|
||||
freezeQuantity = inviteSetting2['freezeQuantity']
|
||||
availableQuantity = inviteSetting2['availableQuantity']
|
||||
equityType = inviteSetting2['equityType']
|
||||
equityName = inviteSetting2['equityName']
|
||||
leveNum = inviteSetting2[num2[str(b)]]
|
||||
if equityType == "JD_GOODS":
|
||||
denomination = ''
|
||||
else:
|
||||
denomination = inviteSetting2['denomination']
|
||||
awardId = inviteSetting2['id']
|
||||
# inviteSucc = soup.find('input', attrs={'id': 'inviteSucc'})['value']
|
||||
logger.info(f"奖品{b}: {equityName} 奖励: {denomination} 总数: {freezeQuantity}份 剩余: {availableQuantity}份 需要邀请: {leveNum}人")
|
||||
if availableQuantity > 0:
|
||||
needInviteNums.append((leveNum, awardId, equityType))
|
||||
if len(needInviteNums) == 0:
|
||||
logger.info(f"⛈⛈⛈活动奖品全部发完啦!")
|
||||
sys.exit()
|
||||
return errorMsg, inviteSuccNums, needInviteNums
|
||||
return errorMsg0
|
||||
elif "活动已结束" in html_text:
|
||||
logger.info("😭活动已结束,下次早点来~")
|
||||
sys.exit()
|
||||
else:
|
||||
return set_cookie
|
||||
|
||||
def setMixNick(token):
|
||||
url = "https://jinggeng-isv.isvjcloud.com/front/setMixNick"
|
||||
payload = f"strTMMixNick={token}&userId={user_id}&source=01"
|
||||
headers = {
|
||||
'Host': 'jinggeng-isv.isvjcloud.com',
|
||||
'Accept': 'application/json, text/javascript, */*; q=0.01',
|
||||
'X-Requested-With': 'XMLHttpRequest',
|
||||
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
|
||||
'Accept-Encoding': 'gzip, deflate, br',
|
||||
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
|
||||
'Origin': 'https://jinggeng-isv.isvjcloud.com',
|
||||
'User-Agent': ua,
|
||||
'Connection': 'keep-alive',
|
||||
'Referer': f'{activityUrl}&isOpenCard=0&from=kouling',
|
||||
'Content-Length': '116',
|
||||
'Cookie': activityCookie
|
||||
}
|
||||
try:
|
||||
response = requests.request("POST", url, headers=headers, data=payload)
|
||||
res = response.text
|
||||
setMixNick0 = eval(res.replace('true', 'True').replace('false', 'False').replace('none', 'None'))['msg']
|
||||
refresh_cookies(response)
|
||||
return setMixNick0
|
||||
except Exception as e:
|
||||
logger.info(e)
|
||||
return
|
||||
|
||||
def recordActPvUvdata(token):
|
||||
url = "https://jinggeng-isv.isvjcloud.com/ql/front/reportActivity/recordActPvUvData"
|
||||
payload = F"userId={user_id}&actId={ac_id}"
|
||||
headers = {
|
||||
'Host': 'jinggeng-isv.isvjcloud.com',
|
||||
'Accept': 'application/json, text/javascript, */*; q=0.01',
|
||||
'X-Requested-With': 'XMLHttpRequest',
|
||||
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
|
||||
'Accept-Encoding': 'gzip, deflate, br',
|
||||
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
|
||||
'Origin': 'https://jinggeng-isv.isvjcloud.com',
|
||||
'User-Agent': ua,
|
||||
'Connection': 'keep-alive',
|
||||
'Referer': f'{activityUrl}&isOpenCard=0&from=kouling',
|
||||
'Content-Length': '56',
|
||||
'Cookie': f"IsvToken={token};" + activityCookie
|
||||
}
|
||||
response = requests.request("POST", url, headers=headers, data=payload)
|
||||
refresh_cookies(response)
|
||||
|
||||
def checkTokenInSession(token):
|
||||
url = "https://jinggeng-isv.isvjcloud.com/front/checkTokenInSession"
|
||||
payload = f"userId={user_id}&token={token}"
|
||||
headers = {
|
||||
'Host': 'jinggeng-isv.isvjcloud.com',
|
||||
'Accept': 'application/json, text/javascript, */*; q=0.01',
|
||||
'X-Requested-With': 'XMLHttpRequest',
|
||||
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
|
||||
'Accept-Encoding': 'gzip, deflate, br',
|
||||
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
|
||||
'Origin': 'https://jinggeng-isv.isvjcloud.com',
|
||||
'User-Agent': ua,
|
||||
'Connection': 'keep-alive',
|
||||
'Referer': f'{activityUrl}&isOpenCard=0&from=kouling',
|
||||
'Content-Length': '99',
|
||||
'Cookie': activityCookie
|
||||
}
|
||||
response = requests.request("POST", url, headers=headers, data=payload)
|
||||
refresh_cookies(response)
|
||||
|
||||
def shopmember(cookie):
|
||||
url = f'https://shopmember.m.jd.com/shopcard/?venderId={user_id}&channel=401&returnUrl={quote_plus(activityUrl + "&isOpenCard=1")}'
|
||||
headers = {
|
||||
'Host': 'shopmember.m.jd.com',
|
||||
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
|
||||
'Connection': 'keep-alive',
|
||||
'Cookie': cookie,
|
||||
'User-Agent': ua,
|
||||
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
|
||||
'Referer': 'https://jinggeng-isv.isvjcloud.com/',
|
||||
'Accept-Encoding': 'gzip, deflate, br'
|
||||
}
|
||||
requests.request("GET", url, headers=headers)
|
||||
|
||||
def bindWithVender(cookie):
|
||||
try:
|
||||
body = {"venderId": user_id, "shopId": user_id, "bindByVerifyCodeFlag": 1,"registerExtend": {},"writeChildFlag":0, "channel": 401}
|
||||
url = f'https://api.m.jd.com/client.action?appid=jd_shop_member&functionId=bindWithVender&body={json.dumps(body)}&client=H5&clientVersion=9.2.0&uuid=88888&h5st=20220614102046318%3B7327310984571307%3Bef79a%3Btk02wa31b1c7718neoZNHBp75rw4pE%2Fw7fXko2SdFCd1vIeWy005pEHdm0lw2CimWpaw3qc9il8r9xVLHp%2Bhzmo%2B4swg%3Bdd9526fc08234276b392435c8623f4a737e07d4503fab90bf2cd98d2a3a778ac%3B3.0%3B1655173246318'
|
||||
headers = {
|
||||
'Host': 'api.m.jd.com',
|
||||
'Cookie': cookie,
|
||||
'Accept-Encoding': 'gzip, deflate, br',
|
||||
'Connection': 'keep-alive',
|
||||
'Accept': '*/*',
|
||||
'User-Agent': ua,
|
||||
'Referer': f'https://shopmember.m.jd.com/shopcard/?venderId={user_id}&channel=401&returnUrl={quote_plus(activityUrl + "&isOpenCard=1")}'
|
||||
}
|
||||
response = requests.get(url=url, headers=headers, timeout=30).text
|
||||
res = json.loads(response)
|
||||
if res['success']:
|
||||
open_result = res['message']
|
||||
if "火爆" in open_result:
|
||||
logger.info(f"\t⛈⛈⛈{open_result}")
|
||||
else:
|
||||
logger.info(f"\t🎉🎉🎉{open_result}")
|
||||
return res['message']
|
||||
except Exception as e:
|
||||
logger.info(e)
|
||||
|
||||
def receiveInviteJoinAward(token, awardId):
|
||||
url = "https://jinggeng-isv.isvjcloud.com/ql/front/receiveInviteJoinAward"
|
||||
payload = f"act_id={ac_id}&user_id={user_id}&awardId={awardId}"
|
||||
headers = {
|
||||
'Host': 'jinggeng-isv.isvjcloud.com',
|
||||
'Accept': 'application/json, text/javascript, */*; q=0.01',
|
||||
'X-Requested-With': 'XMLHttpRequest',
|
||||
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
|
||||
'Accept-Encoding': 'gzip, deflate, br',
|
||||
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
|
||||
'Origin': 'https://jinggeng-isv.isvjcloud.com',
|
||||
'User-Agent': ua,
|
||||
'Connection': 'keep-alive',
|
||||
'Referer': f'{activityUrl}&isOpenCard=0&from=kouling&sid=09a25fb32a08d0b0fbdef65ab52a40dw&un_area=15_1213_1215_50108',
|
||||
'Content-Length': '99',
|
||||
'Cookie': f"IsvToken={token};" + activityCookie
|
||||
}
|
||||
response = requests.request("POST", url, headers=headers, data=payload).text
|
||||
res = eval(response.replace('true', 'True').replace('false', 'False').replace('none', 'None'))
|
||||
if res['succ'] is True:
|
||||
msg = eval(str(res['msg']).replace('\\\\', ''))
|
||||
if msg['isSendSucc']:
|
||||
awardType = msg['drawAwardDto']['awardType'].replace('JD_BEAN', '京豆').replace('JD_POINT', '积分')
|
||||
awardDenomination = msg['drawAwardDto']['awardDenomination']
|
||||
logger.info(f"\t🎉🎉成功领取{awardDenomination}{awardType}")
|
||||
else:
|
||||
logger.info(f"\t🎉🎉{res['msg']}")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
r = redis_conn()
|
||||
try:
|
||||
cks = getCk
|
||||
if not cks:
|
||||
sys.exit()
|
||||
except:
|
||||
logger.info("未获取到有效COOKIE,退出程序!")
|
||||
sys.exit()
|
||||
global inviterCode, inviteSuccNums, activityUrl, needInviteNums, rewardIndex, firstCk
|
||||
inviteSuccNums = 0
|
||||
inviterCode = inviterNick
|
||||
activityUrl = activity_url
|
||||
needInviteNums = None
|
||||
rewardIndex = 0
|
||||
num = 0
|
||||
for cookie in cks:
|
||||
num += 1
|
||||
if num == 1:
|
||||
firstCk = cookie
|
||||
if num % 5 == 0:
|
||||
logger.info("⏰等待5s")
|
||||
time.sleep(5)
|
||||
global ua, activityCookie, token, getIndex
|
||||
getIndex = 0
|
||||
ua = userAgent()
|
||||
try:
|
||||
pt_pin = re.compile(r'pt_pin=(.*?);').findall(cookie)[0]
|
||||
pt_pin = unquote_plus(pt_pin)
|
||||
except IndexError:
|
||||
pt_pin = f'用户{num}'
|
||||
logger.info(f'\n******开始【京东账号{num}】{pt_pin} *********\n')
|
||||
logger.info(datetime.now())
|
||||
token = ''
|
||||
activityCookie = ''
|
||||
activityCookie = getActivity(num, 0, inviterCode, 0)
|
||||
try:
|
||||
token = getToken(cookie, r)
|
||||
if token is None:
|
||||
if num == 1:
|
||||
logger.info(f"⚠️车头获取Token失败,退出本程序!")
|
||||
# sys.exit()
|
||||
os._exit()
|
||||
logger.info(f"⚠️获取Token失败!⏰等待3s")
|
||||
time.sleep(3)
|
||||
continue
|
||||
except:
|
||||
logger.info(f"⚠️获取Token失败!⏰等待3s")
|
||||
time.sleep(3)
|
||||
continue
|
||||
time.sleep(1.5)
|
||||
setMixNick0 = setMixNick(token)
|
||||
if setMixNick0 is None:
|
||||
if num == 1:
|
||||
logger.info(f"⚠️车头获取邀请码失败,退出本程序!")
|
||||
sys.exit()
|
||||
else:
|
||||
continue
|
||||
else:
|
||||
logger.info(f"邀请码->: {setMixNick0}")
|
||||
time.sleep(1)
|
||||
logger.info(f"准备助力-->: {inviterCode}")
|
||||
inviteSuccNum = getActivity(num, 0, inviterCode, 1)
|
||||
if num == 1:
|
||||
errorMsg0 = inviteSuccNum[0]
|
||||
if "跳开卡页面" not in errorMsg0:
|
||||
logger.info("无法助力自己")
|
||||
inviteSuccNums0 = inviteSuccNum[1]
|
||||
needInviteNums = inviteSuccNum[2]
|
||||
inviteSuccNums = len(eval(inviteSuccNums0))
|
||||
logger.info(f"🛳已经邀请{inviteSuccNums}人")
|
||||
for i, needNum0 in enumerate(needInviteNums):
|
||||
needNum = needNum0[0]
|
||||
awardId = needNum0[1]
|
||||
if inviteSuccNums >= needNum:
|
||||
logger.info(f"🎉恭喜已完成第{i + 1}档邀请,快去领奖吧!")
|
||||
time.sleep(1)
|
||||
recordActPvUvdata(token)
|
||||
checkTokenInSession(token)
|
||||
time.sleep(1)
|
||||
if equityType == "JD_GOODS":
|
||||
logger.info(f"\t🎉🎉成功获得实物奖励,请尽快前往领取:{activityUrl}")
|
||||
else:
|
||||
receiveInviteJoinAward(token, awardId)
|
||||
rewardIndex += 1
|
||||
time.sleep(3)
|
||||
if i + 1 == len(needInviteNums):
|
||||
logger.info("🎉🎉🎉奖励全部领取完毕~")
|
||||
sys.exit()
|
||||
time.sleep(1)
|
||||
inviterCode = setMixNick0
|
||||
activityUrl = f"https://jinggeng-isv.isvjcloud.com/ql/front/showInviteJoin?id={ac_id}&user_id={user_id}&inviterNick={inviterCode}"
|
||||
continue
|
||||
else:
|
||||
errorMsg1 = inviteSuccNum
|
||||
# logger.info("num != 1", errorMsg1)
|
||||
if "跳开卡页面" not in errorMsg1:
|
||||
if "已成功邀请您加入本店会员" in errorMsg1:
|
||||
logger.info("⛈已经是会员了,无法完成助力")
|
||||
else:
|
||||
logger.info(f"🛳{errorMsg1}")
|
||||
time.sleep(1)
|
||||
continue
|
||||
time.sleep(1.5)
|
||||
recordActPvUvdata(token)
|
||||
checkTokenInSession(token)
|
||||
time.sleep(1)
|
||||
shopmember(cookie)
|
||||
logger.info("现在去开卡")
|
||||
open_result = bindWithVender(cookie)
|
||||
if open_result is not None:
|
||||
if "火爆" in open_result:
|
||||
time.sleep(1.5)
|
||||
logger.info("\t尝试重新入会 第1次")
|
||||
open_result = bindWithVender(cookie)
|
||||
if "火爆" in open_result:
|
||||
time.sleep(1.5)
|
||||
logger.info("\t尝试重新入会 第2次")
|
||||
open_result = bindWithVender(cookie)
|
||||
time.sleep(1)
|
||||
if num == 1:
|
||||
getIndex = 2
|
||||
errorMsg2 = getActivity(num, 1, inviterCode, getIndex)
|
||||
time.sleep(2)
|
||||
recordActPvUvdata(token)
|
||||
checkTokenInSession(token)
|
||||
# logger.info(errorMsg2, '============================')
|
||||
if num == 1 and "开卡失败" in errorMsg2:
|
||||
logger.info(f"⚠️车头疑似火爆号,退出本程序!")
|
||||
sys.exit()
|
||||
if "已成功邀请您加入本店会员" in errorMsg2:
|
||||
inviteSuccNums += 1
|
||||
logger.info(f"🛳已经邀请{inviteSuccNums}人")
|
||||
for i, needNum1 in enumerate(needInviteNums):
|
||||
# logger.info(i, needNum1)
|
||||
needNum = needNum1[0]
|
||||
awardId = needNum1[1]
|
||||
equityType = needNum1[2]
|
||||
if inviteSuccNums >= needNum:
|
||||
if rewardIndex >= i + 1:
|
||||
time.sleep(1)
|
||||
continue
|
||||
logger.info(f"🎉恭喜已完成第{i + 1}档邀请,快去领奖吧!")
|
||||
token = getToken(firstCk, r)
|
||||
activityCookie = getActivity(1, 0, inviterCode, 3)
|
||||
setMixNick(token)
|
||||
time.sleep(0.5)
|
||||
recordActPvUvdata(token)
|
||||
time.sleep(0.5)
|
||||
if equityType == "JD_GOODS":
|
||||
logger.info(f"\t🎉🎉成功获得实物奖励,请尽快前往领取:{activityUrl}")
|
||||
else:
|
||||
receiveInviteJoinAward(token, awardId)
|
||||
rewardIndex += 1
|
||||
time.sleep(3)
|
||||
if i + 1 == len(needInviteNums):
|
||||
logger.info("🎉🎉🎉奖励全部领取完毕~")
|
||||
sys.exit()
|
||||
if num == 1:
|
||||
inviterCode = setMixNick0
|
||||
activityUrl = f"https://jinggeng-isv.isvjcloud.com/ql/front/showInviteJoin?id={ac_id}&user_id={user_id}&inviterNick={inviterCode}"
|
||||
|
||||
time.sleep(3)
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
25
jd_lzdz1_joinCommon.js
Normal file
25
jd_lzdz1_joinCommon.js
Normal file
File diff suppressed because one or more lines are too long
254
jd_tanwei.js
254
jd_tanwei.js
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user