更新 点点赚_api.py

This commit is contained in:
chickliu 2024-11-18 22:48:06 +08:00
parent 70670de652
commit f993db0f77

View File

@ -1,496 +1,504 @@
# --------------------------------注释区-------------------------------- # --------------------------------注释区--------------------------------
# 入口:https://168750027-1257141735.cos-website.ap-nanjing.myqcloud.com/index.html?pid=16345 # 入口:https://168750027-1257141735.cos-website.ap-nanjing.myqcloud.com/index.html?pid=16345
# #
# #
# 需抓取数据: # 需抓取数据:
# * 填写自动过检的api接口 本地 内网ip:5000 非本地自行进行穿透 # * 填写自动过检的api接口 本地 内网ip:5000 非本地自行进行穿透
# * 登录多少个账号就跑多少个账号 # * 登录多少个账号就跑多少个账号
# #
# #
# 抓取请求头中的user-agent填入yuanshen_useragent 无论多少个号都只填一个即可!!!! # 抓取请求头中的user-agent填入yuanshen_useragent 无论多少个号都只填一个即可!!!!
# #
# 变量名:yuanshen_api # 变量名:yuanshen_api
# #
# 填支付宝账号#姓名到 yuanshen_ddz_alipay 即可自动提现 # 填支付宝账号#姓名到 yuanshen_ddz_alipay 即可自动提现
withdraw_points = 10000 #提现积分阈值 10000=1r withdraw_points = 10000 #提现积分阈值 10000=1r
# --------------------------------祈求区-------------------------------- # --------------------------------祈求区--------------------------------
# _ooOoo_ # _ooOoo_
# o8888888o # o8888888o
# 88" . "88 # 88" . "88
# (| -_- |) # (| -_- |)
# O\ = /O # O\ = /O
# ____/`---'\____ # ____/`---'\____
# . ' \\| |// `. # . ' \\| |// `.
# / \\||| : |||// \ # / \\||| : |||// \
# / _||||| -:- |||||- \ # / _||||| -:- |||||- \
# | | \\\ - /// | | # | | \\\ - /// | |
# | \_| ''\---/'' | | # | \_| ''\---/'' | |
# \ .-\__ `-` ___/-. / # \ .-\__ `-` ___/-. /
# ___`. .' /--.--\ `. . __ # ___`. .' /--.--\ `. . __
# ."" '< `.___\_<|>_/___.' >'"". # ."" '< `.___\_<|>_/___.' >'"".
# | | : `- \`.;`\ _ /`;.`/ - ` : | | # | | : `- \`.;`\ _ /`;.`/ - ` : | |
# \ \ `-. \_ __\ /__ _/ .-` / / # \ \ `-. \_ __\ /__ _/ .-` / /
# ======`-.____`-.___\_____/___.-`____.-'====== # ======`-.____`-.___\_____/___.-`____.-'======
# `=---=' # `=---='
# #
# ............................................. # .............................................
# 佛祖保佑 永无BUG # 佛祖保佑 永无BUG
# 佛祖镇楼 BUG辟邪 # 佛祖镇楼 BUG辟邪
# --------------------------------代码区-------------------------------- # --------------------------------代码区--------------------------------
import requests import requests
import time import time
import os import os
import json import json
import hashlib import hashlib
import random import random
import re import re
import logging import logging
import sys import sys
import string import string
from base64 import b64encode from base64 import b64encode
import base64 import base64
import uuid import uuid
from urllib.parse import urlparse, parse_qs,quote from urllib.parse import urlparse, parse_qs,quote
logging.basicConfig(level=logging.INFO, format='[%(levelname)s] ===> %(message)s') logging.basicConfig(level=logging.INFO, format='[%(levelname)s] ===> %(message)s')
code = "点点赚_api版" code = "点点赚_api版"
ver = "1.0" ver = "1.1"
envname = "yuanshen_api" envname = "yuanshen_api"
debug = False #debug模式 开启即从脚本内部获取环境变量 debug = False #debug模式 开启即从脚本内部获取环境变量
debugcookie = "127.0.0.1:5000" #debug模式cookie debugcookie = "127.0.0.1:5000" #debug模式cookie
is_bulletin = True #公告开关 is_bulletin = True #公告开关
is_toulu = False #偷撸公告开关 is_toulu = False #偷撸公告开关
is_with_sleep = False #是否开启随机延时 is_with_sleep = False #是否开启随机延时
class env(): class env():
""" """
env模块,获取cookie并转成列表,统计时间,提示脚本开始结束,检测一些配置,try except异常处理 env模块,获取cookie并转成列表,统计时间,提示脚本开始结束,检测一些配置,try except异常处理
:param args: 传递给env的参数 :param args: 传递给env的参数
:param kwargs: 传递给env的关键字参数 :param kwargs: 传递给env的关键字参数
:return: Null :return: Null
Powered by huaji Powered by huaji
""" """
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
self.cookie = None self.cookie = None
self.env_ver = '1.5' #版本号 self.env_ver = '1.5' #版本号
self.split_chars = ['@', '&', '\n'] #分隔符 self.split_chars = ['@', '&', '\n'] #分隔符
self.identifiers = ['Powered By Huaji', 'QQ Group:901898186', 'yuanshen'] #标识符 self.identifiers = ['Powered By Huaji', 'QQ Group:901898186', 'yuanshen'] #标识符
def check_file(self): def check_file(self):
file_path = __file__ file_path = __file__
try: try:
with open(file_path, 'r', encoding='utf-8') as file: with open(file_path, 'r', encoding='utf-8') as file:
content = file.read() content = file.read()
results = {} results = {}
# 批量检查每个标识符 # 批量检查每个标识符
for identifier in self.identifiers: for identifier in self.identifiers:
if identifier in content: if identifier in content:
results[identifier] = True results[identifier] = True
else: else:
results[identifier] = False results[identifier] = False
logging.error(f"文件可能被恶意篡改,请勿修改文件内容") logging.error(f"文件可能被恶意篡改,请勿修改文件内容")
all_identifiers_present = all(results.values()) all_identifiers_present = all(results.values())
if not all_identifiers_present: if not all_identifiers_present:
logging.error(f"文件可能被恶意篡改,请勿修改文件内容") logging.error(f"文件可能被恶意篡改,请勿修改文件内容")
self.force_exit() self.force_exit()
except Exception as e: except Exception as e:
print(f"读取文件时发生错误: {e}") print(f"读取文件时发生错误: {e}")
self.force_exit() self.force_exit()
def split_cookies(self): def split_cookies(self):
"""根据多个分隔符分割cookie""" """根据多个分隔符分割cookie"""
for sep in self.split_chars: for sep in self.split_chars:
if sep in self.cookie: if sep in self.cookie:
return self.cookie.split(sep) return self.cookie.split(sep)
return [self.cookie] return [self.cookie]
def scmain(self): def scmain(self):
apiurl = 'http://' + self.cookies[0] apiurl = 'http://' + self.cookies[0]
r = requests.get(apiurl + '/getallwx').json() r = requests.get(apiurl + '/getallwx').json()
for i, cookie in enumerate(r, 1): for i, cookie in enumerate(r, 1):
print(f"--------开始第{i}个账号--------") print(f"--------开始第{i}个账号--------")
main = yuanshen(cookie,apiurl) main = yuanshen(cookie,apiurl)
main.main() main.main()
print(f"--------第{i}个账号执行完毕--------") print(f"--------第{i}个账号执行完毕--------")
def force_exit(self,code=0): def force_exit(self,code=0):
exit() exit()
print("Warning: 篡改你妈") print("Warning: 篡改你妈")
os._exit(code) # 强制退出程序 os._exit(code) # 强制退出程序
sys.exit(code) # 正常退出 sys.exit(code) # 正常退出
import ctypes import ctypes
while True: while True:
ctypes.string_at(114514) ctypes.string_at(114514)
ctypes.string_at(1919810) ctypes.string_at(1919810)
ctypes.string_at(666666) ctypes.string_at(666666)
print("Warning: 篡改你妈") print("Warning: 篡改你妈")
def run(self): def run(self):
if not os.getenv(envname) and not debug: if not os.getenv(envname) and not debug:
logging.warning(f"请先设置环境变量[{envname}]") logging.warning(f"请先设置环境变量[{envname}]")
self.force_exit() self.force_exit()
self.cookie = os.getenv(envname, "") self.cookie = os.getenv(envname, "")
if debug: if debug:
self.cookie = debugcookie self.cookie = debugcookie
if is_bulletin: if is_bulletin:
try: try:
print(requests.get("https://gitee.com/HuaJiB/yuanshen34/raw/master/pubilc.txt").text, "\n\n\n") print(requests.get("https://gitee.com/HuaJiB/yuanshen34/raw/master/pubilc.txt").text, "\n\n\n")
except: except:
logging.error("网络异常,链接公告服务器失败(gitee),请检查网络") logging.error("网络异常,链接公告服务器失败(gitee),请检查网络")
self.force_exit() self.force_exit()
if is_toulu: if is_toulu:
try: try:
txt = ''' txt = '''
此为滑稽的偷撸本本 如你不在滑稽的小群却意外通过某种渠道获得了该脚本 此为滑稽的偷撸本本 如你不在滑稽的小群却意外通过某种渠道获得了该脚本
请联系QQ3487934983 提供证据后 你将代替泄露人员获得该群位置 请联系QQ3487934983 提供证据后 你将代替泄露人员获得该群位置
======================================================= =======================================================
''' '''
print(txt*5) print(txt*5)
except: except:
self.force_exit() self.force_exit()
if is_with_sleep: if is_with_sleep:
random_time = random.randint(10,60) random_time = random.randint(10,60)
logging.info(f"随机延时[{random_time}]秒") logging.info(f"随机延时[{random_time}]秒")
time.sleep(random_time) time.sleep(random_time)
self.cookies = self.split_cookies() self.cookies = self.split_cookies()
account_count = len(self.cookies) account_count = len(self.cookies)
logging.info(f"一共获取到{account_count}个账号") logging.info(f"一共获取到{account_count}个账号")
print(f"=========🔔开始执行[{code}][{ver}]=========\n") print(f"=========🔔开始执行[{code}][{ver}]=========\n")
start_time = time.time() start_time = time.time()
if debug: if debug:
self.scmain() self.scmain()
else: else:
try: try:
self.scmain() self.scmain()
except Exception as e: except Exception as e:
logging.error(f"脚本执行出错: {e}") logging.error(f"脚本执行出错: {e}")
end_time = time.time() end_time = time.time()
execution_time = end_time - start_time execution_time = end_time - start_time
print(f"\n============🔔脚本[{code}]执行结束============") print(f"\n============🔔脚本[{code}]执行结束============")
print(f"本次脚本总运行时间: [{execution_time:.2f}] 秒") print(f"本次脚本总运行时间: [{execution_time:.2f}] 秒")
self.force_exit() self.force_exit()
def main(self): def main(self):
self.check_file() self.check_file()
self.run() self.run()
def random_str(self,charset="all", length=8, to_upper=False,to_lower=False): def random_str(self,charset="all", length=8, to_upper=False,to_lower=False):
if charset == "all": #包含大小写字母和数字 if charset == "all": #包含大小写字母和数字
chars = string.ascii_letters + string.digits chars = string.ascii_letters + string.digits
elif charset == "letters": #大小写字母 elif charset == "letters": #大小写字母
chars = string.ascii_letters chars = string.ascii_letters
elif charset == "digits": elif charset == "digits":
chars = string.digits chars = string.digits
elif charset == "lowercase": #小写字母 elif charset == "lowercase": #小写字母
chars = string.ascii_lowercase chars = string.ascii_lowercase
elif charset == "uuid": elif charset == "uuid":
return str(uuid.uuid4()) return str(uuid.uuid4())
elif charset == "uuid_str": elif charset == "uuid_str":
return str(uuid.uuid4()).replace("-", "") return str(uuid.uuid4()).replace("-", "")
elif charset != '' and charset is not None: elif charset != '' and charset is not None:
chars = charset chars = charset
random_string = ''.join(random.choice(chars) for _ in range(length)) random_string = ''.join(random.choice(chars) for _ in range(length))
if to_upper: if to_upper:
return random_string.upper() return random_string.upper()
elif to_lower: elif to_lower:
return random_string.lower() return random_string.lower()
else: else:
return random_string return random_string
def aes_encrypt(self,data): def aes_encrypt(self,data):
from Crypto.Cipher import AES from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad from Crypto.Util.Padding import pad, unpad
from binascii import hexlify, unhexlify from binascii import hexlify, unhexlify
key = self.key.encode('utf-8') key = self.key.encode('utf-8')
iv = self.iv.encode('utf-8') iv = self.iv.encode('utf-8')
cipher = AES.new(key, AES.MODE_CBC, iv) cipher = AES.new(key, AES.MODE_CBC, iv)
padded_plaintext = pad(data.encode('utf-8'), AES.block_size) padded_plaintext = pad(data.encode('utf-8'), AES.block_size)
ciphertext = cipher.encrypt(padded_plaintext) ciphertext = cipher.encrypt(padded_plaintext)
encrypted_base64 = b64encode(ciphertext).decode('utf-8') encrypted_base64 = b64encode(ciphertext).decode('utf-8')
return encrypted_base64 return encrypted_base64
from functools import wraps
def retry_(max_retries=3, retry_delay=1): def retry(exceptions = Exception, tries=5, delay=2, backoff=2):
def decorator(func): """
def wrapper(*args, **kwargs): 简单的重试 module如果重试失败则抛出错误
retries = 0 """
while retries < max_retries: def decorator(func):
try: @wraps(func)
return func(*args, **kwargs) def wrapper(*args, **kwargs):
except requests.exceptions.RequestException as e: # 每次调用时初始化独立的重试计数和延迟时间
retries += 1 _tries, _delay = tries, delay
if retries < max_retries: while _tries > 1:
logging.info(f"发生错误:将在{retry_delay}秒后重试") try:
time.sleep(retry_delay) return func(*args, **kwargs)
else: except exceptions as e:
logging.info("已超过最大重试次数!") print(f"发生错误:[{e}], Retrying in {_delay} seconds ...")
raise time.sleep(_delay)
return wrapper _tries -= 1
return decorator _delay *= backoff
class yuanshen: # 最后一次尝试
def __init__(self,cookie,apiurl) -> None: return func(*args, **kwargs)
self.biz = ['MzA4MjQ5NDMwNg==','MzI2OTA0NzQ5OA==','MzU4OTQ3MDc0Mg=='] return wrapper
self.apiurl = apiurl return decorator
self.Wxid = cookie['Wxid']
self.bz = cookie['wxname'] class yuanshen:
logging.info(f'[{self.bz}]开始运行') def __init__(self,cookie,apiurl) -> None:
self.biz = ['MzA4MjQ5NDMwNg==','MzI2OTA0NzQ5OA==','MzU4OTQ3MDc0Mg==']
self.apiurl = apiurl
def extract_url(self,url): self.Wxid = cookie['Wxid']
# 解析URL self.bz = cookie['wxname']
parsed_url = urlparse(url) logging.info(f'[{self.bz}]开始运行')
full_domain = parsed_url.netloc
query_params = url.split('?')[1]
def extract_url(self,url):
# 解析URL
if not query_params: parsed_url = urlparse(url)
query_params = None full_domain = parsed_url.netloc
query_params = url.split('?')[1]
return full_domain, query_params
def push(self): if not query_params:
url = f"{self.apiurl}/zdgjc" query_params = None
data = {"url":self.acturl}
r = requests.post(url,json=data).json() return full_domain, query_params
logging.info(f"遇到检测文章:推送结果[{r}]")
def push(self):
@retry_(max_retries=3, retry_delay=1) url = f"{self.apiurl}/zdgjc"
def getreadurl(self): data = {"url":self.acturl}
url = f"http://{self.baseurl}/index/mob/get_read_qr.html" r = requests.post(url,json=data).json()
r = requests.get(url,headers=self.headers,cookies=self.cookie).json() logging.info(f"遇到检测文章:推送结果[{r}]")
if r['code'] == 1:
url_pattern = r"http[s]?://[^\s]+" @retry()
urls = re.findall(url_pattern, r['web_url']) def getreadurl(self):
self.domain,self.readcode = self.extract_url(urls[0]) url = f"http://{self.baseurl}/index/mob/get_read_qr.html"
if urls: r = requests.get(url,headers=self.headers,cookies=self.cookie).json()
logging.info(f"获取到阅读链接: [{self.domain}][{self.readcode}]") if r['code'] == 1:
self.readh = { url_pattern = r"http[s]?://[^\s]+"
"Host": f"{self.domain}", urls = re.findall(url_pattern, r['web_url'])
"Connection": "keep-alive", self.domain,self.readcode = self.extract_url(urls[0])
"Content-Length": "47", if urls:
"Accept": "*/*", logging.info(f"获取到阅读链接: [{self.domain}][{self.readcode}]")
"X-Requested-With": "XMLHttpRequest", self.readh = {
"User-Agent": ua, "Host": f"{self.domain}",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", "Connection": "keep-alive",
"Origin": f"http://{self.domain}", "Content-Length": "47",
"Referer": f"http://{self.domain}/?{self.readcode}", "Accept": "*/*",
"Accept-Encoding": "gzip, deflate", "X-Requested-With": "XMLHttpRequest",
"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7" "User-Agent": ua,
} "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
return True "Origin": f"http://{self.domain}",
else: "Referer": f"http://{self.domain}/?{self.readcode}",
logging.warning("❌️未获取到阅读链接") "Accept-Encoding": "gzip, deflate",
return False "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7"
else: }
logging.warning(f"❌️未获取到阅读链接[{r}]") return True
return False else:
@retry_(max_retries=3, retry_delay=1) logging.warning("❌️未获取到阅读链接")
def read(self): return False
url = f"http://{self.domain}/index/index/get_article.html" else:
url2 = f"http://{self.domain}/index/index/auth_record.html" logging.warning(f"❌️未获取到阅读链接[{r}]")
return False
while True: @retry()
data = { def read(self):
'code': self.readcode, url = f"http://{self.domain}/index/index/get_article.html"
'uid':self.uid url2 = f"http://{self.domain}/index/index/auth_record.html"
}
r = requests.post(url,headers=self.readh,data=data,timeout=10).json() while True:
if r['code'] == 1: data = {
self.acturl = r["data"]["info"]["link2"] 'code': self.readcode,
rid = int(r['data']['info']['rid']) 'uid':self.uid
logging.info(f"获取文章成功: [{r['msg']}]") }
if 'addtime' not in r['data']['info']: r = requests.post(url,headers=self.readh,data=data,timeout=10).json()
logging.info("遇到检测文章 推送ing...") if r['code'] == 1:
self.push() self.acturl = r["data"]["info"]["link2"]
time.sleep(random.randint(18,28)) rid = int(r['data']['info']['rid'])
else: logging.info(f"获取文章成功: [{r['msg']}]")
time.sleep(random.randint(9,18)) if 'addtime' not in r['data']['info']:
else: logging.info("遇到检测文章 推送ing...")
logging.warning(f"❌️获取文章失败: [{r}]") self.push()
break time.sleep(random.randint(18,28))
else:
data = { time.sleep(random.randint(9,18))
'rid': rid, else:
'time_is_gou':1 logging.warning(f"❌️获取文章失败: [{r}]")
} break
r = requests.post(url2,headers=self.readh,data=data,timeout=10).json()
if r['code'] == 1: data = {
logging.info(f"第[{r['txt']}]篇文章阅读成功") 'rid': rid,
else: 'time_is_gou':1
logging.warning(f"❌️阅读文章失败: [{r['msg']}]") }
if '完成' in r['msg']: r = requests.post(url2,headers=self.readh,data=data,timeout=10).json()
url = f"http://{self.domain}/index/index/read_result.html" if r['code'] == 1:
data = { logging.info(f"第[{r['txt']}]篇文章阅读成功")
'code':self.readcode else:
} logging.warning(f"❌️阅读文章失败: [{r['msg']}]")
r = requests.post(url,headers=self.readh,data=data,timeout=10).json() if '完成' in r['msg']:
if r['code'] == 1: url = f"http://{self.domain}/index/index/read_result.html"
logging.info(f"🔔结束阅读成功: [{r['msg']}]") data = {
else: 'code':self.readcode
logging.warning(f"❌️结束阅读失败: [{r}]") }
break r = requests.post(url,headers=self.readh,data=data,timeout=10).json()
if r['code'] == 1:
time.sleep(random.randint(2,5)) logging.info(f"🔔结束阅读成功: [{r['msg']}]")
else:
def userinfo(self): logging.warning(f"❌️结束阅读失败: [{r}]")
url = f'http://{self.baseurl}/index/mob/index.html' break
r = requests.get(url,headers=self.headers2,cookies=self.cookie)
if r.status_code == 200: time.sleep(random.randint(2,5))
match = re.search(r'(?<=可用积分:)\d+', r.text)
if match: def userinfo(self):
points = int(match.group()) url = f'http://{self.baseurl}/index/mob/index.html'
logging.info(f"🔔当前账号剩余积分:[{points}]=[{points/10000}]元💵") r = requests.get(url,headers=self.headers2,cookies=self.cookie)
else: if r.status_code == 200:
logging.warning("❌️没有获取到积分❌️") match = re.search(r'(?<=可用积分:)\d+', r.text)
if points > withdraw_points: if match:
url = f'http://{self.baseurl}/index/mob/tixian.html' points = int(match.group())
r = requests.get(url,headers=self.headers2,cookies=self.cookie,allow_redirects= False) logging.info(f"🔔当前账号剩余积分:[{points}]=[{points/10000}]元💵")
loginurl = r.headers['Location'] else:
data = {'Wxid':self.Wxid,'url':loginurl} logging.warning("❌️没有获取到积分❌️")
url = requests.post(self.apiurl+'/loginbyweb2',json=data).json()['url'] if points > withdraw_points:
code = url.split('code=')[1].split('&')[0] url = f'http://{self.baseurl}/index/mob/tixian.html'
state = url.split('state=')[1] r = requests.get(url,headers=self.headers2,cookies=self.cookie,allow_redirects= False)
logging.info(f"🔔获取提现链接成功: [{url}]") loginurl = r.headers['Location']
url = f'http://{self.baseurl}/index/mob/fa_tx.html' data = {'Wxid':self.Wxid,'url':loginurl}
wi_po = int(str(points)[:-3] + '000') url = requests.post(self.apiurl+'/loginbyweb2',json=data).json()['url']
wi_money = int(points/10000) code = url.split('code=')[1].split('&')[0]
alipays = os.getenv('yuanshen_ddz_alipay') state = url.split('state=')[1]
if not alipays: logging.info(f"🔔获取提现链接成功: [{url}]")
logging.warning('没有配置支付宝账号') url = f'http://{self.baseurl}/index/mob/fa_tx.html'
return wi_po = int(str(points)[:-3] + '000')
alipays = alipays.split('#') wi_money = int(points/10000)
data = { alipays = os.getenv('yuanshen_ddz_alipay')
"code": code, if not alipays:
"money": wi_money, logging.warning('没有配置支付宝账号')
"kou_credit": wi_po, return
"tx_type": "2", alipays = alipays.split('#')
"ali_name":alipays[1], data = {
"ali_account": alipays[0] "code": code,
} "money": wi_money,
r = requests.post(url,headers=self.headers2,data=data,cookies=self.cookie).json() "kou_credit": wi_po,
logging.info(f'提现结果[{r}]') "tx_type": "2",
else: "ali_name":alipays[1],
logging.info('不提现') "ali_account": alipays[0]
}
r = requests.post(url,headers=self.headers2,data=data,cookies=self.cookie).json()
def login(self): logging.info(f'提现结果[{r}]')
else:
url = 'http://sx.shuxiangby.cn/index/mob/index?cos=1&pid=16345' logging.info('不提现')
h = {
"Host": "sx.shuxiangby.cn",
"Connection": "keep-alive", def login(self):
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Linux; Android 14; 23113RKC6C Build/UKQ1.230804.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.73 Mobile Safari/537.36 XWEB/1300057 MMWEBSDK/20240301 MMWEBID/98 MicroMessenger/8.0.48.2580(0x28003035) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64", url = 'http://sx.shuxiangby.cn/index/mob/index?cos=1&pid=16345'
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/wxpic,image/tpg,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", h = {
"X-Requested-With": "com.tencent.mm", "Host": "sx.shuxiangby.cn",
"Accept-Encoding": "gzip, deflate", "Connection": "keep-alive",
"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7", "Upgrade-Insecure-Requests": "1",
} "User-Agent": "Mozilla/5.0 (Linux; Android 14; 23113RKC6C Build/UKQ1.230804.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.73 Mobile Safari/537.36 XWEB/1300057 MMWEBSDK/20240301 MMWEBID/98 MicroMessenger/8.0.48.2580(0x28003035) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64",
r = requests.get(url,headers=h,allow_redirects= False) "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/wxpic,image/tpg,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
loginurl = r.headers['Location'] "X-Requested-With": "com.tencent.mm",
data = {'Wxid':self.Wxid,'url':loginurl} "Accept-Encoding": "gzip, deflate",
url = requests.post(self.apiurl+'/loginbyweb',json=data).json()['url']#http://sx.shuxiangby.cn/index/mob/auth2.html?cos=1&pid=16345&code=011NZQ1w3OGAO33Ac44w3MxDwL2NZQ1S&state=STATE "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7",
print(url) }
r = requests.get(url,headers=h,allow_redirects= False) r = requests.get(url,headers=h,allow_redirects= False)
loginurl = r.headers['Location']#http://41521229395.auth.dianqu33.cn/index/mob/auth.html?cos=1&pid=16345&code=011NZQ1w3OGAO33Ac44w3MxDwL2NZQ1S&state=STATE loginurl = r.headers['Location']
print(loginurl) data = {'Wxid':self.Wxid,'url':loginurl}
domain = urlparse(loginurl).netloc url = requests.post(self.apiurl+'/loginbyweb',json=data).json()['url']#http://sx.shuxiangby.cn/index/mob/auth2.html?cos=1&pid=16345&code=011NZQ1w3OGAO33Ac44w3MxDwL2NZQ1S&state=STATE
h = { print(url)
"Host": domain, r = requests.get(url,headers=h,allow_redirects= False)
"Connection": "keep-alive", loginurl = r.headers['Location']#http://41521229395.auth.dianqu33.cn/index/mob/auth.html?cos=1&pid=16345&code=011NZQ1w3OGAO33Ac44w3MxDwL2NZQ1S&state=STATE
"Upgrade-Insecure-Requests": "1", print(loginurl)
"User-Agent": "Mozilla/5.0 (Linux; Android 14; 23113RKC6C Build/UKQ1.230804.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.73 Mobile Safari/537.36 XWEB/1300057 MMWEBSDK/20240301 MMWEBID/98 MicroMessenger/8.0.48.2580(0x28003035) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64", domain = urlparse(loginurl).netloc
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/wxpic,image/tpg,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", h = {
"X-Requested-With": "com.tencent.mm", "Host": domain,
"Accept-Encoding": "gzip, deflate", "Connection": "keep-alive",
"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7" "Upgrade-Insecure-Requests": "1",
} "User-Agent": "Mozilla/5.0 (Linux; Android 14; 23113RKC6C Build/UKQ1.230804.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.73 Mobile Safari/537.36 XWEB/1300057 MMWEBSDK/20240301 MMWEBID/98 MicroMessenger/8.0.48.2580(0x28003035) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64",
r = requests.get(loginurl,headers=h,allow_redirects= False) "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/wxpic,image/tpg,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
self.cookie = r.headers['Set-Cookie'] "X-Requested-With": "com.tencent.mm",
self.baseurl = f'{random_11_digits()}.sx.shuxiangby.cn' "Accept-Encoding": "gzip, deflate",
self.uid = self.cookie.split('uid=')[1].split(';')[0] "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7"
user_openid = self.cookie.split('user_openid=')[1].split(';')[0] }
PHPSESSID = self.cookie.split('PHPSESSID=')[1].split(';')[0] r = requests.get(loginurl,headers=h,allow_redirects= False)
self.cookie = {'uid':self.uid,'user_openid':user_openid,'PHPSESSID':PHPSESSID} self.cookie = r.headers['Set-Cookie']
logging.info('登录成功') self.baseurl = f'{random_11_digits()}.sx.shuxiangby.cn'
self.headers = { self.uid = self.cookie.split('uid=')[1].split(';')[0]
"Host": self.baseurl, user_openid = self.cookie.split('user_openid=')[1].split(';')[0]
"Connection": "keep-alive", PHPSESSID = self.cookie.split('PHPSESSID=')[1].split(';')[0]
"Accept": "*/*", self.cookie = {'uid':self.uid,'user_openid':user_openid,'PHPSESSID':PHPSESSID}
"User-Agent": ua, logging.info('登录成功')
"X-Requested-With": "XMLHttpRequest", self.headers = {
"Referer": f"http://{self.baseurl}/index/mob/index.html", "Host": self.baseurl,
"Accept-Encoding": "gzip, deflate", "Connection": "keep-alive",
"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7" "Accept": "*/*",
} "User-Agent": ua,
"X-Requested-With": "XMLHttpRequest",
self.headers2 = { "Referer": f"http://{self.baseurl}/index/mob/index.html",
"Host": self.baseurl, "Accept-Encoding": "gzip, deflate",
"Connection": "keep-alive", "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7"
"Upgrade-Insecure-Requests": "1", }
"User-Agent": ua,
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/wxpic,image/tpg,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", self.headers2 = {
"X-Requested-With": "com.tencent.mm", "Host": self.baseurl,
"Referer": f"http://{self.baseurl}/index/mob/mine.html", "Connection": "keep-alive",
"Accept-Encoding": "gzip, deflate", "Upgrade-Insecure-Requests": "1",
"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7" "User-Agent": ua,
} "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/wxpic,image/tpg,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"X-Requested-With": "com.tencent.mm",
"Referer": f"http://{self.baseurl}/index/mob/mine.html",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7"
}
def main(self):
self.login()
if self.getreadurl():
print("="*30)
time.sleep(random.randint(3,5))
self.read() def main(self):
time.sleep(random.randint(3,5)) try:
print("="*30) self.login()
self.userinfo() if self.getreadurl():
print("="*30)
time.sleep(random.randint(3,5))
self.read()
time.sleep(random.randint(3,5))
def random_11_digits(): print("="*30)
first_digit = random.randint(1, 9) self.userinfo()
num = str(first_digit) except Exception as e:
for i in range(10): logging.error(f'发生错误:{e}')
num += str(random.randint(0, 9))
return num
if __name__ == '__main__': def random_11_digits():
ua = os.getenv('yuanshen_useragent') first_digit = random.randint(1, 9)
#ua = 'Mozilla/5.0 (Linux; Android 14; 23113RKC6C Build/UKQ1.230804.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/126.0.6478.188 Mobile Safari/537.36 XWEB/1260117 MMWEBSDK/20240301 MMWEBID/4020 MicroMessenger/8.0.48.2580(0x28003035) WeChat/arm64 Weixin Android Tablet NetType/WIFI Language/zh_CN ABI/arm64' num = str(first_digit)
if not ua: for i in range(10):
logging.info("❌你还没有设置user_agent,请设置环境变量:yuanshen_useragent") num += str(random.randint(0, 9))
exit() return num
if __name__ == '__main__':
ua = os.getenv('yuanshen_useragent')
#ua = 'Mozilla/5.0 (Linux; Android 14; 23113RKC6C Build/UKQ1.230804.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/126.0.6478.188 Mobile Safari/537.36 XWEB/1260117 MMWEBSDK/20240301 MMWEBID/4020 MicroMessenger/8.0.48.2580(0x28003035) WeChat/arm64 Weixin Android Tablet NetType/WIFI Language/zh_CN ABI/arm64'
if not ua:
logging.info("❌你还没有设置user_agent,请设置环境变量:yuanshen_useragent")
exit()
env().main() env().main()