Giter VIP home page Giter VIP logo

easychen / checkchan-dist Goto Github PK

View Code? Open in Web Editor NEW
1.6K 13.0 153.0 108 MB

Check酱:监测网页内容变化,并发送异动到微信。亦支持http status、json和rss监测。配合自架云端,关电脑后也能运行。

Home Page: https://ckc.ftqq.com

License: Other

HTML 2.16% CSS 0.02% Dockerfile 0.22% JavaScript 97.42% Shell 0.14% PHP 0.04%
monitoring-server monitoring-tool wechat

checkchan-dist's Introduction

Check酱

Check酱是一个通用网页内容监控工具,可以监测网页内容变化,并发送异动到微信

商店安装

微软Edge 谷歌Chrome

点以上图标进入商店页面或者直接在商店搜索「Check酱」即可

官方视频教程

详细版,近2小时

开源声明

⚠️ 浏览器插件不开源,docker目录下的代码仅供安全核查和编译多平台镜像,采用附加条件的GPLV3授权:

  1. 不得修改或删除默认对接的Server酱通道。
  2. 不得对接其他消息通道后再次发布。
  3. 满足以上两个条件后,遵从GPLv3协议。

最新版本

Docker镜像安装命令请参阅后文云端架设一节

什么是「Check酱」

Check酱是方糖气球出品的网页内容监测工具,它包含一个Edge/Chrome浏览器插件和可以自行架设的云端

基于浏览器插件,它通过可视化选择器理论上可以监控网页上的任意内容(文本)、除了浏览器通知,还可以配合Server酱将异动推送到微信或手机。

Check酱的原理是,通过浏览器插件后台打开网页进行监测,从而完全模拟用户的真实行为,可以监控绝大部分复杂的动态网页,需要登录的各种后台页面,并(在绝大多数情况下)自动延续登录态。

除了支持网页内容(Dom)的监测,还支持HTTP状态(通过GET监测)、JSON和RSS方式。

配合可以自行架设的云端,可以将监测任务同步到服务器,这样当浏览器和电脑关掉以后,监测任务依然可以定时运行。

插件的安装和使用

插件可以独立使用,只是关掉后定时监测任务不执行。

安装

目前Check酱正在内测,尚未上架Edge商店,只能通过手工方式载入

下载插件ZIP包(Github下载地址,无需注册),解压为目录(后文称其为A)。

打开Edge的插件页面,打开「开发者模式」,点击「Load Unpacked」,选择上边解压得到的目录A。

成功载入的话,就可以看到Check酱界面了。如果失败,通常是因为解压时多了一层目录导致的,可以试试重新选择A目录的下一级目录

使用

添加网页监控点

安装插件后,打开要监控的网页,在网页上点击右键,可以看到「定位监测对象」一项。

点击后,开始初始化可视化选择器。

移动鼠标可以看到高亮区域,放到要监控的文字上点击鼠标左键。

注意,选择区域必须包含文本,否则会返回空。有很多文本是印在图片上的,这种也会返回空。

将转向到添加页面。

可以修改名称、设置监控间隔时间、延迟、最大重试次数。在保存之前,最好点击CSS选择器路径一栏后的测试按钮进行测试。

如果提示「检测内容为空」,说明存在问题。再次点击进行观察:

如果发现页面打开后favicon没有出来就关了,可以增加「延迟读取」的秒数;如果打开后还是返回空,那么刚才自动生成的选择器路径可能不正确。

可以更换为浏览器自动生成的,方法如下:

① 在要检测的文本上点右键,选择「inspect/审查元素」

② 这时候会自动打开开发者工具,并自动选中源码中元素的对应行。在高亮的行上点击右键,选择「复制/Copy」→ 「复制选择器/Copy selector」

③ 将复制到的剪贴板的路径填入到「CSS选择器路径」一行后,再次点击「测试」按钮进行测试。

测试通过后,点击「提交」保存监测点。

通过Server酱推送到微信和其他设备

在添加和修改监测点时,填入Sendkey即可将消息推送到Server酱。

如何获得 SendKey

登录Server酱官网,进入「Key&API」,点击「复制」按钮即可。

如何推送到其他通道

登录Server酱官网,进入「通道配置」,选择要推送的通道,并按页面上的说明进行配置。可以将消息推送到「PushDeer」和各种群机器人。

如果以上通道不能满足你的需要,可以选择「自定义」通道,发送自定义的http请求。此方式可以兼容绝大部分通知接口。

导入和导出全部监控点

点击监控点列表右上方的向上和向下箭头可以导入和导出全部监控点。

分享和导入监控点

点击监控点列表中的「剪贴板」,可以将当前监控点的设置导出到剪贴板。

导出数据类似这样:

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

复制以上字符后,在Check酱浏览器插件界面通过Ctrl+V粘贴,会自动识别并跳转到「添加监测点」界面。

监测周期限制

有些任务只需要在特定的时间段执行,为了节省资源,我们添加了「监测周期限制」功能。比如某动画每周五上午十点更新,那么我们可以将「监测周期限制」设置如下:

这样其他时间段就不再启动监测。对于无法预知事件段的任务,使用默认的「每分钟」即可。

注意在「监测周期限制」之上,还有「监控间隔时间」。

如果 「监测周期限制」 为每分钟,而「监控间隔时间」为60分钟,那么每分钟都会尝试监测,而一旦监测成功一次,那么下次监测将是60分钟后。

同时,因为执行监测任务本身也耗费时间,所以「监控间隔时间」为1分钟时,往往每隔一分钟(即每两分钟)才会运行一次任务。

Selector 扩展语法

通过@指定数组元素

最新的版本支持了一个Selector扩展语法:由于底层通过 document.querySelectorAll 实现,因此会返回匹配的全部元素于一个数组。当这些元素属于同一个父节点我们可以用 :nth-of-type(1) 或者 :nth-child(1)来指定数组中的某一项。

但如果这些元素不属于同一个父节点,那么以上方法会失效。这里添加了一个 selector@n 的语法,让我们可以从 Selector 返回的数组中指定某一个元素。如 .booklist .item@0 将返回 document.querySelectorAll(.booklist .item)[0]

@语法除了使用在DOM selector上,还可以用来指定 RSS 监测结果。默认情况下,RSS 将返回整个Feed的第一篇文章,你可以用过在 Feed url 后边添加 @1 ,将其指定为监测第二篇文章(依然是从0开始计数)。

通过%获得元素属性

Selector的最下一级返回一个元素,但有时候我们需要监测这个元素的某个属性值。比如监测一个链接的href。为了解决这个问题,我们扩展了 selector 语法,让用户可以通过 element%attribute 的方式来获取元素的某个属性值。如:article#post-180 > div > div > p > a%href。当 %@ 同时使用时, % 应紧跟元素后,如:article#post-180 > div > div > p > a%href@0

日志查看和错误定位

为了更清楚的了解定时任务的执行情况,你可以打开「开发者工具」(F12)在 Console 标签页中可以看到任务产生的日志。

错误信息也会在这里以红色高亮的行显示,遇到Bug时提供日志错误截图可以帮助我们更快的定位到问题。

更新浏览器插件

上架商店后,可以自动升级,在此之前需要手动升级。升级方式为下载zip包解压后覆盖原有文件,再在浏览器的插件管理面板中「reload」一下。

镜像的安装和使用

新版镜像已经将云端和远程桌面版本集成,只需一次安装都可以使用。

  • 云端:配合自行架设的服务器,可以将任务同步到云端执行,即使关掉浏览器和电脑后监测任务也会一直运行。
  • 远程桌面:在Docker中封装了Chrome浏览器,可以通过VNC和Web界面像在电脑上一样使用。

⚠️ 特别说明:因为云端的网络、环境都和本机不同,所以并不保证本机能运行的任务都能在云端运行成功,一些复杂网页和有较多动态效果的网页可能失败。

安装

架设自架版云端需要技术基础,非技术用户建议购买我们的官方版云端(将在内测完成后发布)

需要docker环境。如果你没有云服务器,可以看看腾讯云30~50元首单的特价服务器

一键安装命令

点此进入工具界面

通过 Docker-compose 启动

登录服务器(假设其IP为IPB),在要安装的目录下新建目录 data,并使其可写:

mkdir data && chmod 0755 data

新建一个 docker-compose.yml 文件,将下边的内容按提示调整后粘贴保存:

version: '3'
services:
  chrome:
    image: easychen/checkchan:latest
    volumes:
      - "./data:/checkchan/data"
    environment:
      - "CKC_PASSWD=<这里是远程桌面的密码,写一个你自己想的>"
      - "VDEBUG=OFF"
      - "VNC=ON"
      #- "WIN_WIDTH=414"
      #- "WIN_HEIGHT=896"
      #- "XVFB_WHD=500x896x16"
      - "API_KEY=<这里是云端的API KEY,写一个你自己想的>"
      - "ERROR_IMAGE=NORMAL" # NONE,NORMAL,FULL
      #- "SNAP_URL_BASE=<开启截图在这里写服务器地址(结尾不用加/),不开留空>..."
      #- "SNAP_FULL=1"
      - "TZ=Asia/Chongqing"
      # - "WEBHOOK_URL=http://..." # 云端 Webhook地址,不需要则不用设置
      # - "WEBHOOK_FORMAT=json" # 云端 Webhook POST 编码,默认是 Form
    ports:
      - "5900:5900" 
      - "8080:8080" 
      - "8088:80"

将其中<这里是远程桌面的密码,写一个你自己想的><这里是云端的API KEY,写一个你自己想的> 换成别人不知道的密码(下文称密码C和D)。注意不要包含$字符,替换完后也不再有两边的尖括号<>

如果不希望启动远程桌面,请将 VNC=ON 改为 VNC=OFF

保证Docker用户对此目录有写权限,并在同一目录下运行以下命令:

docker-compose up -d

如提示docker服务未安装/找不到/未启动,可在 docker-compose 前加 sudo 再试

等待初始化完成后,访问 http://$BBB:8080( 将$BBB替换为IP B),看到 NoVNC Web界面说明容器已经启动。

服务所在的端口为:

  • 云端:8088
  • 远程桌面(VNC): 5900
  • 远程桌面的Web界面(NoVNC): 8080

通过 Docker 启动

你也可以将 docker-compose 中的参数传给 docker 来启动:

docker run -d -p 8088:80 -p 8080:8080 -p 5900:5900 -v ${PWD}/data:/checkchan/data -e API_KEY=123  -e VDEBUG=OFF -e VNC=ON -e SNAP_URL_BASE=http://localhost:8088  -e CKC_PASSWD=123 -e TZ=Asia/Chongqing easychen/checkchan:latest

请将上述命令中的123替换为你想要设定的密码、将SNAP_URL_BASE换成服务器的外网IP(如果想通过手机查看截图)。

群晖安装

只有支持Docker的群晖型号才能安装Check酱,除了可以直接通过命令行安装,也可以参考GUI安装教程

Volume 和环境变量可以参考以上的docker/compose设定。

更新镜像

Check酱云端镜像更新后,你可以将正在运行的云端服务升级到最新版。方式如下:

首先停现有的容器:

通过 docker-compose 启动的运行:

docker-compose down

通过 docker 直接启动的运行 docker ps 查询到容器id,通过 docker stop 容器id 停止。

然后运行 docker pull 拉取最新版:

docker pull easychen/checkchan:latest

完成后再启动服务即可。

云端的使用

将浏览器插件对接云端

点击插件右上方菜单中的云端服务

服务器地址一栏输入 http://$BBB:8088(将$BBB替换为IP B,这里的URL不用加key参数);在API_KEY一栏输入密码C。

点击保存,连接成功后,配置完成。

同步本地任务到云端

配置好云端以后回到列表页,每行最右边会多出来一个「电脑」图标,点击后会变成「云」图标,该任务将改为在云端执行。

点击右上角 「云+箭头」的按钮,可以主动同步任务到云端。

Check酱也会每十分钟自动同步一次。

云端截图

Check酱自架云端支持对网页(dom)类型任务进行截图,可以通过给镜像传递环境变量来开启:

  • SNAP_URL_BASE=<开启截图在这里写服务器地址,不开留空> #如 http://ip.com/
  • SNAP_FULL=1 #完整网页长图

可参考上文的docker-compser.yml。添加环境变量后重启服务即可。

注意

  • 截图功能需要较大的内存,部分服务器可能会报错
  • 云端网络和本地不同,可能会超时失败,请适当增加延时,并将取消完整截图

RSS上行接口

Check酱自架云端内置了动态页面RSS上行用的接口:

  • RSS上行地址为: http://$ip:$port/rss/upload?key=$api_key
  • RSS Feed地址为:http://$ip:$port/image/rss.xml?key=$api_key

多浏览器Cookie同步接口

Check酱自架云端内置了Cookie同步用的接口:

  • Cookie同步URL为: http://$ip:$port/cookie/sync?key=$api_key
  • 配对密码: 自行设定,同步Cookie的两个浏览器中必须一致
  • 同步方向: 一个发送一个接收,一般电脑上的发送、服务器上远程桌面里的接收
  • 同步频率:发送或者接收间隔时间

云端任务的安全性

Check酱云端任务的原理是将cookie同步到云端,然后用浏览器查看,本质和用户操作一样。但因为出口IP可能是机房和数据中心,频次太高也有被风控的可能。如果将云端部署在家里,则和在家用电脑访问效果一样。

云端错误排查

通常来讲,出现本地任务可以执行,云端不能执行的问题,是因为两者网络环境、浏览器软件存在差异,比如:

  1. 页面结构每次都会变动:比如一些网站的首页,建议进入分类列表页面选择监控点
  2. 电脑网络和云端网络不同:在浏览器中可以访问的内容,在数据中心可能访问不到
  3. CDN更新延迟:电脑和云端CDN节点刷新未完成,会造成一边可用一边不可用,等待更新完成后再监控
  4. 浏览器插件改变了网页结构:比如本地通过 AdBlock 过滤了广告,但云端没有,造成结构不同,监测失败

由于服务器内存通常没大家电脑大,所以很多在本地执行OK的任务同步到云端后会因为「延迟读取」秒数太小中途停止而失败。如果遇到类似情况,请尝试增加「延迟读取」。

如果这样也不行,往往是因为云端无头浏览器显示网页和本地存在差异导致,我们为这种情况生成了最近一次失败的任务的截图,可以在「云端服务」菜单下看到。

点击「失败截图」按钮即可看到。注意:需要只用最新的镜像,并传递ERROR_IMAGE=NORMAL 环境变量。如果希望截取完整网页的图片,可以传递ERROR_IMAGE=FULL

如果任务失败又没有截图,说明该任务不是因为CSS选择器未命中而失败,尝试增加「延迟读取」可能解决。

这个页面也能看到云端任务日志,这里的日志不包含手动点击「监测」按钮触发的任务。如果没有可以执行的任务(任务是定时触发的),那么日志亦可能为空。

远程桌面版的使用

除了自架云端,我们还在镜像中集成了远程桌面模式。它让你可以通过VNC连接服务器,像使用本地浏览器一样使用。

远程桌面版本之前为一个独立镜像,现在已经整合到 easychen/checkchan 中,因此你可以直接使用。

通过 Web 界面使用

  • Web界面: http:///$BBB:8080
  • 密码: 123 (可自行修改命令调整)

通过 VNC 连接使用

服务启动后,可以通过 VNC 客户端软件进行连接使用。

  • 连接地址: 架设服务的IP:5900
  • 密码: 123 (可自行修改命令调整)

连接云端

在远程桌面中,可以直接连接同一个容器内的云端,服务器地址填 http://localhost,API KEY按上边 YML 中设置的输入即可。

移动版

可以添加环境变量,修改屏幕宽高限制,使其在手机上更好用:

- WIN_WIDTH=414 
- WIN_HEIGHT=896 
- XVFB_WHD=500x896x16

一个加到 docker 命令中的例子:

docker run -d -p 5900:5900 -v ${PWD}/data:/checkchan/data -e CKC_PASSWD=123 -e WIN_WIDTH=414 -e WIN_HEIGHT=896 -e XVFB_WHD=500x896x16 easychen/checkchan:latest

特别说明

容器日常消耗在 300M~500M。内存较大的运行环境会比较稳定,如果遇到问题可尝试加大内存。

可视化调试

使用同一个镜像中集成的云端可以对云端任务进行可视化调试,将 YML 文件中的 VDEBUG 设置为 ON,再重新启动容器即可看到云端监测网页的详细过程。

environment:
  - "CKC_PASSWD=123"
  - "VDEBUG=ON"

checkchan-dist's People

Contributors

easychen avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

checkchan-dist's Issues

关于云端运行的任务列表和任务日志问题

  1. 同步任务到云端后,VNC 连接看不到任务列表,请问是正常的吗?如果是的话,云端除了下载 json 外如何查看所有任务列表呢?
  2. 日志似乎只能查看最新1分钟的日志,希望能够保留全部日志。

云端运行任务满足条件不发送通知

使用云端运行任务,检测到值为“闲置”,设置触发条件为“!=运行中”,但并未正常触发通知。

手动点击监测,正常。

image

任务日志如下:

[2022-08-03 15:43:01]开始载入任务
[2022-08-03 15:43:01]Alas...条件检查 true
[2022-08-03 15:43:01]checking...Alas
[2022-08-03 15:43:04]{"status":true,"value":"闲置","type":"dom","link":""}
[2022-08-03 15:43:04]条件比较模式

[2022-08-03 15:44:01]开始载入任务
[2022-08-03 15:44:01]Alas...条件检查 false
[2022-08-03 15:44:01]全部任务处理完成

[2022-08-03 15:45:01]开始载入任务
[2022-08-03 15:45:01]Alas...条件检查 true
[2022-08-03 15:45:01]checking...Alas
[2022-08-03 15:45:03]{"status":true,"value":"闲置","type":"dom","link":""}
[2022-08-03 15:45:03]条件比较模式

任务配置如下:

{
    "checks": [
        {
            "id": "xxx",
            "title": "Alas",
            "enabled": 1,
            "is_cloud_task": 1,
            "url": "xxx",
            "icon": "xxx",
            "page": "",
            "path": "div#pywebio-scope-header_status > div > p",
            "ignore_path": "",
            "click_path": "",
            "scroll_down": "0",
            "type": "dom",
            "code": "200",
            "json_query": "",
            "json_header": "",
            "json_data": "",
            "json_data_format": "form",
            "rss_field": "title",
            "star": 0,
            "ua": "",
            "puppeteer_code": "search_btn = await page.$('#pywebio-scope-aside > div:nth-child(2) > div:nth-child(2) > button');\nawait search_btn.click();",
            "browser_code": "",
            "shell_type": "javascript",
            "shell_cookie_name": "COOKIE",
            "shell_code": "",
            "replace_from_regex": "",
            "replace_to_regex": "",
            "interval": "1",
            "delay": "0",
            "retry": 10,
            "cron": "* * * * *",
            "sendkey": "xxx",
            "send_channel": "18",
            "regex": "",
            "when": "every",
            "compare_type": "op",
            "compare_op": "ne",
            "compare_value": "运行中",
            "retry_times": 0,
            "last_content": "闲置",
            "last_time": 1659512464012
        }
    ],
    "cookies": {
        "xxx": []
    }
}

云端监控

如果配置了云端监控,则由云端接管监控任务,
有点吃内存,air不太行
还有一个 /home/chrome/app_data /home/chrome/user_data /data 这么多配置我该用哪个?

再就是docker问题

#!/bin/sh

if [ "$CKC_PASSWD" = "" ]; then
    crond -l 0
    node /api/app.js
else
    XVFB_WHD=${XVFB_WHD:-1220x1020x16}
    echo "Starting Xvfb"
    Xvfb :99 -ac -screen 0 $XVFB_WHD -nolisten tcp &
    sleep 2
    export DISPLAY=:99
    crond -l 0
    pm2 start /x11vnc.sh
    pm2 start /novnc.sh
    pm2 start /api/app.js
    pm2 start src/extension.js --no-daemon

fi

这不就搞定了,用户都没有设置 密码,启动个锤子的vnc,对吧,还有你那个docker 有点简陋啊

Dockerfile

WORKDIR /usr/src/app/
USER root

这就搞定了 权限问题,但是可能外面的用户用不了,所以需要外面创建一个 uid 为1000的用户,或者直接用root

还有 你的 /usr/src/app/ /api /data,这文件太乱了吧,兄台,看的我都懵逼了,/usr/src/app/ 这里面也有api,也有data,晕

你能不能给 docker 设置一个tag,latest 默认最新版,但是文档别写最新版,可以浏览器告诉用户该更新了

我后台 watchtower 直接把镜像拉倒最新了,我说怎么收不到通知了,直接蹦了

能不能给普通用户留条路,docker 加个 dingding 不为过吧。。。你收费咋也理解,但是钉钉飞书本来就是免费的,webhook 也是免费的这是关键啊
你app.js 也没做 进程守护,出问题了也不知道弹个通知 告诉用户 你的docker 镜像出问题了

超过最大重试次数后,检测任务始终跳过

之前断了一段时间的网,后来发现检测任务很久不工作,按F12发现是“重试次数超过,跳过”。需要一个个手动点击检测,能不能加个提示该任务重试次数超过的标记,或者加个一键探测所有重试次数超过任务的按钮。

unraid无法部署docker镜像

平台为unraid + unraid虚拟出来的centos + unraid虚拟出来的群晖
部署后无法进入vnc,即8080(我映射到8089)无法打开网页,查看容器日志均如下:
image
安装部署命令如下:
docker run -d
--name checkchan
--log-opt max-size=10m
--restart always
-p 8089:8080
-p 5910:5900
-p 8088:80
-v /mnt/user/appdata/checkchan/data:/checkchan/data
-e TZ=Asiz/Shanghai
-e CKC_PASSWD=z515346364
-e VDEBUG=OFF
-e VNC=ON
-e API_KEY=z515346364
-e ERROR_IMAGE=NORMAL
easychen/checkchan:latest

20220820: 朋友的群晖可以正常使用,大概的确是我自身硬件问题了,好在只有VNC部分有问题,仅仅使用云端没有问题

2022.8.1 docker拉取最新版本运行之后8088一直错误

sudo docker run -d -p 8088:80 -p 4080:8080 -p 5900:5900 -v ${PWD}/data:/checkchan/data -e API_KEY=guaijiu12345 -e VDEBUG=OFF -e WIN_WIDTH=414 -e WIN_HEIGHT=896 -e XVFB_WHD=500x896x16 -e VNC=ON -e SNAP_URL_BASE=http://42.193.xxx.xxx:8088 -e CKC_PASSWD=guaijiu12345 -e TZ=Asia/Chongqing easychen/checkchan:latest

http://42.193.xxx.xxx:8088这个写的是真实的服务器ip,确保无误,而且之前都是这样子运行的

image

容器的日志:
image

image

小白问一下如何设置云端无头浏览器的代理?

自架云端,centos7,本地已经有代理了,想在无头浏览器上装点扩展,发现不能访问某商店。是否在运行docker的时候,需要加 -e http
proxy的参数? 但是这样又整个容器都走代理了。理想的状态是整个容器不走代理,但是在无头浏览器上装一个switchyomega的扩展。可是无法访问某商店啊,晕。

(提问)json采集时的Url回调

还有个问题想问一下,json采集时预期的网页URL有时也在采集结果中,并不是固定的网页,这时候网页回调地址就无法使用了(同理还有FavIcon,但情况比较少就是了),这要怎样处理呀?

docker 启动失败

[PM2] Starting /novnc.sh in fork_mode (1 instance)
[PM2] Done.
┌─────┬───────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id  │ name      │ namespace   │ version │ mode    │ pid      │ uptime │ ↺    │ status    │ cpu      │ mem      │ user     │ watching │
├─────┼───────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 1   │ novnc     │ default     │ N/A     │ fork    │ 43       │ 0s     │ 0    │ online    │ 0%       │ 1.8mb    │ chrome   │ disabled │
│ 0   │ x11vnc    │ default     │ N/A     │ fork    │ 32       │ 0s     │ 0    │ online    │ 0%       │ 1.7mb    │ chrome   │ disabled │
└─────┴───────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
[62:88:0601/000556.010280:ERROR:bus.cc(398)] Failed to connect to the bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
[62:88:0601/000556.010498:ERROR:bus.cc(398)] Failed to connect to the bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
[62:86:0601/000556.014385:ERROR:bus.cc(398)] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
[62:86:0601/000556.014510:ERROR:bus.cc(398)] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
[62:62:0601/000556.021738:ERROR:process_singleton_posix.cc(339)] Failed to create /home/chrome/user_data/SingletonLock: Permission denied (13)
[62:62:0601/000556.021801:ERROR:chrome_browser_main.cc(1434)] Failed to create a ProcessSingleton for your profile directory. This means that running multiple instances would start multiple browser processes rather than opening a new window in the existing process. Aborting now to avoid profile corruption.
/usr/src/app/node_modules/puppeteer/lib/cjs/puppeteer/node/BrowserRunner.js:241
            reject(new Error([
                   ^

Error: Failed to launch the browser process!
[62:88:0601/000556.010280:ERROR:bus.cc(398)] Failed to connect to the bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
[62:88:0601/000556.010498:ERROR:bus.cc(398)] Failed to connect to the bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
[62:86:0601/000556.014385:ERROR:bus.cc(398)] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
[62:86:0601/000556.014510:ERROR:bus.cc(398)] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
[62:62:0601/000556.021738:ERROR:process_singleton_posix.cc(339)] Failed to create /home/chrome/user_data/SingletonLock: Permission denied (13)
[62:62:0601/000556.021801:ERROR:chrome_browser_main.cc(1434)] Failed to create a ProcessSingleton for your profile directory. This means that running multiple instances would start multiple browser processes rather than opening a new window in the existing process. Aborting now to avoid profile corruption.


TROUBLESHOOTING: https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md

    at onClose (/usr/src/app/node_modules/puppeteer/lib/cjs/puppeteer/node/BrowserRunner.js:241:20)
    at ChildProcess.<anonymous> (/usr/src/app/node_modules/puppeteer/lib/cjs/puppeteer/node/BrowserRunner.js:232:79)
    at ChildProcess.emit (node:events:539:35)
    at Process.ChildProcess._handle.onexit (node:internal/child_process:291:12)
Starting Xvfb
(EE)
Fatal server error:
(EE) Server is already active for display 99
	If this server is no longer running, remove /tmp/.X99-lock
	and start again.
(EE)

请问是否考虑接入Apprise?

RSSPUSH接入apprise的举动非常开放,希望check酱也能跟进

如果easy大坚持把server酱做成现金流项目的话,也……也可以理解

云端返回值处理时检测参数重复

无意间看到的,具体代码是这里:

if( item.replace_from_regex && item.replace_from_regex ) check_content = check_content.replace( new RegExp(item.replace_from_regex), item.replace_to_regex );

应该是 if( item.replace_from_regex && item.replace_to_regex ) 吧?

另外“返回值”处理这部分完全没有文档,教程视频里似乎也没有提到。在后续的收费教程中是否有这部分的内容呢?

Webhook 建议添加占位符支持

webhook 这里能否添加占位符,因为我使用的 bark 推送服务,又不想写接口转发,默认发送的 post 请求,bark 好像不太能解析。所以能不能添加一下占位符的支持。

然后默认发送的 post 请求中最好能够添加一下任务id所对应的任务名称字段,在通知显示这方面,比起任务的id,任务名称会更加易于识别。

b站视频标题会只出现NEW的变化

比如:
02:17:57 《古墓丽影 : 崛起》电影版 【4K | 21:9宽银幕】中英文双语字幕←02:17:57 NEW 《古墓丽影 : 崛起》电影版 【4K | 21:9宽银幕】中英文双语字幕

这种其实不该二次提醒,请问有什么办法吗?

经常收到关于来自云端@172.17.0.9的错误信息

image

大大,从一开始用到现在最新版本,我这边的novnc跑的方式,总是会收到这种类似的通知,相当于我挂了几个任务,它经常一下子就发几条类似的这种错误消息过来。

出现这种情况最高的频率是我关电脑后一会,或者个吧小时,但是电脑开着的时候就好像很少出现这种连续发错误的提醒,但是还是会偶尔有,不知道有没有别的小伙伴出现过类似的情况没有。

我这边都是浏览器弄好,然后导出json文件,然后novnc远程的check酱上面再手动导入json数据的,每次我在浏览器上面点击同步,它都会提示已同步,但是novnc上面的版本就是不会出现任务,都是需要手动上传才出现任务。配置的云端地址还有API KEY都校验过,重点是显示log的视图里是可以看到后台运行的情况的,但就是在任务栏上面不会出现。

新版本的docker默认不改分辨率的话,在新的模块发现里面是看不到左下角蓝色的『监测更新』,需要修改手机的分辨率才能显示出来,就如果没看视频的话,估计是不知道这里还有这个按钮,所以可不可以下次把按钮放高一点呀。

点击修改按钮后一片空白

控制台报错为
Uncaught TypeError: Cannot read properties of undefined (reading 'replace') at N (2.16adb99e.chunk.js:1:820332) at R (2.16adb99e.chunk.js:1:820410) at e.value (main.d6ea93d8.chunk.js:1:23261) at ye (2.16adb99e.chunk.js:1:16911) at e.r (2.16adb99e.chunk.js:1:16605) at r.value (main.d6ea93d8.chunk.js:1:92006) at sc (2.16adb99e.chunk.js:1:2268545) at e (2.16adb99e.chunk.js:1:2268310) at ac (2.16adb99e.chunk.js:1:2268317) at 2.16adb99e.chunk.js:1:2280056
版本为Build.2022.06.26.14.42,浏览器为Edge 版本 103.0.1264.49 (正式版本) (64 位)

关于发送消息

请问一下,check酱的消息推送渠道是否是全部通过server酱,然后转发绑定的微信应用、机器人以及 WebHook 等通道? 是否每发送一次,增加一次“每天最多发送条数”?
WebHook 是否受每天最多发送条数的数量影响!

谢谢

(提问)json抓取多标签

请问使用json抓取时,遇到了多个标签下需要2个(或以上)标签的情况,要怎么解决呀?
类似于网页DOM文本中的多选择器,json抓取有时也需要多字段的一个组合输出,例如只需要书名和作者不需要出版社之类的场景……

去除 docker 镜像打包中的 .git 目录

在用于 production 的镜像中包含 .git 目录是没有必要的,而且还增加了存储大小,带来了轻微的风险,便于攻击者明确得知具体的小版本。建议打包 docker 镜像时去掉所有的 .git 目录。

具体包括:

  • /checkchan/noVNC/.git
  • /checkchan/noVNC/utils/websockify/.git

动态页面卡死

Check酱点击动态后,卡死,无法点击任何链接或按钮。弹出无响应,是否退出页面或等待

关于监测返回值变化

image

方糖大大,请问这个条件返回的,可以在原始的数值上面+数量级嘛?就好比我想监测粉丝的变化,没新增100粉丝才通知,而不是大>=就增加,也就是减少发送消息的频率。我这边实践了一下,没成功,所以想问问是不是本身就有这个功能,是我操作方式不对的原因,还是有什么方式可以做到

Docker配置问题

开发者你好,我想问问这个云端的有架构限制什么的吗?
在arm设备上部署后启动时会有如下报错信息:
stderr: exec /checkchan/shell/docker-entrypoint.sh: exec format error

插件版和docker版关于最后的刷新时间不对的问题

所有任务我这边基本都是设置的10min检测一次,但是每次看到面板的最后刷新时间经常都是没变化的,但是小说的更新推送是可以收到的,就是面板的读取到的更新内容展示不对,和最后的刷新时间不对

最后的刷新时间都是几天之前,之前以为我是同步到云端运行的原因,后面我用远程nvc版本挂电脑图标【也就是云端本地运行】也会出现最后时间不对的问题,都会大于我设定的10min检测一次

image

image

image

image

无法上传配置到云

docker 当前version 2 版本部署, mac端Microsoft Edge版本 83.0.478.37
点击 通过云服务器检测 报错,尝试给插件加 <all_urls> 权限,依旧无效
截屏2022-05-23 00 01 45

尝试手动将导出的json文件传到 /data 路径中,缺少cookies字段报错, 手动加入 cookies字段后,在列表页点监测正常使用, 但是在编辑页面尝试测试,弹检测失败提示Tip

api key error

respoense: {"code":403,"message":"错误的API KEY"}

docker-compose:

image: easychen/checkchan:latest
    volumes:
      - /data/checkchan:/checkchan/data
    environment:
      - "CKC_PASSWD=qpzm2745"
      - "VDEBUG=OFF"
      - "VNC=ON"
      #- "WIN_WIDTH=414"
      #- "WIN_HEIGHT=896"
      #- "XVFB_WHD=500x896x16"
      - "API_KEY=2745"
      - "ERROR_IMAGE=NORMAL" # NONE,NORMAL,FULL
      #- "SNAP_URL_BASE=<开启截图在这里写服务器地址(结尾不用加/),不开留空>..."
      #- "SNAP_FULL=1"
      - "TZ=Asia/Chongqing"

docker logs :

checkchan | 22:25:12 4|extension  | [101:125:0604/222512.778164:ERROR:bus.cc(398)] Failed to connect to the bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
checkchan | 22:25:12 4|extension  | [101:125:0604/222512.778551:ERROR:bus.cc(398)] Failed to connect to the bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
checkchan | 22:25:12 4|extension  | [101:123:0604/222512.786208:ERROR:bus.cc(398)] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
checkchan | 22:25:12 4|extension  | [101:123:0604/222512.786347:ERROR:bus.cc(398)] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
checkchan | 22:25:12 4|extension  | [101:123:0604/222512.867482:ERROR:bus.cc(398)] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
checkchan | 22:25:12 4|extension  | [101:123:0604/222512.867649:ERROR:bus.cc(398)] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
checkchan | 22:25:12 4|extension  | [130:130:0604/222512.881938:ERROR:angle_platform_impl.cc(43)] RendererVk.cpp:127 (VerifyExtensionsPresent): Extension not supported: VK_KHR_surface
checkchan | 22:25:12 4|extension  | [130:130:0604/222512.907525:ERROR:angle_platform_impl.cc(43)] RendererVk.cpp:127 (VerifyExtensionsPresent): Extension not supported: VK_KHR_xcb_surface
checkchan | 22:25:12 4|extension  | [130:130:0604/222512.909393:ERROR:angle_platform_impl.cc(43)] Display.cpp:977 (initialize): ANGLE Display::initialize error 0: Internal Vulkan error (-7): A requested extension is not supported, in ../../third_party/angle/src/libANGLE/renderer/vulkan/RendererVk.cpp, initialize:1446.
checkchan | 22:25:12 4|extension  | [130:130:0604/222512.911687:ERROR:gl_surface_egl.cc(852)] EGL Driver message (Critical) eglInitialize: Internal Vulkan error (-7): A requested extension is not supported, in ../../third_party/angle/src/libANGLE/renderer/vulkan/RendererVk.cpp, initialize:1446.
checkchan | 22:25:12 4|extension  | [130:130:0604/222512.915278:ERROR:gl_surface_egl.cc(1489)] eglInitialize SwANGLE failed with error EGL_NOT_INITIALIZED
checkchan | 22:25:12 4|extension  | [130:130:0604/222512.916309:ERROR:gl_ozone_egl.cc(21)] GLSurfaceEGL::InitializeOneOff failed.
checkchan | 22:25:12 4|extension  | [130:130:0604/222512.943044:ERROR:viz_main_impl.cc(186)] Exiting GPU process due to errors during initialization
checkchan | 22:25:13 4|extension  | DevTools listening on ws://127.0.0.1:9222/devtools/browser/88767775-f4d0-4efa-9f50-8966abcd8021
checkchan | 22:25:13 4|extension  | [101:123:0604/222513.118822:ERROR:bus.cc(398)] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
checkchan | 22:25:13 4|extension  | [101:123:0604/222513.118933:ERROR:bus.cc(398)] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
checkchan | 22:25:13 4|extension  | [183:183:0604/222513.388951:ERROR:angle_platform_impl.cc(43)] RendererVk.cpp:127 (VerifyExtensionsPresent): Extension not supported: VK_KHR_surface
checkchan | 22:25:13 4|extension  | [183:183:0604/222513.389294:ERROR:angle_platform_impl.cc(43)] RendererVk.cpp:127 (VerifyExtensionsPresent): Extension not supported: VK_KHR_xcb_surface
checkchan | 22:25:13 4|extension  | [183:183:0604/222513.391913:ERROR:angle_platform_impl.cc(43)] Display.cpp:977 (initialize): ANGLE Display::initialize error 0: Internal Vulkan error (-7): A requested extension is not supported, in ../../third_party/angle/src/libANGLE/renderer/vulkan/RendererVk.cpp, initialize:1446.
checkchan | 22:25:13 4|extension  | [183:183:0604/222513.392462:ERROR:gl_surface_egl.cc(852)] EGL Driver message (Critical) eglInitialize: Internal Vulkan error (-7): A requested extension is not supported, in ../../third_party/angle/src/libANGLE/renderer/vulkan/RendererVk.cpp, initialize:1446.
checkchan | 22:25:13 4|extension  | [183:183:0604/222513.392787:ERROR:gl_surface_egl.cc(1489)] eglInitialize SwANGLE failed with error EGL_NOT_INITIALIZED
checkchan | 22:25:13 4|extension  | [183:183:0604/222513.393036:ERROR:gl_ozone_egl.cc(21)] GLSurfaceEGL::InitializeOneOff failed.
checkchan | 22:25:13 4|extension  | [101:185:0604/222513.399108:ERROR:bus.cc(398)] Failed to connect to the bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
checkchan | 22:25:13 4|extension  | [101:185:0604/222513.399332:ERROR:bus.cc(398)] Failed to connect to the bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
checkchan | 22:25:13 4|extension  | [101:185:0604/222513.399585:ERROR:bus.cc(398)] Failed to connect to the bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
checkchan | 22:25:13 4|extension  | [101:185:0604/222513.399828:ERROR:bus.cc(398)] Failed to connect to the bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
checkchan | 22:25:13 4|extension  | [101:185:0604/222513.400032:ERROR:bus.cc(398)] Failed to connect to the bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
checkchan | 22:25:13 4|extension  | [183:183:0604/222513.424901:ERROR:viz_main_impl.cc(186)] Exiting GPU process due to errors during initialization
checkchan | 22:25:13 4|extension  | [192:192:0604/222513.515005:ERROR:gpu_init.cc(481)] Passthrough is not supported, GL is disabled, ANGLE is 
checkchan | 22:25:14 3|app        | Server start on http://localhost

浏览器插件版经常第二天开机起来就发现插件错误了

image

昨天早上也有一次早上开机找不到浏览器图标,然后发现插件错误了之后自动停用了,大概是一个weibo相关字眼的错误,当时没太在意

然后今天早上开机,发现插件图标又不见了,又到插件管理中心重新启用,这次截了一张图,应该不是偶发。

Python脚本内不能读取到环境变量

在docker-compose.yml environment字段添加了环境变量,如默认文件中的"TZ=Asia/Chongqing"

// docker-compose.yml
version: '3'
services:
  chrome:
    image: easychen/checkchan:latest
    volumes:
      - "./data:/checkchan/data"
    env_file:
      - ./env
    environment:
      - "CKC_PASSWD=${CKC_PASSWD}"
      - "VDEBUG=ON"
      - "VNC=ON"
      # - "WIN_WIDTH=414"
      # - "WIN_HEIGHT=896"
      # - "XVFB_WHD=500x896x16"
      - "API_KEY=${CKC_API_KEY}"
      - "ERROR_IMAGE=FULL" # NONE,NORMAL,FULL
      #- "SNAP_URL_BASE=<开启截图在这里写服务器地址(结尾不用加/),不开留空>..."
      - "SNAP_FULL=1"
      - "TZ=Asia/Chongqing"
    ports:
      - "5900:5900"
      - "8080:8080"
      - "8088:80"
// example.py
import os

print("ENV.TZ: %s" % os.getenv("TZ"))

// 相关log
21:43:33 3|app        |   ],
21:43:33 3|app        |   stdout: 'ENV.TZ: None\n',
21:43:33 3|app        |   stderr: 'Traceback (most recent call last):\n' +
21:43:33 3|app        |     '  File "/checkchan/data/app_data/8dd2b735adad86e8a00582b0446377a6.py", line 20, in <module>\n' +

生成的rss里面的link不对

这是订阅的rss里的内容:

<item>
  <title>
    <![CDATA[ 这才是夏天最顶级的夜宵!! ]]>
  </title>
  <description>
    <![CDATA[ 配料表在视频里面~ 做法非常简单的红油飘香串串,有空在家一定要试试啊٩(๑•̀ω•́๑)۶<br><br><iframe src="https://player.bilibili.com/player.html?aid=941200934&amp;high_quality=1" width="650" height="477" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" referrerpolicy="no-referrer"></iframe><br><img src="http://i0.hdslb.com/bfs/archive/59138f99cc3cd08a9062ba8c524441ef655185ad.jpg" referrerpolicy="no-referrer"> ]]>
  </description>
  <pubDate>Sat, 23 Jul 2022 09:00:00 GMT</pubDate>
  <guid isPermaLink="false">https://www.bilibili.com/video/BV1MW4y1276U</guid>
  <link>https://www.bilibili.com/video/BV1MW4y1276U</link>
  <author>
    <![CDATA[ 二喵的饭 ]]>
  </author>
</item>

这是从动态那生成的rss里的内容:

<item> 
    <title><![CDATA[二喵的饭的个人空间_哔哩哔哩_bilibili]]></title> 
    <link><![CDATA[https://rsshub.app/bilibili/user/video/29329085]]></link> 
    <guid><![CDATA[https://rsshub.app/bilibili/user/video/293290851659465317227]]></guid> 
    <pubDate><![CDATA[Tue, 02 Aug 2022 18:35:17 GMT]]></pubDate> 
    <description><![CDATA[这才是夏天最顶级的夜宵!!]]></description> 
</item>

很明显,生成的rss里的link字段弄错了

云端后没有按照时间进行自动检测

本地浏览器插件可以按照规定时间进行检测,但一同步到云端,就不会自动按照规定时间进行检测了,手动点击检测,云端会检测。
部署:群辉docker
版本:Build.2022.06.09.14.30

怎样在终端显示html格式

获取raw html后如何在终端(如pushdear、bark等)上显示html的内容?我研究了很久,不知道是server酱的原因还是check酱的原因,终端只能显示plain text或者markdown

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.