如何扩展现有应用
扩展现有应用
下边我们举一个具体例子来讲解如何扩展现有应用,来加入新功能或者简化使用。
fxd-app-check-chan
是一个监测 url 内容变化并发送通知的应用,它接受如下参数:
--url <string> 要打开的页面 URL (required)
--headless <boolean> 是否使用无头模式 (default: true)
--selectors <string> 要检测的元素的 CSS 选择器,多个用逗号分隔 (default: body)
--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)
--sendkey <string> Server酱sendkey,设置后有变动时会发微信通知
--feed_publish <boolean> 有变动时是否发布Feed
--feed_as_public <boolean> 发布Feed时,是否在RSS中可见
--wait_type <string> 等待元素出现的方式 (default: domcontentloaded)
通过指定 selectors
参数,理论上我们可以监测所有网页。但 selectors
过于技术化,并不是所有用户都会使用。因此,我们针对只需要监测抖音账号是否有作品更新用户,提供一个定制版的应用 fxd-app-douyin-count
。
这个应用只接受一个参数:
--url <string> 抖音用户主页 URL (required)
selectors
我们会直接写死在应用中,这样用户不用了解这个非常技术化的概念。
fxd-app-douyin-count
的代码如下:
import FxdCheckChan from 'fxd-app-check-chan';
import { FxdSdk, getPackageInfo } from 'fxd-sdk';
export default class FxdDouyinCoutn extends FxdCheckChan {
constructor() {
super();
const oldArgsSettings = this.sdk.args;
this.sdk = new FxdSdk(getPackageInfo(import.meta.url));
this.sdk.args = this.mergeProps(oldArgsSettings,[
'watch',
'main|check|watch.-selectors,prejs,prejs_args,preplay,list'
]);
}
async main(args, opts, command) {
opts['selectors'] = `[data-e2e='user-tab-count']`;
return await this.watch(args, opts, 'watch');
}
}
这样 fxd-app-douyin-count
应用就已经完成了。使用方式:
fxd douyinCount --url="https://www.douyin.com/user/MS4wLjABAAAAHwf1DAfgUg4cxizx9nLC1JozAR1P-jGOhagrX9pgLz8" --format="json"
额外说明
- Fxd系列应用一般不是常驻后台,而是由用户将其添加到Cron中执行,因此即使是定时监测网页的任务,也只需要处理一次的情况。可以使用SDK中的命令来存储数据以供下次使用。