租的服务器到期了但是薅羊毛的脚本不能停啊,虽然一年下来收益不过百来块,就是图一乐,本来想着将青龙面板装到本地, 但是觉得不太安全, 于是自己捏了一个毛坯房,其实还有更简单的方法,就是使用windows的定时任务,但是不太灵活,比如设置每天定时执行,错过时间了怎么办?另外,我尝试过并没有运行脚本。

我的程序很简单主要部分就是添加任务设置cron格式的执行时间,然后主程序不断循环检查是否有任务需要执行,次要部分就是界面了老规矩fastapi+vue, 界面写起来容易前后端拼起来就难了,主要还是水平太菜python和html都不太会,前前后后花了一个月时间吧,总算是能自动跑脚本了,然后 我发现为了这点苍蝇肉花了那么多功夫真是蠢到家了。

模仿青龙面板的任务执行器 第5张插图

重要说明: 添加任务时的cron格式: 分 时 天 周 月 (貌似, 我也忘了, copy别人的代码, 自己只用到前面两个时间, 具体可以在cron.py看)
程序有很多bug, 捉了一礼拜, 弃疗了...

附上如何跑脚本的脚本

import os
from subprocess import Popen, PIPE
from pathlib import Path

WorkDir = Path(__file__).parent
os.chdir(WorkDir)# 设置工作目录为脚本所在目录, 防止脚本内部引用时找不到模块

dir = os.curdir# 脚本所在目录

scripts = [
    "jd_bean_change_pro.js",
    "jd_beanSign.js",
    "jd_bean_home.js",
    "jd_cxjhelp_draw.js",
    "jd_dwapp.js",
    "jd_fruit_task.js",
    "jd_kd.js",
    "jd_krsign.js",
    "jd_plantBean.js",
    "jd_price.js",
    "jd_qdtx.js",
    "jd_sign_graphics.js",
    "jd_speed_sign_new.js",
    "jd_tj_sign.js",
    "jd_ttlhb.js",
    "jd_unsubscribe.js",
]

def sprint(msg: str):
    print(f"\033[1;34;40m{msg}\033[0m")

print(f"Start executing jobs, total [{len(scripts)}]")
for i, script in enumerate(scripts):
    msg = f"start to executing job[{i}]:{script}"
    sprint(msg)
    full_path = os.path.join(dir, script)
    process = Popen(["node", full_path], stdout=PIPE, stderr=PIPE,encoding='utf8')
    stdout, stderr = process.communicate()
    res = stdout.decode("utf-8")
    err = stderr.decode("utf-8")
    print(res)
    print(err)
    msg = f"Complete job[{i}]:{script}"
    sprint(msg)
    if "cookie已失效" in res:
        print("JD Cookie 已经过期!")
        break

软件运行需要安装python3.11以及其他依赖。