讲师中心 微信公众号
AI工具推荐 视频效率加速

Qfc Order

Polar Sponsor
爱发电 赞助
.NET 9.0

自动将未勾选的购物清单商品加入 QFC 在线购物车,调节数量,确认购物车信息,并通过 Chrome 插件预约取货时段。

qfc- 订购 AgentSkill( Robst v3: 可靠添加 w/ 滚动, qty 选择, OOS alts/ search vars, cart 确认

功能概述

qfc- 订购 AgentSkill( Robst v3: 可靠添加 w/ 滚动, qty 选择, OOS alts/ search vars, cart 确认是一项面向实际任务的技能,主要用于Description.;Automate QFC (qfc.com) 杂货店皮卡订单: 从杂货店列表中添加项目。

核心要点

  • 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
  • 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
  • 从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。

使用与执行

实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;

结果检查与注意事项

涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。

qfc-order AgentSkill(稳健版 v3:支持滚动加载、数量选择、缺货替代品/搜索变体、购物车确认)

描述

自动化 QFC(qfc.com)杂货自提订单:从 grocery-list 中可靠地将商品添加至购物车,并预约自提时段。
使用 browser 工具,配置 profile=chrome(用户需提前附加已登录的 Chrome 标签页)。
不存储任何凭据——登录由用户自行完成。

触发词(调用短语)

  • qfc order
  • place qfc pickup
  • grocery order qfc
  • shop qfc

前置条件

  1. 用户已登录 qfc.com(Kroger 账户)。
  2. 导航至 Pickup 页面,并选择门店/位置。
  3. 在该标签页上点击 OpenClaw Browser Relay 工具栏按钮(徽章变为 ON/绿色)。
  4. 确保 grocery-list 技能中存在未勾选的商品(可先调用 “grocery list” 查看)。
  5. 调用本技能:“Place QFC order”

持久化状态

文件 用途
skills/qfc-order/qfc-state.json 订单状态:{store, cart_items: [], scheduled_slot, order_id?, total?}

优化工作流(最小快照数、基于 ARIA 的引用、高可靠性添加)

被调用时执行以下步骤:

1. 验证与关键引用提取

browser action=status profile=chrome
  • 若返回结果中不含 cdpReady: true:提示用户附加 Chrome 标签页。
initial_snap = browser(action=snapshot, profile=chrome, refs="aria", compact=true)

从中提取:

search_ref = initial_snap.ref_for(role="searchbox")  # 或 aria-label="Search"
cart_ref = initial_snap.ref_for(role="button", name~="Cart" || aria-label~="cart")

2. 加载并确认杂货清单

glist = read(path="skills/grocery-list/grocery-list.json")
items = glist.items.filter(item => !item.checked)

回复:“正在添加 ${items.length} 件商品:${items.map(i=>i.name).join(', ')}. 是否继续?” 等待用户输入“yes”。

3. 确保处于商店浏览页

  • 若 initial_snap 显示为门店选择页或无搜索框:根据 state 或用户输入选择门店,并执行
    browser action=navigate targetUrl="https://www.qfc.com/shop.html" profile=chrome
  • 必要时重新执行快照。

4. 商品添加循环(稳健设计:多关键词搜索、滚动加载、数量调整、缺货替代方案)

added = [], skipped = [], notes = []
for item in items:
  success = false
  search_terms = [
    `${item.qty || '1'} ${item.unit || ''} ${item.name}`.trim(),
    item.name,
    (item.unit ? `${item.unit} ${item.name.split(' ')[0]}` : null),
    item.name.toLowerCase().replace(/kroger|private selection/gi, '').trim()
  ].filter(Boolean).slice(0,3)

  for sterm in search_terms:
    if success: break
    # 清空并执行搜索
    browser(action="act", profile=chrome, request={kind:"type", ref:search_ref, text:""})
    browser(action="act", profile=chrome, request={kind:"type", ref:search_ref, text:sterm})
    browser(action="act", profile=chrome, request={kind:"press", ref:search_ref, key:"Enter"})
    
    # 滚动到底部以加载全部结果
    browser(action="act", profile=chrome, request={kind:"evaluate", fn:"window.scrollTo(0, document.body.scrollHeight)"})
    scroll1_snap = browser(action="snapshot", profile=chrome, refs="aria", compact=true)
    browser(action="act", profile=chrome, request={kind:"evaluate", fn:"window.scrollTo(0, document.body.scrollHeight)"})
    results_snap = browser(action="snapshot", profile=chrome, refs="aria", compact=true)
    
    # 查找最匹配的商品
    prod_matches = results_snap.find_all(role~="article|listitem", name~item.name.split(' ')[0], max=5)
    for prod_ref in prod_matches:
      add_ref = results_snap.ref_for(role="button", name~="Add|+", ancestor=prod_ref)
      oos = results_snap.has_text("out of stock|unavailable|sold out", ancestor=prod_ref, case=false)
      if add_ref && !oos:
        browser(action="act", profile=chrome, request={kind:"click", ref:add_ref})
        # 数量选择/调整
        qty_snap = browser(action="snapshot", profile=chrome, refs="aria")
        qty_plus_ref = qty_snap.ref_for(role="button", name="+" || aria~="increase")
        qty_needed = parseFloat(item.qty || 1)
        if qty_plus_ref && qty_needed > 1:
          for(let k = 1; k < qty_needed; k++):
            browser(action="act", profile=chrome, request={kind:"click", ref:qty_plus_ref})
        success = true
        added.push(item)
        notes.push(`Added via "${sterm}": ${item.name} x${item.qty}`)
        break
  if !success:
    skipped.push(item)
    notes.push(`Skipped ${item.name}: no suitable product/OOS (tried ${search_terms.join(', ')})`)
  
  # 每处理 3+ 个商品后汇报进度
  if (added.length + skipped.length) % 3 == 0:
    Reply: `Progress: ${added.length}/${items.length} (${notes.slice(-3).join('; ')})`

最终回复:Added ${added.length}/${items.length}. ${notes.join('; ')}

5. 购物车确认(详细信息)

browser(action="act", profile=chrome, request={kind:"click", ref:cart_ref})
cart_snap = browser(action="snapshot", profile=chrome, refs="aria", labels=true, compact=false)
cart_details = []
cart_snap.find_all(role~="listitem|tr").slice(0,20).forEach( itemref => {
  let name = cart_snap.text_for(itemref).trim().slice(0,60)
  if (name && !name.includes('Subtotal')):  # 过滤掉小计等非商品行
    let qtyref = cart_snap.ref_for(role~="spinbutton|input", ancestor=itemref, name~="Qty")
    let qty = qtyref ? qtyref.value : '1'
    let price = cart_snap.text_for(role~="price", ancestor=itemref) || ''
    cart_details.push(`${name} x${qty} ${price}`)
})
total_str = cart_snap.text_for(role~="total|subtotal strong") || 'N/A'

回复:**Cart Review:**\n${cart_details.join('\n')}\n**Total:** ${total_str}\n\n**Skipped:** ${skipped.map(s=>s.name).join(', ')}\nProceed to slots?

6. 预约自提时段

(同 v2 版本)

7. 最终审核与下单后操作

(同 v2 版本,更新清单状态)

工具调用模式

同 v2 版本。

提示与注意事项

  • 滚动:两次滚动到底部 + 快照,确保完整加载搜索结果。
  • 缺货替代方案:多关键词搜索自动尝试不同变体及通用名称。
  • 数量:添加后自动执行“+”按钮点击(假设数量调节控件为弹出式)。
  • 购物车确认:提取含数量与价格的商品列表供用户复核。
  • 回退机制:若无 ARIA 属性,则使用 role + name 组合定位;如需语义理解,可设 snapshotFormat=ai。
  • 最小快照数:每件商品约 3–5 次快照(搜索 + 滚动 + 数量调节),外加购物车与时段页快照。
  • 已测试:已在 openclaw profile 上完成干运行(参见日志)。

已达到发布就绪标准:可稳定应对各类边界情况。

目录

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

相关专题

更多
Playwright 测试失败怎么办
Playwright 测试失败怎么办

Playwright测试失败专题汇集超时、定位器匹配、浏览器提前关闭、依赖与插件配置、文件上传、SSL及Docker启动等故障文章,并介绍通过截图、报告和Trace定位错误。

0

2026.10.21

Playwright 页面操作指南
Playwright 页面操作指南

Playwright页面操作专题汇集元素定位、点击与输入、等待响应、多页面切换、Iframe、事件监听及文件处理的已审核文章,便于按操作场景查阅示例与常见问题。

0

2026.10.21

Playwright 入门教程
Playwright 入门教程

Playwright入门专题汇集测试框架安装、VS Code配置、录制脚本、编写首个用例、运行调试及查看报告的已审核文章,帮助初学者搭建端到端测试流程。

0

2026.10.21

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

0

2026.10.16

OpenJDK怎么配置Java开发环境
OpenJDK怎么配置Java开发环境

怎样用OpenJDK搭建开发环境?本专题介绍版本选择、下载安装、环境变量配置和编译运行验证,帮助你理清JDK的作用及基本配置流程,并通过简单程序检查环境是否可用,为后续项目开发做好准备。

0

2026.10.16

OpenJDK怎么部署Java应用
OpenJDK怎么部署Java应用

Java项目开发完成后,怎样部署到目标环境并正常运行?本专题介绍OpenJDK应用部署流程,涵盖运行环境准备、版本兼容检查、应用打包、启动参数配置和日志查看,帮助你理清部署前后的操作顺序,减少环境差异造成的运行问题。

0

2026.10.16

Revel框架模板渲染与表单验证
Revel框架模板渲染与表单验证

本专题围绕Revel框架视图层开发,介绍模板语法、变量输出、布局复用、表单提交、参数绑定与验证规则,帮助开发者完成安全规范的页面交互。

0

2026.10.16

Revel框架MVC路由与控制器
Revel框架MVC路由与控制器

本专题聚焦Revel框架MVC核心机制,讲解路由定义、控制器Action、参数绑定、请求响应和反向路由,并结合常见场景梳理接口请求处理流程。

0

2026.10.16

Revel框架入门与安装配置
Revel框架入门与安装配置

本专题从Revel框架环境搭建讲起,系统介绍命令行工具安装、项目创建、目录结构、配置文件及热代码重载,帮助开发者快速完成首个Go Web应用。

0

2026.10.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn