1.购买服务器阿里云:服务器购买地址https://t.aliyun.com/U/Bg6shY若失效,可用地址
阿里云:
服务器购买地址
https://t.aliyun.com/U/Bg6shY若失效,可用地址
https://www.aliyun.com/daily-act/ecs/activity_selection?source=5176.29345612&userCode=49hts92d腾讯云:
https://curl.qcloud.com/wJpWmSfU若失效,可用地址
https://cloud.tencent.com/act/cps/redirect?redirect=2446&cps_key=ad201ee2ef3b771157f72ee5464b1fea&from=console华为云
https://activity.huaweicloud.com/cps.html?fromacct=64b5cf7cc11b4840bb4ed2ea0b2f4468&utm_source=V1g3MDY4NTY=&utm_medium=cps&utm_campaign=2019052.部署教程
3.代码如下
import requestsfrom bs4 import BeautifulSoupimport osfrom urllib.parse import urljoindef visit_url_and_sign(base_url, index_url, cookies_str, output_filename="zqlj_sign.html"):headers = {"Cookie": cookies_str,"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"}print(f"正在访问打卡首页: {index_url}")try:response = requests.get(index_url, headers=headers)print(f"请求状态码: {response.status_code}")if response.status_code == 200:with open(output_filename, "w", encoding="utf-8") as f:f.write(response.text)print(f"响应内容已成功缓存到 '{output_filename}'")soup = BeautifulSoup(response.text, 'html.parser')sign_div = soup.find('div', class_='bm signbtn cl')sign_link_tag = Noneif sign_div:sign_link_tag = sign_div.find('a', class_='btna')if sign_link_tag and 'href' in sign_link_tag.attrs:relative_href = sign_link_tag['href']full_sign_url = urljoin(base_url, relative_href)print("\n--- 找到打卡链接 ---")print(full_sign_url)print("--------------------\n")print(f"请求打卡链接: {full_sign_url}")sign_response = requests.get(full_sign_url, headers=headers)print(f"请求状态码: {sign_response.status_code}")if sign_response.status_code == 200:print("成功请求打卡链接!")sign_result_soup = BeautifulSoup(sign_response.text, 'html.parser')message_div = sign_result_soup.find('div', id='messagetext')if message_div:message_text = message_div.get_text(strip=True) # 获取并去除空白字符print("\n--- 打卡结果消息 ---")print(message_text)print("--------------------\n")else:print("在打卡结果页面中未找到 ID 为 'messagetext' 的 div 元素。请查看")else:print("打卡请求失败。")print("\n--- 请求响应内容 ---")print(sign_response.text[:500])else:print("未找到 '点击打卡' 链接或其 href 属性。请检查页面内容是否已更新或已打卡。")else:print(f"初始访问失败,状态码为 {response.status_code}。无法进行打卡操作。")print("\n--- 请求响应内容 ---")print(response.text[:500])except requests.exceptions.RequestException as e:print(f"请求发生错误: {e}")except AttributeError:print("解析HTML时出现错误,未找到目标元素")except Exception as e:print(f"发生未知错误: {e}")if __name__ == "__main__":base_url = "https://www.stcaimcu.com/"index_target_url = "https://www.stcaimcu.com/plugin.php?id=zqlj_sign"cookies_str = os.getenv('STCAIMCU_Cookies')print("========== STC论坛签到[开始] ==========")if not cookies_str:print("错误:未找到 'STCAIMCU_Cookies' 环境变量,确保已设置 Secret")else:visit_url_and_sign(base_url, index_target_url, cookies_str)print("========== STC论坛签到[结束] ==========")
STC论坛自动签到脚本
主要作用
通过 Cookie 模拟已登录状态
从环境变量
STCAIMCU_Cookies读取整段 Cookie 字符串。用这个 Cookie 去访问 STC 论坛的签到页面,模拟已登录用户。
自动找到签到按钮并发起打卡
先访问签到首页:
https://www.stcaimcu.com/plugin.php?id=zqlj_sign解析 HTML,找到"打卡按钮"的链接(
div.bm.signbtn.cl里的a.btna)。拼出完整的签到 URL,然后再发起请求,实现自动"点击打卡"。
解析打卡结果并打印提示
在打卡结果页面里找
id="messagetext"的div,提取里面的文本。打印出"打卡成功/已打卡/失败"等提示信息,方便在日志中查看。
支持调试/排查
首次访问签到首页的 HTML 会保存到一个本地文件,例如
zqlj_sign.html,可用于调试页面结构变化。
简单一句话:
"拿 Cookie 去访问 STC 论坛签到页 → 自动点打卡 → 打印打卡结果(并缓存首页 HTML 方便排查)。"
主要函数
1. visit_url_and_sign(base_url, index_url, cookies_str, output_filename="zqlj_sign.html")
这是核心函数,负责完整的访问 + 解析 + 打卡流程:
构造请求头
把传进来的
cookies_str放到Cookie头里;设置一个常规 PC 浏览器的
User-Agent伪装正常访问。访问签到首页(打卡首页)
把返回的 HTML 存到
output_filename(默认zqlj_sign.html),方便你本地打开看源码。GET index_url(即插件签到入口页);打印 HTTP 状态码;
若状态码是 200:
解析签到按钮
取
href(相对路径),用urljoin(base_url, relative_href)拼成完整 URL。div,class 为bm signbtn cl(签到按钮所在区域);里面的
a标签,class 为btna(真正的"点击打卡"链接)。用
BeautifulSoup解析首页 HTML;查找:
若找到了签到链接:
发起打卡请求
如果 200:
否则:
再用
BeautifulSoup解析返回的 HTML;寻找
id="messagetext"的div,取出其中文本(结果提示),打印出来;打印"打卡请求失败",并截取部分响应内容帮你排查。
用同样的
headers对完整签到 URL 再发一次GET。打印状态码:
异常处理
捕获网络异常(
RequestException)并打印;捕获解析时的
AttributeError(比如页面结构变了)并打印;捕获其他未知异常并打印。
总结:
visit_url_and_sign就是"用 Cookie 模拟打开签到页 → 找按钮 → 请求打卡链接 → 把结果打印出来"的一条龙函数。
2. 顶层入口 if __name__ == "__main__":
作用:脚本执行入口 + 环境变量读取
设置:
base_url = "https://www.stcaimcu.com/"index_target_url = "https://www.stcaimcu.com/plugin.php?id=zqlj_sign"从环境变量中读取:
cookies_str = os.getenv('STCAIMCU_Cookies')打印开始/结束标记(
========== STC论坛签到[开始/结束] ==========),方便在日志中定位。逻辑:
调用
visit_url_and_sign(base_url, index_target_url, cookies_str)执行完整签到流程。提示"未找到环境变量,请配置 STCAIMCU_Cookies";
如果没读到 Cookie:
如果读到了 Cookie:
这个入口块本质上就是:"从环境取 Cookie → 调核心函数 → 打两行边框表示开始/结束"。
注意:
本文部分变量已做脱敏处理,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。技术层面需要提供帮助,可以通过打赏的方式进行探讨。
没有评论:
发表评论