为什么
有时候我们需要获取某些网站的更新信息,这就需要定期查看并比较。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。