Files
pages/2023/02/22/cron.html
2025-12-31 16:00:29 +00:00

338 lines
22 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- Begin Jekyll SEO tag v2.8.0 -->
<title>使用CF Workers Cron触发器进行签到 | Mayx的博客</title>
<meta name="generator" content="Jekyll v3.9.5" />
<meta property="og:title" content="使用CF Workers Cron触发器进行签到" />
<meta name="author" content="mayx" />
<meta property="og:locale" content="zh_CN" />
<meta name="description" content="Github Actions(×)Cloudflare Workers(√)" />
<meta property="og:description" content="Github Actions(×)Cloudflare Workers(√)" />
<meta property="og:site_name" content="Mayx的博客" />
<meta property="og:type" content="article" />
<meta property="article:published_time" content="2023-02-22T00:00:00+08:00" />
<meta name="twitter:card" content="summary" />
<meta property="twitter:title" content="使用CF Workers Cron触发器进行签到" />
<meta name="google-site-verification" content="huTYdEesm8NaFymixMNqflyCp6Jfvd615j5Wq1i2PHc" />
<meta name="msvalidate.01" content="0ADFCE64B3557DC4DC5F2DC224C5FDDD" />
<meta name="yandex-verification" content="fc0e535abed800be" />
<script type="application/ld+json">
{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"mayx"},"dateModified":"2023-02-22T00:00:00+08:00","datePublished":"2023-02-22T00:00:00+08:00","description":"Github Actions(×)Cloudflare Workers(√)","headline":"使用CF Workers Cron触发器进行签到","mainEntityOfPage":{"@type":"WebPage","@id":"/2023/02/22/cron.html"},"publisher":{"@type":"Organization","logo":{"@type":"ImageObject","url":"https://avatars0.githubusercontent.com/u/17966333"},"name":"mayx"},"url":"/2023/02/22/cron.html"}</script>
<!-- End Jekyll SEO tag -->
<link rel="canonical" href="https://mabbs.github.io/2023/02/22/cron.html" />
<link type="application/atom+xml" rel="alternate" href="/atom.xml" title="Mayx的博客" />
<link rel="alternate" type="application/rss+xml" title="Mayx的博客(RSS)" href="/rss.xml" />
<link rel="alternate" type="application/json" title="Mayx的博客(JSON Feed)" href="/feed.json" />
<link rel="stylesheet" href="/assets/css/style.css?v=1767196818" />
<!--[if !IE]> -->
<link rel="stylesheet" href="/Live2dHistoire/live2d/css/live2d.css" />
<!-- <![endif]-->
<link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="Mayx的博客" />
<link rel="webmention" href="https://webmention.io/mabbs.github.io/webmention" />
<link rel="pingback" href="https://webmention.io/mabbs.github.io/xmlrpc" />
<link rel="preconnect" href="https://summary.mayx.eu.org" crossorigin="anonymous" />
<link rel="prefetch" href="https://www.blogsclub.org/badge/mabbs.github.io" as="image" />
<link rel="blogroll" type="text/xml" href="/blogroll.opml" />
<link rel="me" href="https://github.com/Mabbs" />
<script src="/assets/js/jquery.min.js"></script>
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.3/jquery.xdomainrequest.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
<script>
var lastUpdated = new Date("Thu, 01 Jan 2026 00:00:18 +0800");
var BlogAPI = "https://summary.mayx.eu.org";
</script>
<script src="/assets/js/main.js"></script>
<!--[if !IE]> -->
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async="async" src="https://www.googletagmanager.com/gtag/js?id=UA-137710294-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-137710294-1');
</script>
<script src="/assets/js/instant.page.js" type="module"></script>
<!-- <![endif]-->
</head>
<body>
<!--[if !IE]> --><noscript><marquee style="top: -15px; position: relative;"><small>发现当前浏览器没有启用JavaScript这不影响你的浏览但可能会有一些功能无法使用……</small></marquee></noscript><!-- <![endif]-->
<!--[if IE]><marquee style="top: -15px; position: relative;"><small>发现当前浏览器为Internet Explorer这不影响你的浏览但可能会有一些功能无法使用……</small></marquee><![endif]-->
<div class="wrapper">
<header class="h-card">
<h1><a class="u-url u-uid p-name" rel="me" href="/">Mayx的博客</a></h1>
<img src="https://avatars0.githubusercontent.com/u/17966333" fetchpriority="high" class="u-photo" alt="Logo" style="width: 90%; max-width: 300px; max-height: 300px;" />
<p class="p-note">Mayx's Home Page</p>
<form action="/search.html">
<input type="text" name="keyword" id="search-input-all" placeholder="Search blog posts.." />&#160;<input type="submit" value="搜索" />
</form>
<br />
<p class="view"><a class="u-url" href="/Mabbs/">About me</a></p>
<ul class="downloads">
<li style="width: 270px; border-right: none;"><a href="/MayxBlog.tgz">Download <strong>TGZ File</strong></a></li>
</ul>
</header>
<section class="h-entry">
<small><time class="date dt-published" datetime="2023-02-22T00:00:00+08:00">22 February 2023</time> - 字数统计1960 - 阅读大约需要7分钟 - Hits: <span id="/2023/02/22/cron.html" class="visitors">Loading...</span></small>
<h1 class="p-name">使用CF Workers Cron触发器进行签到</h1>
<p class="view">by <a class="p-author h-card" href="//github.com/Mabbs">mayx</a></p>
<div id="outdate" style="display:none;">
<hr /><p>
这是一篇创建于 <span id="outime"></span> 天前的文章,其中的信息可能已经有所发展或是发生改变。
</p>
</div>
<script>
daysold = Math.floor((new Date().getTime() - new Date("Wed, 22 Feb 2023 00:00:00 +0800").getTime()) / (24 * 60 * 60 * 1000));
if (daysold > 90) {
document.getElementById("outdate").style.display = "block";
document.getElementById("outime").innerHTML = daysold;
}
</script>
<hr />
<b>AI摘要</b>
<p id="ai-output">这篇文章讲述了作者在云原神签到脚本被Github Actions禁用后选择使用Cloudflare Workers Cron触发器的原因。作者认为Workers更适合做这种简单的网络请求因为它资源消耗较少且不会像Actions那样遇到资源限制。作者分享了如何在Workers中编写签到脚本包括设置headers和获取必要的参数。此外作者建议将Cloudflare Workers用于日常签到等轻量级任务而更适合计算密集型工作的是Github Actions。作者还提到与云函数相比Workers可能具有更好的轻量化和环保优势。</p>
<hr />
<ul><li><a href="#起因">起因</a></li><li><a href="#使用cloudflare-workers-cron触发器">使用Cloudflare Workers Cron触发器</a></li><li><a href="#感想">感想</a></li></ul>
<hr />
<main class="post-content e-content" role="main"><p>Github Actions(×)Cloudflare Workers(√)<!--more--></p>
<h1 id="起因">
<a href="#起因"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> 起因
</h1>
<p>前几天,我的<a href="https://github.com/Mabbs/MHYY-AutoCheckin">云·原神签到脚本</a>被Github Ban掉了其实我非常能理解这种情况实际上用Actions做签到确实太重了。毕竟启动一个Actions需要的资源还算比较多相当于开一个Docker容器然而实际上做的事情却是很简单的请求一个接口罢了。而专业的全自动签到者有更专业的选择比如<a href="https://github.com/qiandao-today/qiandao">QianDao</a>可以挂很多签到脚本而且操作非常简单只是需要服务器……而我为了能保证优质的签到水平用这种东西显然还是不够稳当服务器还会到期呢所以像这种简单的事情我觉得还是应该用Cloudflare Workers来做更好。</p>
<h1 id="使用cloudflare-workers-cron触发器">
<a href="#使用cloudflare-workers-cron触发器"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> 使用Cloudflare Workers Cron触发器
</h1>
<p>其实有一说一我的Javascript并不怎么样不过至少文档我还是能看懂的Workers进行网络请求不需要用XHR这样奇怪的东西我感觉它应该是基于Node.js的看了一眼是用fetch函数去进行网络请求的 <del>(……又不是没用过,以前不还拿<a href="/2021/03/02/workers.html">Workers写反代</a>嘛……)</del> 另外又看了看Cron触发器的文档然后根据之前那个Python版因为懒得分析哪些请求有用没用了反正就三个都弄上吧……最终总算是知道怎么写了。于是代码如下</p>
<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nx">addEventListener</span><span class="p">(</span><span class="dl">'</span><span class="s1">scheduled</span><span class="dl">'</span><span class="p">,</span> <span class="nx">event</span> <span class="o">=&gt;</span> <span class="p">{</span>
<span class="nx">event</span><span class="p">.</span><span class="nx">waitUntil</span><span class="p">(</span>
<span class="nx">handleSchedule</span><span class="p">(</span><span class="nx">event</span><span class="p">.</span><span class="nx">scheduledTime</span><span class="p">)</span>
<span class="p">)</span>
<span class="p">})</span>
<span class="k">async</span> <span class="kd">function</span> <span class="nx">handleSchedule</span><span class="p">(</span><span class="nx">scheduledDate</span><span class="p">)</span> <span class="p">{</span>
<span class="kd">const</span> <span class="nx">init</span> <span class="o">=</span> <span class="p">{</span>
<span class="na">headers</span><span class="p">:</span> <span class="p">{</span>
<span class="dl">'</span><span class="s1">x-rpc-combo_token</span><span class="dl">'</span><span class="p">:</span> <span class="dl">'</span><span class="s1">填入Token</span><span class="dl">'</span><span class="p">,</span>
<span class="dl">'</span><span class="s1">x-rpc-client_type</span><span class="dl">'</span><span class="p">:</span> <span class="dl">'</span><span class="s1">2</span><span class="dl">'</span><span class="p">,</span>
<span class="dl">'</span><span class="s1">x-rpc-app_version</span><span class="dl">'</span><span class="p">:</span> <span class="dl">'</span><span class="s1">3.4.0</span><span class="dl">'</span><span class="p">,</span>
<span class="dl">'</span><span class="s1">x-rpc-sys_version</span><span class="dl">'</span><span class="p">:</span> <span class="dl">'</span><span class="s1">11</span><span class="dl">'</span><span class="p">,</span>
<span class="dl">'</span><span class="s1">x-rpc-channel</span><span class="dl">'</span><span class="p">:</span> <span class="dl">'</span><span class="s1">mihoyo</span><span class="dl">'</span><span class="p">,</span>
<span class="dl">'</span><span class="s1">x-rpc-device_id</span><span class="dl">'</span><span class="p">:</span> <span class="dl">'</span><span class="s1">填入设备ID</span><span class="dl">'</span><span class="p">,</span>
<span class="dl">'</span><span class="s1">x-rpc-device_name</span><span class="dl">'</span><span class="p">:</span> <span class="dl">'</span><span class="s1">填入手机名称</span><span class="dl">'</span><span class="p">,</span>
<span class="dl">'</span><span class="s1">x-rpc-device_model</span><span class="dl">'</span><span class="p">:</span> <span class="dl">'</span><span class="s1">填入手机型号</span><span class="dl">'</span><span class="p">,</span>
<span class="dl">'</span><span class="s1">x-rpc-app_id</span><span class="dl">'</span><span class="p">:</span> <span class="dl">'</span><span class="s1">1953439974</span><span class="dl">'</span><span class="p">,</span>
<span class="dl">'</span><span class="s1">Referer</span><span class="dl">'</span><span class="p">:</span> <span class="dl">'</span><span class="s1">https://app.mihoyo.com</span><span class="dl">'</span><span class="p">,</span>
<span class="dl">'</span><span class="s1">Host</span><span class="dl">'</span><span class="p">:</span> <span class="dl">'</span><span class="s1">api-cloudgame.mihoyo.com</span><span class="dl">'</span><span class="p">,</span>
<span class="dl">'</span><span class="s1">Connection</span><span class="dl">'</span><span class="p">:</span> <span class="dl">'</span><span class="s1">Keep-Alive</span><span class="dl">'</span><span class="p">,</span>
<span class="dl">'</span><span class="s1">Accept-Encoding</span><span class="dl">'</span><span class="p">:</span> <span class="dl">'</span><span class="s1">gzip</span><span class="dl">'</span><span class="p">,</span>
<span class="dl">'</span><span class="s1">User-Agent</span><span class="dl">'</span><span class="p">:</span> <span class="dl">'</span><span class="s1">okhttp/4.9.0</span><span class="dl">'</span>
<span class="p">},</span>
<span class="p">};</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">scheduledDate</span><span class="p">);</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="k">await</span> <span class="nx">fetch</span><span class="p">(</span><span class="dl">"</span><span class="s2">https://api-cloudgame.mihoyo.com/hk4e_cg_cn/wallet/wallet/get</span><span class="dl">"</span><span class="p">,</span> <span class="nx">init</span><span class="p">));</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="k">await</span> <span class="nx">fetch</span><span class="p">(</span><span class="dl">"</span><span class="s2">https://api-cloudgame.mihoyo.com/hk4e_cg_cn/gamer/api/getAnnouncementInfo</span><span class="dl">"</span><span class="p">,</span> <span class="nx">init</span><span class="p">));</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="k">await</span> <span class="nx">fetch</span><span class="p">(</span><span class="dl">"</span><span class="s2">https://api-cloudgame.mihoyo.com/hk4e_cg_cn/gamer/api/listNotifications?status=NotificationStatusUnread&amp;type=NotificationTypePopup&amp;is_sort=true</span><span class="dl">"</span><span class="p">,</span> <span class="nx">init</span><span class="p">));</span>
<span class="p">}</span>
</code></pre></div></div>
<p>至于怎么获取Token之类的参数用HttpCanary之类的抓包就好了不过要先启动云·原神之后再抓包不然程序貌似会检验SSL证书是不是合法的然后就退出登录了……抓到之后随便点开一个请求里面就有上面的值了根据情况填到上面就行了。 </p><p>
还有Workers的配置就很简单了把代码粘到Workers里面之后在触发器里面的“Cron 触发器”中设定时间就行了一般就一天一次反正它能自动生成Cron表达式也不用自己写要不写“0 0 * * *”也行,然后就什么都不用做了。</p>
<h1 id="感想">
<a href="#感想"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> 感想
</h1>
<p>写完这个签到脚本之后我觉得应该鼓励大家都去使用Workers这种方法去进行签到Cloudflare可不会因为这种东西去Ban你的东西至于Actions应该更多用于更需要计算资源的事情比如编译代码啊或者生成静态HTML还是日报之类的签到啥的确实是太浪费了而且还会Ban</p><p>
还有就是云函数啥的……不过那个貌似本质来说还是Docker它运行时是一个完整的环境不像Workers那样应该是运行在一个更加轻量的沙箱里的也许还更环保呢XD。</p></main>
<small style="display: block">tags: <a rel="category tag" class="p-category" href="/search.html?keyword=Javascript"><em>Javascript</em></a> - <a rel="category tag" class="p-category" href="/search.html?keyword=Cloudflare"><em>Cloudflare</em></a> - <a rel="category tag" class="p-category" href="/search.html?keyword=cron"><em>cron</em></a> - <a rel="category tag" class="p-category" href="/search.html?keyword=workers"><em>workers</em></a> <span style="float: right;"><a href="https://gitlab.com/mayx/mayx.gitlab.io/tree/master/_posts/2023-02-22-cron.md">查看原始文件</a></span></small>
<h4 style="border-bottom: 1px solid #e5e5e5;margin: 2em 0 5px;">推荐文章</h4>
<p id="suggest-container">Loading...</p>
<script>
var suggest = $("#suggest-container");
$.get(BlogAPI + "/suggest?id=/2023/02/22/cron.html&update=" + lastUpdated.valueOf(), function (data) {
if (data.length) {
getSearchJSON(function (search) {
suggest.empty();
var searchMap = {};
for (var i = 0; i < search.length; i++) {
searchMap[search[i].url] = search[i];
}
var tooltip = $('<div class="content-tooltip"></div>').appendTo('body').hide();
for (var j = 0; j < data.length; j++) {
var item = searchMap[data[j].id];
if (item) {
var link = $('<a href="' + item.url + '">' + item.title + '</a>');
var contentPreview = item.content.substring(0, 100);
if (item.content.length > 100) {
contentPreview += "……";
}
link.hover(
function(e) {
tooltip.text($(this).data('content'))
.css({
top: e.pageY + 10,
left: e.pageX + 10
})
.show();
},
function() {
tooltip.hide();
}
).mousemove(function(e) {
tooltip.css({
top: e.pageY + 10,
left: e.pageX + 10
});
}).data('content', contentPreview);
suggest.append(link);
suggest.append(' - ' + item.date + '<br />');
}
}
});
} else {
suggest.html("暂无推荐文章……");
}
});
</script>
<br />
<div class="pagination">
<span class="prev">
<a href="/2023/02/03/mbp.html">
上一篇MacBook Pro 2022 13寸使用体验
</a>
</span>
<br />
<span class="next">
<a href="/2023/03/12/php-async.html">
下一篇PHP异步执行的探索
</a>
</span>
</div>
<!--[if !IE]> -->
<link rel="stylesheet" href="/assets/css/gitalk.css">
<script src="/assets/js/gitalk.min.js"></script>
<div id="gitalk-container"></div>
<script>
var gitalk = new Gitalk({
clientID: '36557aec4c3cb04f7ac6',
clientSecret: 'ac32993299751cb5a9ba81cf2b171cca65879cdb',
repo: 'mabbs.github.io',
owner: 'Mabbs',
admin: ['Mabbs'],
id: '/2023/02/22/cron', // Ensure uniqueness and length less than 50
distractionFreeMode: false, // Facebook-like distraction free mode
proxy: "https://cors-anywhere.mayx.eu.org/?https://github.com/login/oauth/access_token"
})
gitalk.render('gitalk-container')
</script>
<!-- <![endif]-->
</section>
<!--[if !IE]> -->
<div id="landlord" style="left:5px;bottom:0px;">
<div class="message" style="opacity:0"></div>
<canvas id="live2d" width="500" height="560" class="live2d"></canvas>
<div class="live_talk_input_body">
<form id="live_talk_input_form">
<div class="live_talk_input_name_body" >
<input type="checkbox" id="load_this" />
<input type="hidden" id="post_id" value="/2023/02/22/cron.html" />
<label for="load_this">
<span style="font-size: 11px; color: #fff;">&#160;想问这篇文章</span>
</label>
</div>
<div class="live_talk_input_text_body">
<input name="talk" type="text" class="live_talk_talk white_input" id="AIuserText" autocomplete="off" placeholder="要和我聊什么呀?" />
<button type="submit" class="live_talk_send_btn" id="talk_send">发送</button>
</div>
</form>
</div>
<input name="live_talk" id="live_talk" value="1" type="hidden" />
<div class="live_ico_box" style="display:none;">
<div class="live_ico_item type_info" id="showInfoBtn"></div>
<div class="live_ico_item type_talk" id="showTalkBtn"></div>
<div class="live_ico_item type_music" id="musicButton"></div>
<div class="live_ico_item type_youdu" id="youduButton"></div>
<div class="live_ico_item type_quit" id="hideButton"></div>
<input name="live_statu_val" id="live_statu_val" value="0" type="hidden" />
<audio src="" style="display:none;" id="live2d_bgm" data-bgm="0" preload="none"></audio>
<input id="duType" value="douqilai" type="hidden" />
</div>
</div>
<div id="open_live2d">召唤伊斯特瓦尔</div>
<!-- <![endif]-->
<footer>
<p>
<small>Made with ❤ by Mayx<br />Last updated at 2026-01-01 00:00:18<br /> 总字数614622 - 文章数178 - <a href="/atom.xml" >Atom</a> - <a href="/README.html" >About</a></small>
</p>
</footer>
</div>
<script src="/assets/js/scale.fix.js"></script>
<!--[if !IE]> -->
<script src="/assets/js/main_new.js"></script>
<script src="/Live2dHistoire/live2d/js/live2d.js"></script>
<script src="/Live2dHistoire/live2d/js/message.js"></script>
<!-- <![endif]-->
</body>
</html>