forked from easychen/checkchan-dist
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathreadme.html
190 lines (190 loc) · 20.2 KB
/
readme.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
<h1>Check酱</h1>
<p><strong>Check酱是一个通用网页内容监控工具,可以监测网页内容变化,并发送异动到微信</strong></p>
<p><a target="_blank" rel="noopener noreferrer" href="image/20220526194209.png"><img src="image/20220526194209.png" alt="" style="max-width: 100%;"></a></p>
<p><g-emoji class="g-emoji" alias="warning" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/26a0.png">⚠️</g-emoji> docker目录下的代码仅供安全核查和编译多平台镜像,采用附加条件的GPLV3授权:</p>
<ol>
<li><strong>不得修改或删除</strong>默认对接的Server酱通道。</li>
<li>不得对接<strong>其他消息通道</strong>后再次发布。</li>
<li>满足以上两个条件后,遵从<strong>GPLv3</strong>协议。</li>
</ol>
<h2>最新版本</h2>
<ul>
<li>插件·Chrome/Edge:2022.05.28.23.49 <a href="ckc.zip">下载</a></li>
<li>自架云端Docker镜像:2022.05.28.23.42 <a href="https://hub.docker.com/repository/docker/easychen/checkchan" rel="nofollow">Docker Hub</a></li>
<li>文档:2022.05.28.23.49</li>
<li>更新日志:<a href="https://github.com/easychen/checkchan-dist/commits/main">GitHub</a></li>
</ul>
<p>自架云端 Docker 命令( 将<code class="notranslate">API Key</code>从<code class="notranslate">YouRAPiK1</code>替换成<code class="notranslate">任意你想要的安全密码不要带$</code>):</p>
<div class="highlight highlight-source-shell"><pre>docker run -e API_KEY=YouRAPiK1 -e TZ=Asia/Chongqing -e ERROR_IMAGE=NORMAL -p 8088:80 -v <span class="pl-smi">$PWD</span>:/data -d ccr.ccs.tencentyun.com/ftqq/checkchan:latest</pre></div>
<ul>
<li>特别提醒:后文有详细的安装说明</li>
<li>特别提醒1:<code class="notranslate">/data</code>挂载的目录需要写权限</li>
<li>特别提醒2:此镜像为x86架构,arm架构镜像可<a href="https://github.com/easychen/checkchan-dist/tree/main/docker">拉取源码</a>自行构建</li>
</ul>
<h2>什么是「Check酱」</h2>
<p><a target="_blank" rel="noopener noreferrer" href="image/20220521132637.png"><img src="image/20220521132637.png" alt="" style="max-width: 100%;"></a></p>
<p>Check酱是方糖气球出品的网页内容监测工具,它包含一个Edge/Chrome<strong>浏览器插件</strong>和可以自行架设的<strong>云端</strong>。</p>
<p>基于浏览器插件,它通过<strong>可视化选择器</strong>理论上可以监控网页上的任意内容(文本)、除了浏览器通知,还可以配合<a href="https://sct.ftqq.com" rel="nofollow">Server酱</a>将异动推送到微信或手机。</p>
<p><a target="_blank" rel="noopener noreferrer" href="image/20220521134213.png"><img src="image/20220521134213.png" alt="" style="max-width: 100%;"></a></p>
<p>Check酱的原理是,通过浏览器插件后台打开网页进行监测,从而<strong>完全模拟用户的真实行为</strong>,可以监控绝大部分复杂的动态网页,需要登录的各种后台页面,并(在绝大多数情况下)自动延续登录态。</p>
<p>除了支持网页内容(Dom)的监测,还支持HTTP状态(通过GET监测)、JSON和RSS方式。</p>
<p><a target="_blank" rel="noopener noreferrer" href="image/20220521134438.png"><img src="image/20220521134438.png" alt="" style="max-width: 100%;"></a></p>
<p>配合可以自行架设的<strong>云端</strong>,可以将监测任务同步到服务器,这样当浏览器和电脑关掉以后,监测任务依然可以定时运行。</p>
<p><a target="_blank" rel="noopener noreferrer" href="image/20220521135441.png"><img src="image/20220521135441.png" alt="" style="max-width: 100%;"></a></p>
<h2>插件的安装和使用</h2>
<p>插件可以独立使用,只是关掉后定时监测任务不执行。</p>
<h3>安装</h3>
<blockquote>
<p>目前Check酱正在内测,尚未上架Edge商店,只能通过手工方式载入</p>
</blockquote>
<p>下载<a href="ckc.zip">插件ZIP包</a>,解压为目录(后文称其为A)。</p>
<p>打开Edge的插件页面,打开「开发者模式」,点击「Load Unpacked」,选择上边解压得到的目录A。</p>
<p><a target="_blank" rel="noopener noreferrer" href="image/20220521140506.png"><img src="image/20220521140506.png" alt="" style="max-width: 100%;"></a></p>
<p>成功载入的话,就可以看到Check酱界面了。如果失败,通常是因为解压时多了一层目录导致的,可以试试重新选择A目录的下一级目录</p>
<h3>使用</h3>
<h4>添加网页监控点</h4>
<p>安装插件后,打开要监控的网页,在网页上点击右键,可以看到「定位监测对象」一项。</p>
<p><a target="_blank" rel="noopener noreferrer" href="image/20220521134213.png"><img src="image/20220521134213.png" alt="" style="max-width: 100%;"></a></p>
<p>点击后,开始初始化可视化选择器。</p>
<p><a target="_blank" rel="noopener noreferrer" href="image/20220521145527.png"><img src="image/20220521145527.png" alt="" style="max-width: 100%;"></a></p>
<p>移动鼠标可以看到高亮区域,放到要监控的文字上点击鼠标左键。</p>
<blockquote>
<p>注意,选择区域必须包含文本,否则会返回空。有很多文本是印在图片上的,这种也会返回空。</p>
</blockquote>
<p><a target="_blank" rel="noopener noreferrer" href="image/20220521145653.png"><img src="image/20220521145653.png" alt="" style="max-width: 100%;"></a></p>
<p>将转向到添加页面。</p>
<p><a target="_blank" rel="noopener noreferrer" href="image/20220521145825.png"><img src="image/20220521145825.png" alt="" style="max-width: 100%;"></a></p>
<p>可以修改名称、设置监控间隔时间、延迟、最大重试次数。在保存之前,最好点击<code class="notranslate">CSS选择器路径</code>一栏后的<code class="notranslate">测试</code>按钮进行测试。</p>
<p>如果提示「检测内容为空」,说明存在问题。再次点击进行观察:</p>
<p>如果发现页面打开后favicon没有出来就关了,可以增加「延迟读取」的秒数;如果打开后还是返回空,那么刚才自动生成的选择器路径可能不正确。</p>
<p>可以更换为浏览器自动生成的,方法如下:</p>
<p>① 在要检测的文本上点右键,选择「inspect/审查元素」</p>
<p><a target="_blank" rel="noopener noreferrer" href="image/20220521150539.png"><img src="image/20220521150539.png" alt="" style="max-width: 100%;"></a></p>
<p>② 这时候会自动打开开发者工具,并自动选中源码中元素的对应行。在高亮的行上点击右键,选择「复制/Copy」→ 「复制选择器/Copy selector」</p>
<p><a target="_blank" rel="noopener noreferrer" href="image/20220521150708.png"><img src="image/20220521150708.png" alt="" style="max-width: 100%;"></a></p>
<p>③ 将复制到的剪贴板的路径填入到「CSS选择器路径」一行后,再次点击「测试」按钮进行测试。</p>
<p>测试通过后,点击「提交」保存监测点。</p>
<h4>通过Server酱推送到微信和其他设备</h4>
<p><a target="_blank" rel="noopener noreferrer" href="image/20220521224002.png"><img src="image/20220521224002.png" alt="" style="max-width: 100%;"></a></p>
<p>在添加和修改监测点时,填入Sendkey即可将消息推送到Server酱。</p>
<h5>如何获得 SendKey</h5>
<p>登录<a href="https://sct.ftqq.com" rel="nofollow">Server酱官网</a>,进入「<a href="https://sct.ftqq.com/sendkey" rel="nofollow">Key&API</a>」,点击「复制」按钮即可。</p>
<p><a target="_blank" rel="noopener noreferrer" href="image/20220521224512.png"><img src="image/20220521224512.png" alt="" style="max-width: 100%;"></a></p>
<h5>如何推送到其他通道</h5>
<p>登录<a href="https://sct.ftqq.com" rel="nofollow">Server酱官网</a>,进入「<a href="https://sct.ftqq.com/forward" rel="nofollow">通道配置</a>」,选择要推送的通道,并按页面上的说明进行配置。可以将消息推送到「PushDeer」和各种群机器人。</p>
<p><a target="_blank" rel="noopener noreferrer" href="image/20220521224356.png"><img src="image/20220521224356.png" alt="" style="max-width: 100%;"></a></p>
<p>如果以上通道不能满足你的需要,可以选择「自定义」通道,发送自定义的http请求。此方式可以兼容绝大部分通知接口。</p>
<p><a target="_blank" rel="noopener noreferrer" href="image/20220521225027.png"><img src="image/20220521225027.png" alt="" style="max-width: 100%;"></a></p>
<h3>导入和导出全部监控点</h3>
<p>点击监控点列表右上方的向上和向下箭头可以导入和导出全部监控点。</p>
<p><a target="_blank" rel="noopener noreferrer" href="image/20220522114033.png"><img src="image/20220522114033.png" alt="" style="max-width: 100%;"></a></p>
<h3>分享和导入监控点</h3>
<p>点击监控点列表中的「剪贴板」,可以将当前监控点的设置导出到剪贴板。</p>
<p><a target="_blank" rel="noopener noreferrer" href="image/20220522110215.png"><img src="image/20220522110215.png" alt="" style="max-width: 100%;"></a></p>
<p>导出数据类似这样:</p>
<pre class="notranslate"><code class="notranslate">checkchan://title=Server%E9%85%B1%E5%AE%98%E6%96%B9%E7%BD%91%E7%AB%99%E7%8A%B6%E6%80%81&url=https%3A%2F%2Fsct.ftqq.com&type=get&code=200&rss_field=title&delay=3&retry=10
</code></pre>
<p>复制以上字符后,在Check酱浏览器插件界面通过Ctrl+V粘贴,会自动识别并跳转到「添加监测点」界面。</p>
<p><a target="_blank" rel="noopener noreferrer" href="image/20220522113944.png"><img src="image/20220522113944.png" alt="" style="max-width: 100%;"></a></p>
<h3>监测周期限制</h3>
<p>有些任务只需要在特定的时间段执行,为了节省资源,我们添加了「监测周期限制」功能。比如某动画每周五上午十点更新,那么我们可以将「监测周期限制」设置如下:</p>
<p><a target="_blank" rel="noopener noreferrer" href="image/20220523213852.png"><img src="image/20220523213852.png" alt="" style="max-width: 100%;"></a></p>
<p>这样其他时间段就不再启动监测。对于无法预知事件段的任务,使用默认的「每分钟」即可。</p>
<p>注意在「监测周期限制」之上,还有「监控间隔时间」。</p>
<p><a target="_blank" rel="noopener noreferrer" href="image/20220523214048.png"><img src="image/20220523214048.png" alt="" style="max-width: 100%;"></a></p>
<p>如果 「监测周期限制」 为每分钟,而「监控间隔时间」为60分钟,那么每分钟都会尝试监测,而一旦监测成功一次,那么下次监测将是60分钟后。</p>
<p>同时,因为执行监测任务本身也耗费时间,所以「监控间隔时间」为1分钟时,往往每隔一分钟(即每两分钟)才会运行一次任务。</p>
<h3>日志查看和错误定位</h3>
<p>为了更清楚的了解定时任务的执行情况,你可以打开「开发者工具」(F12)在 <code class="notranslate">Console</code> 标签页中可以看到任务产生的日志。</p>
<p><a target="_blank" rel="noopener noreferrer" href="image/20220523211235.png"><img src="image/20220523211235.png" alt="" style="max-width: 100%;"></a></p>
<p>错误信息也会在这里以红色高亮的行显示,遇到Bug时提供日志错误截图可以帮助我们更快的定位到问题。</p>
<h3>更新浏览器插件</h3>
<p>上架商店后,可以自动升级,在此之前需要手动升级。升级方式为下载zip包解压后覆盖原有文件,再在浏览器的插件管理面板中「reload」一下。</p>
<p><a target="_blank" rel="noopener noreferrer" href="image/20220524171157.png"><img src="image/20220524171157.png" alt="" style="max-width: 100%;"></a></p>
<h2>自架云端的安装和使用</h2>
<p>配合自行架设的服务器,可以将任务同步到云端执行,即使关掉浏览器和电脑后监测任务也会一直运行。</p>
<blockquote>
<p><g-emoji class="g-emoji" alias="warning" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/26a0.png">⚠️</g-emoji> 特别说明:因为云端的网络、环境都和本机不同,所以并不保证本机能运行的任务都能在云端运行成功,一些复杂网页和有较多动态效果的网页可能失败。</p>
</blockquote>
<h3>安装</h3>
<blockquote>
<p>架设自架版云端需要技术基础,非技术用户建议购买我们的官方版云端(将在内测完成后发布)</p>
</blockquote>
<p>为方便安装,自架版云端需要docker环境。如果你没有云服务器,可以看看<a href="https://curl.qcloud.com/VPjlS4gj" rel="nofollow">腾讯云30~50元首单的特价服务器</a>。</p>
<h4>通过 Docker-compose 启动</h4>
<p>登录服务器(假设其IP为IPB),在要安装的目录下,新建一个 <code class="notranslate">docker-compose.yml</code> 文件,复制张贴下边的内容:</p>
<div class="highlight highlight-source-yaml"><pre><span class="pl-ent">version</span>: <span class="pl-s"><span class="pl-pds">'</span>2<span class="pl-pds">'</span></span>
<span class="pl-ent">services</span>:
<span class="pl-ent">api</span>:
<span class="pl-ent">image</span>: <span class="pl-s">ccr.ccs.tencentyun.com/ftqq/checkchan:latest</span>
<span class="pl-ent">volumes</span>:
- <span class="pl-s"><span class="pl-pds">'</span>./:/data<span class="pl-pds">'</span></span>
<span class="pl-ent">ports</span>:
- <span class="pl-s"><span class="pl-pds">'</span>8088:80<span class="pl-pds">'</span></span>
<span class="pl-ent">environment</span>:
- <span class="pl-s">API_KEY=<这里写一个你自己想的API_KEY></span>
- <span class="pl-s">ERROR_IMAGE=NORMAL </span><span class="pl-c"><span class="pl-c">#</span> NONE,NORMAL,FULL</span>
- <span class="pl-s">SNAP_URL_BASE=<开启截图在这里写服务器地址,不开留空> </span><span class="pl-c"><span class="pl-c">#</span>如 http://ip.com/</span>
- <span class="pl-s">SNAP_FULL=1 </span><span class="pl-c"><span class="pl-c">#</span>完整网页长图</span>
- <span class="pl-s">TZ=Asia/Chongqing</span></pre></div>
<p>将其中 <code class="notranslate"><这里写一个你自己想的API_KEY></code> 换成一个别人不知道的密码(下文称密码C<br>
)。注意不要包含<code class="notranslate">$</code>字符,替换完后也不再有两边的尖括号<code class="notranslate"><></code>。</p>
<p>保证Docker用户对此目录有写权限,并在同一目录下运行以下命令:</p>
<div class="highlight highlight-source-shell"><pre>docker-compose up -d</pre></div>
<blockquote>
<p>如提示docker服务未安装/找不到/未启动,可在 docker-compose 前加 sudo 再试</p>
</blockquote>
<p>等待初始化完成后,访问 <code class="notranslate">http://$BBB:8088?key=$CCC</code>( 将$BBB替换为IP B,$CCC替换为密码C ),看到包含 <code class="notranslate">it works</code> 的提示即为架设成功。</p>
<p><a target="_blank" rel="noopener noreferrer" href="image/20220521142747.png"><img src="image/20220521142747.png" alt="" style="max-width: 100%;"></a></p>
<h4>通过 Docker 启动</h4>
<div class="highlight highlight-source-shell"><pre>docker run -e API_KEY=<span class="pl-k">*</span> -e TZ=Asia/Chongqing -p 8088:80 -v <span class="pl-smi">$PWD</span>:/data -d ccr.ccs.tencentyun.com/ftqq/checkchan:latest</pre></div>
<p>请将上述命令中的*替换为对应的数据库信息。</p>
<h4>更新镜像</h4>
<p>Check酱云端镜像更新后,你可以将正在运行的云端服务升级到最新版。方式如下:</p>
<p>首先停现有的容器:</p>
<p>通过 docker-compose 启动的运行:</p>
<div class="highlight highlight-source-shell"><pre>docker-compose down</pre></div>
<p>通过 docker 直接启动的运行 <code class="notranslate">docker ps</code> 查询到容器id,通过 <code class="notranslate">docker stop 容器id</code> 停止。</p>
<p>然后运行 docker pull 拉取最新版:</p>
<div class="highlight highlight-source-shell"><pre>docker pull ccr.ccs.tencentyun.com/ftqq/checkchan:latest</pre></div>
<p>完成后再启动服务即可。</p>
<h3>将浏览器插件对接云端</h3>
<p><a target="_blank" rel="noopener noreferrer" href="image/20220521144137.png"><img src="image/20220521144137.png" alt="" style="max-width: 100%;"></a></p>
<p>点击插件右上方菜单中的<code class="notranslate">云端服务</code>。</p>
<p>在<code class="notranslate">服务器地址</code>一栏输入 <code class="notranslate">http://$BBB:8088</code>(将$BBB替换为IP B,这里的URL不用加key参数);在<code class="notranslate">API_KEY</code>一栏输入密码C。</p>
<p>点击保存,连接成功后,配置完成。</p>
<h3>同步本地任务到云端</h3>
<p>配置好云端以后回到列表页,每行最右边会多出来一个「电脑」图标,点击后会变成「云」图标,该任务将改为在云端执行。</p>
<p><a target="_blank" rel="noopener noreferrer" href="image/20220521144707.png"><img src="image/20220521144707.png" alt="" style="max-width: 100%;"></a></p>
<p>点击右上角 「云+箭头」的按钮,可以主动同步任务到云端。</p>
<p><a target="_blank" rel="noopener noreferrer" href="image/20220521145106.png"><img src="image/20220521145106.png" alt="" style="max-width: 100%;"></a></p>
<p>Check酱也会每十分钟自动同步一次。</p>
<h3>云端截图</h3>
<p>Check酱自架云端支持对网页(dom)类型任务进行截图,可以通过给镜像传递环境变量来开启:</p>
<ul>
<li>SNAP_URL_BASE=<开启截图在这里写服务器地址,不开留空> #如 <a href="http://ip.com/" rel="nofollow">http://ip.com/</a></li>
<li>SNAP_FULL=1 #完整网页长图</li>
</ul>
<p>可参考上文的<code class="notranslate">docker-compser.yml</code>。添加环境变量后重启服务即可。</p>
<p>注意</p>
<ul>
<li>截图功能需要较大的内存,部分服务器可能会报错</li>
<li>云端网络和本地不同,可能会超时失败,请适当增加延时,并将取消完整截图</li>
</ul>
<h3>云端任务的安全性</h3>
<p>Check酱云端任务的原理是将cookie同步到云端,然后用浏览器查看,本质和用户操作一样。但因为出口IP可能是机房和数据中心,频次太高也有被风控的可能。如果将云端部署在家里,则和在家用电脑访问效果一样。</p>
<h3>云端错误排查</h3>
<p>通常来讲,出现本地任务可以执行,云端不能执行的问题,是因为两者网络环境、浏览器软件存在差异,比如:</p>
<ol>
<li>页面结构每次都会变动:比如一些网站的首页,建议进入分类列表页面选择监控点</li>
<li>电脑网络和云端网络不同:在浏览器中可以访问的内容,在数据中心可能访问不到</li>
<li>CDN更新延迟:电脑和云端CDN节点刷新未完成,会造成一边可用一边不可用,等待更新完成后再监控</li>
<li>浏览器插件改变了网页结构:比如本地通过 AdBlock 过滤了广告,但云端没有,造成结构不同,监测失败</li>
</ol>
<p>由于服务器内存通常没大家电脑大,所以很多在本地执行OK的任务同步到云端后会因为「延迟读取」秒数太小中途停止而失败。如果遇到类似情况,请尝试增加「延迟读取」。</p>
<p><a target="_blank" rel="noopener noreferrer" href="image/20220523212625.png"><img src="image/20220523212625.png" alt="" style="max-width: 100%;"></a></p>
<p>如果这样也不行,往往是因为云端无头浏览器显示网页和本地存在差异导致,我们为这种情况生成了最近一次失败的任务的截图,可以在「云端服务」菜单下看到。</p>
<p><a target="_blank" rel="noopener noreferrer" href="image/20220523213104.png"><img src="image/20220523213104.png" alt="" style="max-width: 100%;"></a></p>
<p>点击「失败截图」按钮即可看到。注意:需要只用最新的镜像,并传递<code class="notranslate">ERROR_IMAGE=NORMAL</code> 环境变量。如果希望截取完整网页的图片,可以传递<code class="notranslate">ERROR_IMAGE=FULL</code>。</p>
<p>如果任务失败又没有截图,说明该任务不是因为CSS选择器未命中而失败,尝试增加「延迟读取」可能解决。</p>
<p>这个页面也能看到云端任务日志,这里的日志不包含手动点击「监测」按钮触发的任务。如果没有可以执行的任务(任务是定时触发的),那么日志亦可能为空。</p>