AI PLAY玩法更新持续收录
← 回到更新流

2026-09-06 · 原文发布日

用大白话条件盯网页,条件达成才邮件提醒

在Google Sheets里每行写一个网址和一句大白话条件(比如有房可订、报名开放),流程按你设定的频率抓取页面:先走HTTP,遇到拦截或JS渲染页自动切到Airtop浏览器会话,必要时还能按描述先点页面上的某个按钮。Gemini读页面后给出YES/NO判断并附原文引文,代码会校验引文是否真在页面里;只有状态从NO变YES才发一封Gmail提醒,连续抓取失败则改发监控异常通知。

原文要点

原模板用Google Sheets的Watchlist/Log两页保存监控行,定时只取到期行;先HTTP抓取,被拦、内容过短或JS渲染时切Airtop浏览器,可按open_step描述先点元素。Gemini返回YES/NO/UNCLEAR、置信度和引文,代码校验引文必须出现在页面文本;仅NO转YES发Gmail,连续失败转监控异常。作者称在日本露营JSON接口与酒店JS页测过403回退和点击日历。

这次做成什么

照着做出一个“条件达成才提醒”的网页盯梢:每行一个网址加一句大白话条件,先建立基线,之后只在状态从NO翻到YES时给指定邮箱发一封邮件;练习用自建测试页,不碰真实订票。

准备什么

  • n8n可用实例、Google Sheets/Gmail OAuth、Gemini API凭据
  • 一个含Watchlist与Log两个工作表的Google Sheet及文档ID
  • 可选Airtop免费层凭据,仅JS渲染或403时启用
  • 一个你可控制的测试网页或JSON端点用于演练

具体怎么做

  1. 建表与列

    新建Sheet:Watchlist列用watch_id,url,condition,check_every_hours,notify_to,fetch_mode,open_step,open_url,next_due_at,last_state,last_evidence,last_error,yes_streak,no_streak,error_streak;Log列用ts,watch_id,verdict,confidence,quote,http_status,lane,error。列名以导入模板设置说明核对,不一致就改模板引用。

  2. 配置凭据与常量

    在n8n添加Google Sheets、Gmail、Gemini凭据;Config节点填spreadsheet_id、default_email、per_run_limit、yesConfirmationsToNotify=1、noConfirmationsToRearm=2、maxErrorStreak=3、requestTimeoutSec。先导入/复刻原模板;若无下载文件,不要伪造可导入JSON,按下面链路重建。

  3. 重建处理链路

    节点顺序:Schedule Trigger→Sheets Read Watchlist→Filter到期且未超per_run_limit→HTTP Request抓url→IF状态403/正文过短→Airtop会话(fetch_mode=browser或auto回退;open_step非空先点击等待)→提取正文→Gemini判断→Code校验引文in page_text→状态机→Sheets Update/Append Log→仅transition_to_yes或error_streak>=3走Gmail。

  4. 字段映射

    Gemini输入映射page_text、condition、current_time;输出存last_state/last_evidence。邮件正文映射watch_id、open_url(空则用url)、condition、quote、checked_at。next_due_at=now+check_every_hours小时;失败只增error_streak不改last_state。

  5. 演练基线与翻转

    先用测试页返回“名额已满:0”,手动跑一次得到NO且不发信。再把测试页改为“可订名额:2”,把next_due_at改到过去,再跑一次应收到一封YES邮件;连续三次把URL改成失效域名,应收到一封monitoring problem邮件。

可直接复制的材料

Gemini判定提示词

本站独立编写,需把双花括号变量映射到n8n字段;引文校验在Code节点完成。

你是网页条件判定器。只根据给定PAGE_TEXT回答,不使用外部知识。
CONDITION:{{condition}}
PAGE_TEXT:{{page_text}}
规则:1) 明确满足输出YES,明确不满足输出NO,证据不足或页面异常输出UNCLEAR;2) quote必须是PAGE_TEXT中逐字连续片段,最多80字符;3) 置信度0到1;4) 只输出JSON。
{"verdict":"YES|NO|UNCLEAR","confidence":0.0,"quote":"","reason":"20字内"}

Watchlist练习CSV

example.test为虚构域,练习时换成自建测试端点;notify_to用隔离测试邮箱。

watch_id,url,condition,check_every_hours,notify_to,fetch_mode,open_step,open_url,next_due_at,last_state
camp-demo,https://example.test/api/camp,有任意可订营位,1,ops@example.test,auto,,https://example.test/camp,2026-09-06T09:00:00Z,NO
hotel-demo,https://example.test/hotel,出现明晚可订且价格低于1200元,24,ops@example.test,browser,选择日期按钮,https://example.test/hotel/search,2026-09-06T09:00:00Z,NO

Config示例

本站示例配置;yes/no阈值可按原文Customization调,不要当作作者实测性能承诺。

{"spreadsheet_id":"替换为Sheet文档ID","default_email":"ops@example.test","per_run_limit":20,"yesConfirmationsToNotify":1,"noConfirmationsToRearm":2,"maxErrorStreak":3,"requestTimeoutSec":30,"airtopEnabled":false,"httpFirstMinChars":200,"gmailSubjectPrefix":"[条件达成] "}

输入与输出示例

本站虚构演示,未调用Gemini或Airtop;数字与字段只为说明映射。

输入

测试页PAGE_TEXT含“营地A 9月12日 可订名额:2;剩余付款时间10分钟”,CONDITION为“有任意可订营位”,上一次last_state=NO,error_streak=0。

对应输出

Gemini示意JSON:{"verdict":"YES","confidence":0.93,"quote":"可订名额:2","reason":"出现可订数量"};状态机判定NO→YES,写Log一行,Gmail主题“[条件达成] camp-demo”,正文含quote与open_url。

做完检查这些

  • 首次运行只写基线,last_state变为NO或YES且未发邮件
  • 测试页从0名额改2名额后,仅收到一封条件达成邮件
  • Gemini返回的quote逐字包含在page_text中,否则按UNCLEAR处理
  • 失效URL连续三次后error_streak=3并收到监控异常通知

容易卡住的地方

  • 需要登录、验证码或频繁403的页面可能超出免费浏览器额度
  • 大白话条件太宽会把广告或历史日期误判为YES
  • Sheet列名与模板不一致会导致读取为空而不是报错
  • 首次YES基线不代表从NO翻转,别据此判断提醒失效

原文与作者资料 ↗

本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。

原文标题
Watch web pages for plain-language conditions with Gemini, Sheets and Gmail
原作者
ayumi
原始发布日期
2026-09-05T18:40:23.168Z
来源
https://n8n.io/workflows/19262