"ctbpsp 招标抓取的内容不是我自定义的关键词"
ctbpsp 是综合中招平台,首页只展示通用最新公告;按 布带/吸丝带 等关键词过滤首页必然 0 命中。
正确做法:用关键词驱动 ctbpsp 的搜索框,再抓取命中结果。
scripts/browser_fetch.js:新增关键词搜索模式。当keywords非空且配置了searchInputSelector时, 逐关键词「填入搜索框 → 点击搜索按钮(或回车/按文本『搜索』兜底)→ 等结果渲染 → 抽 DOM」,多关键词结果合并后按「标题+日期」去重。app/workbench_api.py:_fetch_browser_source把keywords/searchInputSelector/searchButtonSelector传入浏览器配置;- browser 源始终按用户关键词二次过滤(ctbpsp 搜索结果夹带「最新公告」噪声块,须过滤,保证卡片只显示真正命中);
- 修复
_persist_bids批次内(link,title)重复插入导致的UNIQUE constraint failed(新增seen_batch跳过同批重复)。
- 前端:
web/src/api/workbench.ts:BiddingSource增searchInputSelector?/searchButtonSelector?并序列化传出;web/src/stores/workbench.ts:defaultPrefs的 ctbpsp 源加searchInputSelector:'input[type="text"]'/searchButtonSelector:'button.btns';normalizeState改为尊重用户自定义 keywords(不再强制清空,仅以官方配方兜底 type/选择器);norm()去#hash/?query/尾部斜杠,使https://ctbpsp.com/#/也能匹配官方配方;addBiddingSource/updateBiddingSource支持这两个选择器;web/src/components/WbCardSettings.vue:浏览器分支增加「搜索框选择器 / 搜索按钮选择器」输入与说明,并保留「填入 ctbpsp 预设」。
- 数据清理:删除了早期未过滤时入库的
kw=[]陈旧噪声行(通用公告),卡片只读关键词命中。
GET /api/bidding?refresh=1&sources=[ctbpsp browser 源, keywords=['布带','吸丝带']]→ HTTP 200,返回命中词的真实标讯(如「芜湖卷烟材料有限责任公司布带采购(2026-2028年)项目招标公告」)。- 非刷新读库 → ctbpsp 条目全部含
布带/吸丝带,0 条不含关键词。 vue-tsc --noEmit0 错;vite build成功。
- 硬刷新浏览器(Ctrl/Cmd+Shift+R)拿到新 JS 包;
- 「招标信息」卡片点一次刷新(真实起无头 Edge 驱动 ctbpsp 搜索,单源约 15–40s);
- 命中项点击跳转源站首页自行看详情(ctbpsp 详情页无链接,link 兜底为站点基址);
- 换关键词:在设置面板编辑 ctbpsp 源的「关键词」即可(留空则展示最新公告)。
服务已在 http://127.0.0.1:5000 运行(PID 23028,最新代码)。