收起左侧

飞牛社区青龙qinglong自动签到脚本(DeepSeek优化版本)

31
回复
4537
查看
[ 复制链接 ]

2

主题

4

回帖

0

牛值

江湖小虾

2025-3-5 15:48:40 显示全部楼层 阅读模式

首先麻烦务必看下原大佬的原帖的配置,我这里省略了主要步骤,主要提供修改后的代码:

飞牛社区自动签到脚本指南【改良版本】

前言:由于本人水平有限,只能看代码和改代码,不会自己无中生有的编代码(很慢),所以尝试了眼下最近大火的deepseek满血版。

修改内容如下:

1.原本的环境变量fn_pvRK_2132_saltkey、fn_pvRK_2132_auth、fn_pvRK_2132_sign的前两个都是cookie的一部分,所以合并为一个环境变量FN_COOKIE,这样无论你是新配置还是改配置,都只需要复制飞牛论坛的cookie的完整cookie即可。环境变量设置方式见原帖。

2.配置Server酱的PUSH_KEY,我将这个环境变量名称变为PUSH_KEY_fnos,因为我其他签到脚本也会使用这个 环境变量,而免费版Server酱每天只有五条免费推送的机会。

3.增加了大量备注说明,有条件你可以自己修改内容。

4.通知方式只保留Server酱。

5.更新错误处理和通知逻辑,签到失败也会通过Server酱微信通知你。

6.获取签到详情数据,换行推送(显示更加清楚明了)。

以下是分别是我测试代码时青龙面板中脚本运行时的日志,和微信收取到的Server酱通知样式。

Snipaste_2025-03-05_15-23-47.png

Snipaste_2025-03-05_15-23-57.png

#!/usr/bin/env python3
# coding: utf-8
"""
飞牛社区青龙面板自动签到脚本
1. 使用单个COOKIE环境变量读取盐值信息
2. 仅保留Server酱通知方式
环境变量需要配置:
- FN_COOKIE:完整的飞牛社区Cookie字符串(包含pvRK_2132_saltkey和pvRK_2132_auth)
- fn_pvRK_2132_sign:签到请求的签名参数
- PUSH_KEY_fnos:Server酱的推送密钥
"""

import os
import requests
from bs4 import BeautifulSoup

def parse_cookie(cookie_str: str) -> dict:
    """
    将Cookie字符串解析为字典格式
    示例输入:"pvRK_2132_saltkey=abc; pvRK_2132_auth=123"
    返回:{'pvRK_2132_saltkey': 'abc', 'pvRK_2132_auth': '123'}
    """
    cookie_dict = {}
    # 分割每个Cookie条目
    for item in cookie_str.split(';'):
        # 去除首尾空格后分割键值对
        key_value = item.strip().split('=', 1)
        if len(key_value) == 2:
            cookie_dict[key_value[0]] = key_value[1]
    return cookie_dict

# 从环境变量读取配置信息
COOKIE_STR = os.getenv('FN_COOKIE', '')        # 完整的Cookie字符串,名称自己按需修改
FN_SIGN = os.getenv('fn_pvRK_2132_sign', '')   # 签到请求的签名参数,名称自己按需修改
PUSH_KEY = os.getenv('PUSH_KEY_fnos', '')      # Server酱推送密钥,名称自己按需修改

# 解析Cookie获取关键参数
cookie_dict = parse_cookie(COOKIE_STR)
required_cookies = {
    'pvRK_2132_saltkey': cookie_dict.get('pvRK_2132_saltkey'),
    'pvRK_2132_auth': cookie_dict.get('pvRK_2132_auth')
}

def sign_in():
    """
    执行签到操作,处理三种状态:
    1. 签到成功 2. 已签到 3. 签到失败
    """
    try:
        # 构建签到请求URL(需要签名参数)
        sign_url = f'https://club.fnnas.com/plugin.php?id=zqlj_sign&sign={FN_SIGN}'
        response = requests.get(sign_url, cookies=required_cookies)

        if '恭喜您,打卡成功!' in response.text:
            print('✅ 签到成功')
            get_sign_in_info()
        elif '您今天已经打过卡了' in response.text:
            print('⏰ 今日已签到')
            get_sign_in_info()
        else:
            error_msg = '❌ 失败:Cookie可能失效或网站改版'
            print(error_msg)
            push_message('飞牛签到失败', error_msg)

    except Exception as e:
        error_msg = f'🚨 请求异常:{str(e)}'
        print(error_msg)
        push_message('飞牛签到异常', error_msg)

def get_sign_in_info():
    """
    获取签到详情数据并推送
    使用CSS选择器定位关键数据
    """
    try:
        response = requests.get('https://club.fnnas.com/plugin.php?id=zqlj_sign', 
                              cookies=required_cookies)
        soup = BeautifulSoup(response.text, 'html.parser')

        # 定义需要抓取的数据项和对应CSS选择器
        target_data = {
            '最近打卡': 'li:-soup-contains("最近打卡")',
            '本月打卡': 'li:-soup-contains("本月打卡")',
            '连续打卡': 'li:-soup-contains("连续打卡")',
            '累计打卡': 'li:-soup-contains("累计打卡")',
            '累计奖励': 'li:-soup-contains("累计奖励")',
            '最近奖励': 'li:-soup-contains("最近奖励")',
            '当前等级': 'li:-soup-contains("当前打卡等级")',
        }

        # 提取并格式化数据
        result = []
        for name, selector in target_data.items():
            element = soup.select_one(selector)
            if element:
                # 提取文本并分割出数值部分
                text = element.get_text().split(':')[-1].strip()
                result.append(f'{name}: {text}')

        # 推送格式化后的消息
        if result:
            msg_content = '\n'.join(result)
            print('📊 签到详情:\n' + msg_content)
            push_message('飞牛签到成功', msg_content)
        else:
            raise Exception('未找到签到数据,页面结构可能已变更')

    except Exception as e:
        error_msg = f'抓取详情失败:{str(e)}'
        print(error_msg)
        push_message('飞牛签到详情异常', error_msg)

def push_message(title: str, content: str):
    """
    Server酱消息推送
    文档:https://sct.ftqq.com/
    """
    if not PUSH_KEY:
        print('⚠️ 未配置Server酱密钥,跳过推送')
        return

    # 构建推送请求
    api_url = f'https://sctapi.ftqq.com/{PUSH_KEY}.send'
    payload = {
        'title': title,
        'desp': content.replace('\n', '\n\n')  # Server酱要求空行用两个换行
    }

    try:
        resp = requests.post(api_url, data=payload)
        if resp.json().get('code') == 0:
            print('📤 推送成功')
        else:
            print(f'推送失败:{resp.text}')
    except Exception as e:
        print(f'🚨 推送异常:{str(e)}')

def validate_config():
    """
    启动前校验必要配置
    """
    errors = []
    if not COOKIE_STR:
        errors.append('缺少FN_COOKIE环境变量')
    if not FN_SIGN:
        errors.append('缺少fn_pvRK_2132_sign环境变量')
    if not required_cookies.get('pvRK_2132_saltkey'):
        errors.append('Cookie中缺少pvRK_2132_saltkey')
    if not required_cookies.get('pvRK_2132_auth'):
        errors.append('Cookie中缺少pvRK_2132_auth')

    if errors:
        print('❌ 配置错误:')
        print('\n'.join(errors))
        push_message('飞牛签到配置错误', '\n'.join(errors))
        exit(1)

if __name__ == '__main__':
    # 启动时先验证配置
    validate_config()
    print('🔍 配置校验通过,开始执行签到')
    sign_in()
收藏
送赞 6
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

3

主题

17

回帖

0

牛值

江湖小虾

2025-3-6 00:28:31 显示全部楼层
本帖最后由 fatboy27 于 2025-3-6 01:00 编辑

感谢分享.运行成功了

1

主题

5

回帖

0

牛值

江湖小虾

2025-3-6 09:20:31 显示全部楼层
感谢分享,成功部署到青龙面板

3

主题

17

回帖

0

牛值

江湖小虾

2025-3-6 11:14:05 显示全部楼层
Traceback (most recent call last):
  File "/ql/data/scripts/./飞牛.swap", line 15, in <module>
    from bs4 import BeautifulSoup
ModuleNotFoundError: No module named 'bs4'
这个怎么处理
搞定了  详情 回复
2025-3-6 11:51

3

主题

17

回帖

0

牛值

江湖小虾

2025-3-6 11:51:40 显示全部楼层
搞定了         

3

主题

236

回帖

0

牛值

fnOS系统内测组

飞牛百度网盘玩家

2025-3-6 13:51:11 显示全部楼层
感谢LZ分享!!进行尝试一下!

0

主题

2

回帖

0

牛值

江湖小虾

2025-3-7 23:22:04 显示全部楼层
我也在原基础修改了,直接调用青龙自带通知,支持所有通知😀
可以分享一下吗?谢谢  详情 回复
2025-8-16 09:18
分享一下脚本。感谢  详情 回复
2025-3-22 13:26

1

主题

17

回帖

0

牛值

江湖小虾

2025-3-10 09:35:05 显示全部楼层
多谢分享,运行成功,已经搞定!

4

主题

23

回帖

0

牛值

fnOS系统内测组

社区上线纪念勋章

2025-3-10 22:32:16 显示全部楼层
合并为一个环境变量FN_COOKIE后,变量值怎么填写?

0

主题

4

回帖

0

牛值

江湖小虾

2025-3-11 09:22:14 显示全部楼层
感谢分享,已经运行成功了

1

主题

2

回帖

0

牛值

江湖小虾

2025-3-22 13:26:42 显示全部楼层
paigu_nan 发表于 2025-3-7 23:22
我也在原基础修改了,直接调用青龙自带通知,支持所有通知😀

分享一下脚本。感谢
同+1 fdg  详情 回复
2025-3-24 22:56

1

主题

153

回帖

0

牛值

初出茅庐

2025-3-24 22:56:29 显示全部楼层
Alchemy 发表于 2025-3-22 13:26
分享一下脚本。感谢

同+1                                      fdg

0

主题

8

回帖

0

牛值

江湖小虾

2025-6-12 10:40:17 显示全部楼层

感谢分享,不过请问咱们论坛签到有什么好处,飞牛币可以兑换啥?

4

主题

41

回帖

0

牛值

fnOS系统内测组

2025-7-17 13:56:31 显示全部楼层

打卡失败 提示站点更新

1

主题

1

回帖

0

牛值

江湖小虾

2025-7-18 10:09:04 显示全部楼层
昨天突然不行了 提示

HTTPSConnectionPool(host='club.fnnas.com', port=443): Max retries exceeded with url: (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f55f997ae50>: Failed to resolve 'club.fnnas.com' ([Errno -3] Try again)"))

0

主题

1

回帖

0

牛值

江湖小虾

2025-7-22 09:56:02 显示全部楼层

请问fn_pvRK_2132_sign这个参数在哪里获取

看下原帖  详情 回复
2025-7-31 08:33

2

主题

4

回帖

0

牛值

江湖小虾

2025-7-31 08:33:08 楼主 显示全部楼层
范建威 发表于 2025-7-22 09:56
请问fn_pvRK_2132_sign这个参数在哪里获取

看下原帖

1

主题

4

回帖

0

牛值

江湖小虾

2025-8-4 14:42:09 显示全部楼层
失败:Cookie可能失效或网站改版

2

主题

14

回帖

0

牛值

江湖小虾

2025-8-5 16:53:08 显示全部楼层

最近签到都失败了,论坛改了什么东西吗?

🔍 配置校验通过,开始执行签到
❌ 失败:Cookie可能失效或网站改版
📤 推送成功

3

主题

17

回帖

0

牛值

江湖小虾

2025-8-13 00:25:39 显示全部楼层

自动签到已经不能用了.大佬更新一下吧.

1

主题

1

回帖

0

牛值

江湖小虾

2025-8-16 09:18:53 显示全部楼层
paigu_nan 发表于 2025-3-7 23:22
我也在原基础修改了,直接调用青龙自带通知,支持所有通知😀

可以分享一下吗?谢谢

1

主题

12

回帖

0

牛值

江湖小虾

2025-8-19 17:24:41 显示全部楼层

image.png

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
nice #!/usr/bin/env python3 # coding: utf-8 """ 飞牛社区青龙面板自动签到脚本 1. 使用单个COOKIE环境变量读取盐值信息 2. 仅保留邮件通知方式 环境变量需要配置: - FN_COOKIE:完整的飞牛社区Cookie字符串(包  详情 回复
2025-8-19 17:35

1

主题

12

回帖

0

牛值

江湖小虾

2025-8-19 17:35:25 显示全部楼层

image.png
nice

#!/usr/bin/env python3
# coding: utf-8
"""
飞牛社区青龙面板自动签到脚本
1. 使用单个COOKIE环境变量读取盐值信息
2. 仅保留邮件通知方式
环境变量需要配置:
- FN_COOKIE:完整的飞牛社区Cookie字符串(包含pvRK_2132_saltkey和pvRK_2132_auth)
- fn_pvRK_2132_sign:签到请求的签名参数
"""

import os
import requests
from bs4 import BeautifulSoup

def parse_cookie(cookie_str: str) -> dict:
    """
    将Cookie字符串解析为字典格式
    示例输入:"pvRK_2132_saltkey=abc; pvRK_2132_auth=123"
    返回:{'pvRK_2132_saltkey': 'abc', 'pvRK_2132_auth': '123'}
    """
    cookie_dict = {}
    # 分割每个Cookie条目
    for item in cookie_str.split(';'):
        # 去除首尾空格后分割键值对
        key_value = item.strip().split('=', 1)
        if len(key_value) == 2:
            cookie_dict[key_value[0]] = key_value[1]
    return cookie_dict

# 从环境变量读取配置信息
COOKIE_STR = os.getenv('FN_COOKIE', '')        # 完整的Cookie字符串,名称自己按需修改
FN_SIGN = os.getenv('fn_pvRK_2132_sign', '')   # 签到请求的签名参数,名称自己按需修改

# 解析Cookie获取关键参数
cookie_dict = parse_cookie(COOKIE_STR)
required_cookies = {
    'pvRK_2132_saltkey': cookie_dict.get('pvRK_2132_saltkey'),
    'pvRK_2132_auth': cookie_dict.get('pvRK_2132_auth')
}

def sign_in():
    """
    执行签到操作,处理三种状态:
    1. 签到成功 2. 已签到 3. 签到失败
    """
    try:
        # 获取签名参数
        # https://club.fnnas.com/plugin.php?id=zqlj_sign
        if FN_SIGN is None or len(FN_SIGN) == 0:
            response = requests.get('https://club.fnnas.com/plugin.php?id=zqlj_sign', cookies=required_cookies)
            soup = BeautifulSoup(response.text, 'html.parser')
            element = soup.select_one('a[class="btna"]')
            if element:
                name = element.get_text().strip()
                text = element.get('href').strip()
                print(f'{name}: {text}')
                sign_url = f'https://club.fnnas.com/{text}'
                print(f'sign_url: {sign_url}')

        # 构建签到请求URL(需要签名参数)
        sign_url = sign_url if sign_url else f'https://club.fnnas.com/plugin.php?id=zqlj_sign&sign={FN_SIGN}'
        response = requests.get(sign_url, cookies=required_cookies)

        if '恭喜您,打卡成功!' in response.text:
            print('✅ 签到成功')
            get_sign_in_info()
        elif '您今天已经打过卡了' in response.text:
            print('⏰ 今日已签到')
            get_sign_in_info()
        else:
            error_msg = '❌ 失败:Cookie可能失效或网站改版'
            print(error_msg)
            push_message('飞牛签到失败', error_msg)

    except Exception as e:
        error_msg = f'🚨 请求异常:{str(e)}'
        print(error_msg)
        push_message('飞牛签到异常', error_msg)

def get_sign_in_info():
    """
    获取签到详情数据并推送
    使用CSS选择器定位关键数据
    """
    try:
        response = requests.get('https://club.fnnas.com/plugin.php?id=zqlj_sign', 
                              cookies=required_cookies)
        soup = BeautifulSoup(response.text, 'html.parser')
  
        # 定义需要抓取的数据项和对应CSS选择器
        target_data = {
            '最近打卡': 'li:-soup-contains("最近打卡")',
            '本月打卡': 'li:-soup-contains("本月打卡")',
            '连续打卡': 'li:-soup-contains("连续打卡")',
            '累计打卡': 'li:-soup-contains("累计打卡")',
            '累计奖励': 'li:-soup-contains("累计奖励")',
            '最近奖励': 'li:-soup-contains("最近奖励")',
            '当前等级': 'li:-soup-contains("当前打卡等级")',
        }

        # 提取并格式化数据
        result = []
        for name, selector in target_data.items():
            element = soup.select_one(selector)
            if element:
                # 提取文本并分割出数值部分
                text = element.get_text().split(':')[-1].strip()
                result.append(f'{name}: {text}')

        # 推送格式化后的消息
        if result:
            msg_content = '\n'.join(result)
            print('📊 签到详情:\n' + msg_content)
            push_message('飞牛签到成功', msg_content)
        else:
            raise Exception('未找到签到数据,页面结构可能已变更')

    except Exception as e:
        error_msg = f'抓取详情失败:{str(e)}'
        print(error_msg)
        push_message('飞牛签到详情异常', error_msg)


def push_message(title: str, content: str):
    """
    青龙通知
    """
    QLAPI.systemNotify({ "title": title, "content": content })

def validate_config():
    """
    启动前校验必要配置
    """
    errors = []
    if not COOKIE_STR:
        errors.append('缺少FN_COOKIE环境变量')
    # if not FN_SIGN:
    #     errors.append('缺少fn_pvRK_2132_sign环境变量')
    if not required_cookies.get('pvRK_2132_saltkey'):
        errors.append('Cookie中缺少pvRK_2132_saltkey')
    if not required_cookies.get('pvRK_2132_auth'):
        errors.append('Cookie中缺少pvRK_2132_auth')
  
    if errors:
        print('❌ 配置错误:')
        print('\n'.join(errors))
        push_message('飞牛签到配置错误', '\n'.join(errors))
        exit(1)

if __name__ == '__main__':
    # 启动时先验证配置
    validate_config()
    print('🔍 配置校验通过,开始执行签到')
    sign_in()

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
牛哦,已运行成功  详情 回复
2025-8-22 11:29
大佬用您这个角本就可以打卡吗  详情 回复
2025-8-20 10:46

0

主题

2

回帖

0

牛值

江湖小虾

2025-8-20 10:46:09 显示全部楼层
高xx 发表于 2025-8-19 17:35
nice
#!/usr/bin/env python3
# coding: utf-8

大佬用您这个角本就可以打卡吗
试试看不就知道了  详情 回复
2025-8-20 10:57

1

主题

12

回帖

0

牛值

江湖小虾

2025-8-20 10:57:55 显示全部楼层
geminiljw 发表于 2025-8-20 10:46
大佬用您这个角本就可以打卡吗

试试看不就知道了
谢谢我是个菜先学习一下不懂再咨询您  详情 回复
2025-8-20 11:52

0

主题

2

回帖

0

牛值

江湖小虾

2025-8-20 11:52:05 显示全部楼层
高xx 发表于 2025-8-20 10:57
试试看不就知道了

谢谢我是个菜先学习一下不懂再咨询您
菜就多练  详情 回复
2025-8-20 15:45

1

主题

12

回帖

0

牛值

江湖小虾

2025-8-20 15:45:59 显示全部楼层
geminiljw 发表于 2025-8-20 11:52
谢谢我是个菜先学习一下不懂再咨询您

菜就多练

0

主题

1

回帖

0

牛值

江湖小虾

2025-8-22 11:29:46 显示全部楼层
高xx 发表于 2025-8-19 17:35
nice
#!/usr/bin/env python3
# coding: utf-8

牛哦,已运行成功

1

主题

1

回帖

0

牛值

江湖小虾

2025-9-3 00:13:07 显示全部楼层

请求异常:cannot access local variable 'sign_url' where it is not associated with a value

0

主题

3

回帖

0

牛值

江湖小虾

2025-9-6 23:11:05 显示全部楼层

纯新人,今天第一次接触青龙,啥代码也看不懂。
楼主的和楼上签到成功的大佬们的代码都试了,结果各种报错,然后找腾讯元宝AI大佬给优化了一下代码,需要安装nodejs依赖:axios, cheerio,只需要在环境变量里新建一个FN_COOKIE,填入cookies的值就行,签到的连接也不需要了,会自动获取,我刚试了成功了。

image.png

优化后的代码如下,有大佬还能优化的话也可以继续改:

// feiniu.js - 飞牛社区自动签到脚本 (Node.js版本)
// 依赖:axios, cheerio, 青龙面板通知函数
// 环境变量:FN_COOKIE (完整的飞牛社区Cookie字符串)

const axios = require('axios');
const cheerio = require('cheerio');
const notify = require('./sendNotify'); // 青龙面板内置通知函数

// 从环境变量获取完整Cookie字符串
const fullCookieString = process.env.FN_COOKIE || '';

/**
 * 获取动态的sign参数[3](@ref)
 * @returns {Promise<string>} 动态的sign参数值
 */
async function getDynamicSign() {
    try {
        console.log('🔍 开始获取动态sign参数...');
        const response = await axios.get('https://club.fnnas.com/plugin.php?id=zqlj_sign', {
            headers: {
                'Cookie': fullCookieString,
                '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'
            }
        });

        const $ = cheerio.load(response.data);
        // 尝试从签到按钮的链接中提取sign参数[3](@ref)
        const signLink = $('a.btna').attr('href');

        if (!signLink) {
            throw new Error('无法从页面中找到签到链接(可能Cookie失效或页面改版)');
        }

        const signMatch = signLink.match(/sign=([a-f0-9]+)/);
        if (signMatch && signMatch[1]) {
            console.log('✅ 动态sign参数获取成功:', signMatch[1]);
            return signMatch[1];
        } else {
            throw new Error('从签到链接中提取sign参数失败');
        }
    } catch (error) {
        console.error('❌ 获取动态sign参数失败:', error.message);
        await notify.sendNotify('飞牛签到失败', `获取动态sign参数失败: ${error.message}`);
        throw error; // 重新抛出错误,阻止后续签到执行
    }
}

/**
 * 执行签到操作
 * @param {string} dynamicSign 动态获取的sign参数
 */
async function signIn(dynamicSign) {
    try {
        const signUrl = `https://club.fnnas.com/plugin.php?id=zqlj_sign&sign=${dynamicSign}`;
        console.log('📨 发送签到请求:', signUrl);

        const response = await axios.get(signUrl, {
            headers: {
                'Cookie': fullCookieString,
                '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'
            }
        });

        if (response.data.includes('恭喜您,打卡成功!')) {
            console.log('✅ 打卡成功');
            await getSignInInfo(); // 获取并推送签到详情
        } else if (response.data.includes('您今天已经打过卡了')) {
            console.log('⏰ 已经打过卡了');
            await notify.sendNotify('飞牛论坛', '您今天已经打过卡了'); // 推送已签到通知
        } else {
            // 可能的情况:Cookie失效、签到链接错误、网站改版
            const errorMsg = '打卡失败, cookies可能已经过期或站点更新.';
            console.log('❌', errorMsg);
            await notify.sendNotify('飞牛论坛', errorMsg);
        }
    } catch (error) {
        console.error('❌ 签到请求失败:', error.message);
        await notify.sendNotify('飞牛论坛', `签到请求失败: ${error.message}`);
    }
}

/**
 * 获取签到详情信息并推送[1,3](@ref)
 */
async function getSignInInfo() {
    try {
        console.log('📊 获取签到详情信息...');
        const response = await axios.get('https://club.fnnas.com/plugin.php?id=zqlj_sign', {
            headers: {
                'Cookie': fullCookieString,
                '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'
            }
        });

        const $ = cheerio.load(response.data);
        const content = []; // 存储提取的签到信息

        // 定义要提取的信息项及其选择器[1](@ref)
        const patterns = [
            { name: '最近打卡', selector: 'li:contains("最近打卡")' },
            { name: '本月打卡', selector: 'li:contains("本月打卡")' },
            { name: '连续打卡', selector: 'li:contains("连续打卡")' },
            { name: '累计打卡', selector: 'li:contains("累计打卡")' },
            { name: '累计奖励', selector: 'li:contains("累计奖励")' },
            { name: '最近奖励', selector: 'li:contains("最近奖励")' },
            { name: '当前打卡等级', selector: 'li:contains("当前打卡等级")' }
        ];

        // 提取数据
        patterns.forEach(pattern => {
            const elementText = $(pattern.selector).text();
            if (elementText) {
                // 提取冒号后的值部分[3](@ref)
                const value = elementText.replace(/.*:/, '').trim(); // 注意正则表达式修改,匹配中文冒号
                content.push(`${pattern.name}: ${value}`);
            }
        });

        if (content.length > 0) {
            const message = content.join('\n');
            console.log('✅ 签到详情:\n' + message);
            // 推送签到成功及详情[1](@ref)
            await notify.sendNotify('飞牛论坛打卡成功', message);
        } else {
            throw new Error('未找到签到详情信息,页面结构可能已变更');
        }
    } catch (error) {
        console.error('❌ 获取打卡信息失败:', error.message);
        await notify.sendNotify('飞牛论坛', `获取打卡信息失败: ${error.message}`);
    }
}

/**
 * 主执行函数
 */
async function main() {
    console.log('🚀 开始执行飞牛社区自动签到任务...');
    console.log('📅 当前时间:', new Date().toLocaleString('zh-CN'));

    // 1. 检查Cookie是否配置
    if (!fullCookieString) {
        const errorMsg = '未设置环境变量 FN_COOKIE,请先在青龙面板中配置。';
        console.error('❌', errorMsg);
        await notify.sendNotify('飞牛签到配置错误', errorMsg);
        return;
    }
    console.log('✅ FN_COOKIE 环境变量已设置');

    try {
        // 2. 动态获取sign参数[3](@ref)
        const dynamicSign = await getDynamicSign();

        // 3. 执行签到
        await signIn(dynamicSign);

    } catch (error) {
        // getDynamicSign 中的错误已处理,此处捕获其他潜在错误
        console.error('❌ 任务执行过程中发生未预期错误:', error.message);
    } finally {
        console.log('🏁 任务执行完毕。');
    }
}

// 执行主函数
main();

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
## 开始执行... 2025-09-08 14:45:53 File "/ql/data/scripts/fnnas.py", line 17 将Cookie字符串解析为字典格式 IndentationError: unexpected indent 请问这是怎么回事  详情 回复
6 天前

3

主题

6

回帖

0

牛值

江湖小虾

Pluto666 发表于 2025-9-6 23:11
纯新人,今天第一次接触青龙,啥代码也看不懂。
楼主的和楼上签到成功的大佬们的代码都试了,结果各种报错 ...

## 开始执行... 2025-09-08 14:45:53


  File "/ql/data/scripts/fnnas.py", line 17
    将Cookie字符串解析为字典格式
IndentationError: unexpected indent
请问这是怎么回事
你保存错格式了吧,文件名要是.js格式的,我看你显示的是py的  详情 回复
6 天前

0

主题

3

回帖

0

牛值

江湖小虾

ml830917 发表于 2025-9-8 14:48
## 开始执行... 2025-09-08 14:45:53

你保存错格式了吧,文件名要是.js格式的,我看你显示的是py的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则