fxd-app-check-chan:网页监测应用

为什么

有时候我们需要获取某些网站的更新信息,这就需要定期查看并比较。Check酱浏览器插件是一个不错的选择,但它要求我们一直开着浏览器,同时由于浏览器对插件权限的限制,无法执行一些自定义的脚本。

于是我们开发了 fxd-app-check-chan。

是什么

fxd-app-check-chan 是 fxd 版的Check酱实现,它遵守 fxd 规范,可以在 fxd-cli 和 FlowDeer 中使用,不再依赖于浏览器,可以作为Check酱插件的有效补充。同时,它也可以用过 fxd-app-keep-live2 来保持登录态,从而监测需要登入的网站内容。

checkChan 包含了两个方法:

  • check:只是单纯打开页面,并返回selector指定的内容
  • watch:在check的基础上,会比较每一次返回值是否有变动,同时根据参数推送通知

如何使用

fxd-app-check-chan 是一个 fxd app,你可以通过 fxd-cli 或者 FlowDeer 运行它。

在安装完成 fxd-cli 之后,你可以通过以下命令直接安装 fxd-app-check-chan

fxd _install fxd-app-check-chan

然后运行帮助命令,可以查看它的方法和对应的参数:

fxd checkChan help
Version:
 1.0.26
Usage:
 fxd check-chan [command] [options]

Command - main|check|watch:
 --url <string> 要打开的页面 URL (required)
 --headless <boolean>   是否使用后台模式 (default: true)
 --selectors <string>   要检测的元素的 CSS 选择器,多个用逗号分隔 (default: body) (required)
 --prejs <string>       页面加载完成后执行的自定义 JavaScript 代码
 --prejs_args <string>  自定义 JavaScript 代码的参数
 --preplay <string>     页面加载完成后执行的自定义 Playwright 代码
 --timeout <number>      Playwright 操作超时时间,单位毫秒 (default: 60000)
 --list <boolean>        选择器是否返回元素列表 (default: false)
 --user <string>        浏览器使用的用户目录 (default: default)
 --format <string>      返回的数据格式 (default: text)
 --wait_type <string>   等待元素出现的方式 (default: domcontentloaded)

Command - watch:
 --sendkey <string>     填入后,检测到变化时会调用Server酱发消息
 --apprise_server_url <string>  apprise的Server URL;需安装 apprise 命令行以后才可使用
 --task_title <string>  显示在动态中,非命令行模式则无需填写
 --task_icon <string>   显示在动态中,非命令行模式则无需填写
 --feed_publish <boolean>       是否发布为Feed,将显示在动态页面 (default: false)
 --feed_as_public <boolean>     Feed 是否公开 (default: true)

使用实例

获取方糖气球首页第一篇文章的标题:

fxd checkChan --url="https://ftqq.com/" --selectors=".entry-title"

返回结果:

$ fxd checkChan --url="https://ftqq.com/" --selectors=".entry-title"
检测到的数据 [
  {
    "selector": ".entry-title",
    "html": "<a href=\"https://ftqq.com/notice/\">看这里看这里</a>",
    "text": "看这里看这里",
    "meta": {
      "html": [
        "<a href=\"https://ftqq.com/notice/\">看这里看这里</a>"
      ],
      "text": [
        "看这里看这里"
      ]
    }
  }
]

可以添加 --format=json 参数,保证输出是JSON:

fxd checkChan --url="https://ftqq.com/" --selectors=".entry-title" --format="json"
{
    "merged_html": "\n\n<a href=\"https://ftqq.com/notice/\">看这里看这里</a>",
    "merged_text": "\n\n看这里看这里",
    "output": "\n\n看这里看这里",
    "data": [
        {
            "selector": ".entry-title",
            "html": "<a href=\"https://ftqq.com/notice/\">看这里看这里</a>",
            "text": "看这里看这里",
            "meta": {
                "html": [
                    "<a href=\"https://ftqq.com/notice/\">看这里看这里</a>"
                ],
                "text": [
                    "看这里看这里"
                ]
            }
        }
    ]
}

默认情况下,只返回匹配选择器的第一个值,如果想要返回全部,可增加 --list=true 参数:

fxd checkChan --url="https://ftqq.com/" --selectors=".entry-title" --list="true"
检测到的数据 [
  {
    "selector": ".entry-title",
    "html": "<a href=\"https://ftqq.com/notice/\">看这里看这里</a>\n<a href=\"https://ftqq.com/real-node-package/\">方糖迷因·Node Package</a>\n<a href=\"https://ftqq.com/telechan/\">Tele 酱:基于 Telegram 和 Vercel 的开源 Server 酱实现</a>\n<a href=\"https://ftqq.com/member-prism/\">开源项目:Member Prism</a>\n<a href=\"https://ftqq.com/docker2saas/\">开源项目:Docker2SaaS</a>\n<a href=\"https://ftqq.com/serverchan2/\">Server酱实战课</a>",
    "text": "看这里看这里\n方糖迷因·Node Package\nTele 酱:基于 Telegram 和 Vercel 的开源 Server 酱实现\n开源项目:Member Prism\n开源项目:Docker2SaaS\nServer酱实战课",
    "meta": {
      "html": [
        "<a href=\"https://ftqq.com/notice/\">看这里看这里</a>",
        "<a href=\"https://ftqq.com/real-node-package/\">方糖迷因·Node Package</a>",
        "<a href=\"https://ftqq.com/telechan/\">Tele 酱:基于 Telegram 和 Vercel 的开源 Server 酱实现</a>",
        "<a href=\"https://ftqq.com/member-prism/\">开源项目:Member Prism</a>",
        "<a href=\"https://ftqq.com/docker2saas/\">开源项目:Docker2SaaS</a>",
        "<a href=\"https://ftqq.com/serverchan2/\">Server酱实战课</a>"
      ],
      "text": [
        "看这里看这里",
        "方糖迷因·Node Package",
        "Tele 酱:基于 Telegram 和 Vercel 的开源 Server 酱实现",
        "开源项目:Member Prism",
        "开源项目:Docker2SaaS",
        "Server酱实战课"
      ]
    }
  }
]

添加 --headless=false 参数,可以将背后工作的浏览器显示出来,从而更直观地看到整个执行过程。

check命令只负责获取数据,watch命令除了完整执行check的逻辑,还会比较每次获得的内容,并发送通知。

 fxd checkChan watch --url="https://ftqq.com/" --selectors=".entry-title" --sendkey="SCT..."
检测到的数据 [
  {
    "selector": ".entry-title",
    "html": "<a href=\"https://ftqq.com/notice/\">看这里看这里</a>",
    "text": "看这里看这里",
    "meta": {
      "html": [
        "<a href=\"https://ftqq.com/notice/\">看这里看这里</a>"
      ],
      "text": [
        "看这里看这里"
      ]
    }
  }
]
不存在历史记录,将当前结果保存为历史记录

定时执行(比如把这个命令加入到 crontab)watch命令,这样在内容变动时,可以收到 Server酱推送:

fxd checkChan watch --url="https://ftqq.com/" --selectors=".entry-title" --sendkey="SCT..."
检测到的数据 [
  {
    "selector": ".entry-title",
    "html": "<a href=\"https://ftqq.com/notice/\">看这里看这里1</a>",
    "text": "看这里看这里1",
    "meta": {
      "html": [
        "<a href=\"https://ftqq.com/notice/\">看这里看这里1</a>"
      ],
      "text": [
        "看这里看这里1"
      ]
    }
  }
]
检测到变动  {
-  merged_html: "\n\n<a href=\"https://ftqq.com/notice/\">看这里看这里</a>"
+  merged_html: "\n\n<a href=\"https://ftqq.com/notice/\">看这里看这里1</a>"
-  merged_text: "\n\n看这里看这里"
+  merged_text: "\n\n看这里看这里1"
-  output: "\n\n看这里看这里"
+  output: "\n\n看这里看这里1"
   data: [
     {
-      html: "<a href=\"https://ftqq.com/notice/\">看这里看这里</a>"
+      html: "<a href=\"https://ftqq.com/notice/\">看这里看这里1</a>"
-      text: "看这里看这里"
+      text: "看这里看这里1"
       meta: {
         html: [
-          "<a href=\"https://ftqq.com/notice/\">看这里看这里</a>"
+          "<a href=\"https://ftqq.com/notice/\">看这里看这里1</a>"
         ]
         text: [
-          "看这里看这里"
+          "看这里看这里1"
         ]
       }
     }
   ]
 }

存在sendkey,发送结果到Server酱 {"code":0,"message":"","data":{"pushid":"1502...","readkey":"SCT...","error":"SUCCESS","errno":0}}

除了使用 Server酱,你还可以通过 Apprise 将消息发送到上百个通道。

在传递参数前,你需要在电脑上安装 Apprise 的命令行工具。

pip install apprise
注意:如果运行环境没有 pip,你需要先安装它。

安装完成后,注意按提示将 apprise 所在路径加入到 PATH 中:

export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/ubuntu/.local/bin"

然后通过 --apprise_server_url 参数传递 Server URL:

fxd checkChan watch --url="https://ftqq.com/" --selectors=".entry-title" --apprise_server_url="schan://SCT..."

上边的例子是用过 Apprise 调用Server酱通道;你可以随意更换为其他通道。可以参照它的文档来拼接 Server URL。

如果对文章内容有疑问或者有经验分享,请在评论中留言,我们会及时回复。
发表回复