[Python] 纯文本查看 复制代码
import requests
from datetime import datetime
import time
import os
import re
from urllib.parse import urlparse, urlunparse
# 请在此处更新你的Cookies!!!
cookies = ""
FORCE_IP = "43.161.244.42"
pcHeaders = {
"Connection": "keep-alive",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"Cookie": cookies
}
DOMAINS = {
"www.pcbeta.com": FORCE_IP,
"bbs.pcbeta.com": FORCE_IP,
"uc.pcbeta.com": FORCE_IP,
"i.pcbeta.com": FORCE_IP
}
def force_ip_url(original_url):
parsed_url = urlparse(original_url)
if parsed_url.hostname in DOMAINS:
new_netloc = DOMAINS[parsed_url.hostname]
if parsed_url.port:
new_netloc += f":{parsed_url.port}"
return urlunparse((
parsed_url.scheme,
new_netloc,
parsed_url.path,
parsed_url.params,
parsed_url.query,
parsed_url.fragment
))
return original_url
pcUrl_original = "https://i.pcbeta.com/home.php?mod=task&do=apply&id=149"
lqurl_original = "https://i.pcbeta.com/home.php?mod=task&do=draw&id=149"
newUrl_original = "https://i.pcbeta.com/home.php?mod=task&item=new"
doingUrl_original = "https://i.pcbeta.com/home.php?mod=task&item=doing"
doneUrl_original = "https://i.pcbeta.com/home.php?mod=task&item=done"
creditUrl_original = "https://i.pcbeta.com/home.php?mod=spacecp&ac=credit"
pcUrl = force_ip_url(pcUrl_original)
lqurl = force_ip_url(lqurl_original)
newUrl = force_ip_url(newUrl_original)
doingUrl = force_ip_url(doingUrl_original)
doneUrl = force_ip_url(doneUrl_original)
creditUrl = force_ip_url(creditUrl_original)
pcHeaders["Host"] = "i.pcbeta.com"
def writeLog(content, log_type="log"):
"""保存日志到文件"""
if not os.path.exists("./log"):
os.makedirs("./log")
log_filename = f"{log_type}_{datetime.now().strftime('%Y%m%d_%H%M%S')}.html"
with open(f"./log/{log_filename}", "w", encoding="utf-8") as f:
f.write(content)
return f"日志已保存: ./log/{log_filename}"
def safe_request(url, headers, method="get", data=None):
"""安全的请求函数,处理各种异常"""
try:
verify_ssl = False
if method.lower() == "get":
response = requests.get(url, headers=headers, timeout=10, verify=verify_ssl)
else:
response = requests.post(url, headers=headers, data=data, timeout=10, verify=verify_ssl)
response.encoding = 'utf-8'
return response.text, None
except requests.exceptions.RequestException as e:
return None, f"请求出错: {str(e)}"
except Exception as e:
return None, f"未知错误: {str(e)}"
def fetch_task_status():
"""获取任务状态"""
status = {"new": None, "doing": None, "done": None}
for task_type in status:
url = {
"new": newUrl,
"doing": doingUrl,
"done": doneUrl
}[task_type]
text, error = safe_request(url, pcHeaders)
if error:
return None, error
status[task_type] = text
return status, None
def get_credit_info():
"""获取PB币和积分信息"""
try:
credit_text, error = safe_request(creditUrl, pcHeaders)
if error:
return None, None, error
pb_pattern = r'<em>\s*PB币\s*:\s*</em>\s*(\d+)'
pb_match = re.search(pb_pattern, credit_text)
pb_coin = pb_match.group(1) if pb_match else "未知"
credit_pattern = r'<em>\s*积分\s*:\s*</em>\s*(\d+)'
credit_match = re.search(credit_pattern, credit_text)
credit = credit_match.group(1) if credit_match else "未知"
return pb_coin, credit, None
except Exception as e:
return None, None, f"获取积分信息出错: {str(e)}"
def pcbetaCheckin():
"""执行签到任务"""
try:
status, error = fetch_task_status()
if error:
return f"签到失败: {error}"
if "每日打卡" in status["new"]:
text, error = safe_request(pcUrl, pcHeaders)
if error:
return error
if "抱歉,本期您已申请过此任务" in text:
pass # 继续执行签到
elif "任务已成功完成" in text:
return "签到成功"
time.sleep(1)
lq_text, lq_error = safe_request(lqurl, pcHeaders)
if lq_error:
return lq_error
if "任务已成功完成" in lq_text:
return "签到成功,PB币+1"
new_status, status_error = fetch_task_status()
if status_error:
return status_error
if "每日打卡" in new_status["done"]:
return "签到已完成"
writeLog(lq_text, "checkin_error")
return "签到失败,查看日志"
elif "每日打卡" in status["doing"]:
lq_text, lq_error = safe_request(lqurl, pcHeaders)
if lq_error:
return lq_error
if "任务已成功完成" in lq_text:
return "签到成功,PB币+1"
writeLog(lq_text, "checkin_error")
return "签到任务进行中,但未能完成"
elif "每日打卡" in status["done"]:
return "今日已签到,无需重复"
else:
return "未找到签到任务"
except Exception as e:
return f"签到过程中发生异常: {str(e)}"
if __name__ == "__main__":
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
start_time = datetime.now()
print("▂▂▂▂▂▂▂▂▂▂▂▂ 签到结果 ▂▂▂▂▂▂▂▂▂▂▂▂")
checkin_result = pcbetaCheckin()
pb_coin, credit, error = get_credit_info()
RED = "\033[32m"
RESET = "\033[0m"
if error:
print(f"│ 状态: {RED}{checkin_result}{RESET} | ❌ 账户信息: {error}")
else:
status_highlight = RED + re.sub(r'(今日已签到|签到成功|签到完成|无需重复)', lambda m: RED + m.group(0) + RESET, checkin_result) + RESET
print(f"│ 状态: {status_highlight} | 🪙 PB币: {RED}{pb_coin}{RESET} | 📊 积分: {RED}{credit}{RESET}")
end_time = datetime.now()
duration = (end_time - start_time).total_seconds()
print("\n┌" + "─" * 50 + "┐")
print(f"│ 结束时间: {end_time.strftime('%Y-%m-%d %H:%M:%S')}".ljust(50) + "│")
print(f"│ 总耗时: {duration:.2f} 秒".ljust(50) + "│")
print("└" + "─" * 50 + "┘")