从零到一:手把手教你编写青龙面板自动化脚本
1. 青龙面板是什么为什么选择它如果你经常在网上看到薅羊毛这个词但又苦于不会编程无法参与那么青龙面板就是你的救星。简单来说青龙面板是一个开源的定时任务管理平台最初设计用于管理京东签到脚本俗称京豆脚本后来逐渐发展成一个支持多种自动化任务的工具。它最大的特点就是对新手友好——你不需要懂服务器运维甚至不需要会写完整程序只要掌握一些基础脚本知识就能上手。我最初接触青龙面板是在去年双十一期间。当时看到群里有人晒通过脚本自动领取的优惠券和积分眼红得不行。但市面上的公开脚本要么失效快要么容易被封号于是决定自己动手。经过两个月的摸索现在我的面板上运行着十几个自研脚本每天稳定获取各类奖励。最让我自豪的是一个自动阅读新闻赚积分的脚本已经稳定运行了半年多。青龙面板支持多种脚本语言但强烈推荐JavaScript。原因有三一是语法简单不像Python对缩进要求那么严格二是网络请求库丰富axios用起来非常顺手三是社区资源多遇到问题容易找到解决方案。下面这张对比表可以直观看出区别特性JavaScriptPython语法难度较低适合新手中等缩进敏感网络请求axios库简单强大requests需要额外学习调试便利性控制台日志直观需要配置环境2. 搭建你的第一个青龙面板环境2.1 基础环境准备在开始写脚本前我们需要先搭建青龙面板的运行环境。这里以最常用的Docker部署方式为例手把手带你完成安装# 创建安装目录 mkdir qinglong cd qinglong # 拉取镜像使用国内加速源 docker pull whyour/qinglong:latest # 启动容器端口号可自定义 docker run -dit \ -v $PWD/ql/config:/ql/config \ -v $PWD/ql/scripts:/ql/scripts \ -p 5700:5700 \ --name qinglong \ --hostname qinglong \ --restart unless-stopped \ whyour/qinglong:latest安装完成后打开浏览器访问http://你的IP:5700就能看到登录界面。首次使用需要设置管理员账号建议密码设置复杂些毕竟这关系到你的脚本安全。我在这里踩过两个坑一是忘记开放服务器防火墙端口导致始终无法访问二是没配置持久化存储重启容器后脚本全没了。所以特别提醒大家一定要加上-v参数挂载目录这样即使容器崩溃你的脚本也不会丢失。2.2 面板基础配置登录后进入环境变量页面这里需要添加几个关键配置JD_COOKIE京东账号的cookie后续会教如何获取TG_BOT_TOKENTelegram机器人token用于接收通知PUSH_PLUS_TOKEN微信推送token以京东cookie为例获取方法如下电脑浏览器登录京东官网按F12打开开发者工具切换到Network网络选项卡刷新页面找到任意一个请求在Headers中找到Cookie字段复制全部内容注意cookie相当于你的账号密码千万不要泄露给他人。建议定期更新特别是发现账号异常时。3. JavaScript脚本编程入门3.1 基础语法速成青龙面板的JavaScript环境基于Node.js我们先学习几个最常用的语法// 1. 变量声明 const name 羊毛党; // 常量 let count 10; // 变量 // 2. 函数定义 function signIn(cookie) { return 签到成功; } // 3. 异步请求重点 const axios require(axios); async function getData() { const response await axios.get(https://api.example.com); console.log(response.data); }对于完全没有编程基础的朋友可以这样理解脚本就像一份烹饪食谱变量就是食材比如鸡蛋2个函数就是烹饪步骤比如打散鸡蛋而网络请求相当于叫外卖让服务器给你送数据。我刚开始学的时候把每个脚本都拆解成准备材料→处理数据→发送请求→处理结果四个步骤这样理解起来就容易多了。比如一个签到脚本的核心逻辑就是准备cookie从环境变量获取构造请求参数URL、headers等发送请求到服务器解析返回结果并通知3.2 网络请求实战axios是青龙脚本中最常用的库先看一个最简单的GET请求示例const axios require(axios); const cookie process.env.JD_COOKIE; // 从环境变量读取 async function jdSign() { try { const response await axios.get(https://api.m.jd.com/sign, { headers: { Cookie: cookie, User-Agent: Mozilla/5.0 } }); console.log(response.data); } catch (error) { console.error(签到失败:, error); } } jdSign();这个脚本做了三件事导入axios库定义异步函数jdSign发送带cookie的GET请求实际项目中90%的羊毛脚本都是这种模式的变体。不同之处主要在于请求方式GET/POST参数传递位置URL/body返回数据处理方式4. 抓包分析与脚本编写4.1 抓包工具使用技巧抓包是写脚本的核心技能推荐使用这些工具手机端HttpCanary小黄鸟、Packet Capture电脑端Fiddler、Charles以抓取APP签到请求为例具体步骤是在手机上安装抓包工具并配置证书开启抓包后打开目标APP手动点击签到按钮停止抓包查找包含sign关键字的请求记录URL、headers和body内容我常用的分析技巧包括按域名过滤如jd.com关注状态码200的请求对比多个请求的差异点特别注意带token的请求4.2 完整脚本开发实例下面以一个真实的京东极速版签到脚本为例展示完整开发流程const axios require(axios); const notify require(./sendNotify); async function main() { // 1. 获取环境变量 const cookie process.env.JD_COOKIE; if (!cookie) { console.log(未找到JD_COOKIE); return; } // 2. 构造请求头 const headers { Cookie: cookie, User-Agent: jdapp;android;10.0.5;, Referer: https://h5.m.jd.com/ }; // 3. 发送签到请求 try { const signRes await axios.post(https://api.m.jd.com/sign, body%7B%22activityId%22%3A%223%22%7D, { headers }); // 4. 解析响应 if (signRes.data.success) { const msg 签到成功获得${signRes.data.data.reward}金币; await notify.sendNotify(京东签到, msg); } else { await notify.sendNotify(京东签到, 签到失败 signRes.data.message); } } catch (e) { await notify.sendNotify(京东签到错误, e.message); } } main();这个脚本有几个关键点使用环境变量存储敏感信息完全模拟APP的请求头处理了各种异常情况集成通知功能5. 高级技巧与避坑指南5.1 反检测策略随着平台风控升级简单脚本很容易被识别。以下是几个实测有效的策略随机延迟在操作间添加随机等待时间function randomDelay() { return new Promise(resolve { setTimeout(resolve, Math.random() * 5000 3000); }); }设备指纹多样化每次请求使用不同的设备信息const devices [ Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X), Mozilla/5.0 (Linux; Android 10; SM-G975F) ]; headers[User-Agent] devices[Math.floor(Math.random() * devices.length)];请求参数混淆对固定参数进行轻度加密5.2 常见错误排查新手最容易遇到的三个问题及解决方法Cookie失效表现为返回未登录检查cookie是否过期通常1-2周需要更新确认没有多余的空格或换行符请求被拒绝返回403/404错误检查User-Agent是否与APP一致确认Referer等header设置正确数据解析失败无法读取response.data先用console.log打印完整响应检查是否是gzip压缩数据需要解压记得去年我写的一个阅读脚本突然失效排查半天才发现是APP更新后新增了签名验证。后来通过对比新旧版本抓包数据发现多了一个x-sign字段加上后就修复了。这种问题没有通用解法只能靠耐心分析。