|
- import os # 用于获取环境变量
- import sys # 用于异常处理和退出
- import requests # 用于发送 HTTP 请求
- import cloudscraper # 用于绕过 Cloudflare 验证
- import json # 可选,用于手动解析 JSON 数据
- import logging # 可选,用于记录日志
- import time # 可选,用于实现重试逻辑
- # 初始化日志配置
- logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
- # 获取环境变量
- NS_RANDOM = os.environ.get("NS_RANDOM", "true") # 随机参数,默认值为 "true"
- NS_COOKIE = os.environ.get("NS_COOKIE", "") # 从环境变量获取 NS_COOKIE
- COOKIE = os.environ.get("COOKIE", "") # 从环境变量获取 COOKIE
- COOKIE_ENV = NS_COOKIE or COOKIE # 优先使用 NS_COOKIE,如果没有再用 COOKIE
- if COOKIE_ENV:
- # 清理 Cookie 值,去除多余的换行和空格
- COOKIE_ENV = COOKIE_ENV.strip().replace('\n', '').replace('\r', '')
- logging.info(f"使用的 Cookie: {COOKIE_ENV}") # 打印调试信息
- # API 请求 URL
- url = f"https://www.nodeseek.com/api/attendance?random={NS_RANDOM}"
- # 请求头信息
- headers = {
- 'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0",
- 'origin': "https://www.nodeseek.com",
- 'referer': "https://www.nodeseek.com/board",
- 'accept-language': "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
- 'Cookie': COOKIE_ENV
- }
- try:
- # 创建 CloudScraper 实例
- scraper = cloudscraper.create_scraper(
- browser={
- 'browser': 'chrome', # 模拟的浏览器类型
- 'platform': 'windows', # 模拟的操作系统
- 'mobile': False # 是否模拟移动设备
- }
- )
- # 发送 POST 请求
- logging.info(f"正在向 {url} 发送请求...")
- response = scraper.post(url, headers=headers)
- # 检查 HTTP 响应状态码
- if response.status_code != 200:
- logging.error(f"请求失败,HTTP 状态码: {response.status_code}")
- if "Just a moment" in response.text or "cf-chl-bypass" in response.text:
- logging.error("Cloudflare 验证失败,返回了验证页面。")
- sys.exit(1)
- # 打印实际响应内容
- logging.info(f"实际响应内容: {response.text}")
- # 解析 JSON 数据
- try:
- response_data = response.json()
- logging.info(f"解析的 JSON 数据: {response_data}") # 打印返回的 JSON 数据
- message = response_data.get('message', '无消息') # 如果没有 message,默认值为 "无消息"
- success = response_data.get('success', False) # 如果没有 success,默认值为 False
- if success:
- logging.info(f"签到成功: {message}")
- else:
- logging.warning(f"签到失败: {message}")
- except ValueError:
- logging.error("响应内容不是有效的 JSON 数据,可能返回了 HTML 验证页面。")
- logging.error(f"响应内容: {response.text}")
- except Exception as e:
- logging.error("发生异常:", exc_info=True) # 打印详细的异常信息
- else:
- logging.error("请先设置 Cookie")
复制代码 |
|