适配器实战:浏览器态招标公告搜索与详情证据抽取)
开发工具CLI人工智能AI 应用浏览器控制GUI 自动化【免费下载链接】OpenCLIMake Any Website into CLI Use your logged-in browser by AI agent.项目地址https://gitcode.com/gh_mirrors/ope/OpenCLI点击查看免费下载导读本文讲解 OpenCLI 仓库中jianyu适配器的完整用法与底层原理。该适配器以“浏览器模式 登录态 Cookie”的方式对接招投标信息平台剑鱼标讯www.jianyu360.cn提供search关键词搜索招标/采购公告并筛选可访问详情链接与detail从详情页抽取结构化证据字段两条只读命令。读完本文你将掌握两条命令的全部参数、输出字段语义、三级数据获取链路、去重与时间过滤规则以及失败时的错误处理策略可直接用于采购情报、标讯监控等场景。适配器定位与工作模式jianyu适配器的能力定义记录在适配器文档 docs/adapters/browser/jianyu.md 中Mode Browser浏览器模式意味着命令通过浏览器驱动执行需要登录态Domainwww.jianyu360.cn搜索入口为https://www.jianyu360.cn/jylab/supsearch/index.html见 clis/jianyu/search.js 中的SEARCH_ENTRY定义。从命令注册代码看search与detail均使用Strategy.COOKIE策略并声明browser: true见 clis/jianyu/search.js 与 clis/jianyu/detail.js即不采用匿名抓取而是复用用户浏览器中已登录的会话。前置条件要正常运行 jianyu 命令需要满足两个条件Chrome 正在运行且带有jianyu360.cn的有效登录会话。更具体地说auth相关代码要求浏览器中存在名为userid_secure且非空的 Cookie见 clis/jianyu/auth.js 的hasJianyuUserCookie检查。已安装 Browser Bridge 扩展安装与配置方式参见 docs/guide/browser-bridge.md。仓库还通过 clis/jianyu/auth.js 的registerSiteAuthCommands注册了 jianyu 站点的登录态管理与身份校验命令它先检查userid_secureCookie再访问站点首页调用https://www.jianyu360.cn/swordfish/frontPage/customer/sess/index探针接口从页面元信息与window.__USER__中解析user_id与name若页面返回登录页或无法探测到用户身份则抛出AuthRequiredError。命令总览命令用途opencli jianyu search query --limit n [--since_days n]搜索剑鱼标讯公告仅保留可访问的详情链接opencli jianyu detail url从搜索得到的 URL 中抽取详情页证据块两条命令均为只读access: read。search的输出列定义为rank, content_type, title, published_at, detail_status, project_code, budget_or_limit, urldetail的输出列为title, publish_time, content_type, project_code, budget_or_limit, deadline_or_open_time, url见对应源码中的columns字段。search 命令详解基本用法# 按关键词搜索 opencli jianyu search procurement --limit 20 -f json # 指定显式时间窗口 opencli jianyu search substation --limit 10 --since_days 30 -f json参数说明参数类型必填默认值说明query位置参数是—搜索关键词如procurement、substation--limitint否20返回条数上限上限50源码中通过Math.max(1, Math.min(Number(kwargs.limit) || 20, 50))钳制--since_daysint否无不过滤仅保留发布时间在 N 天内的行源码中限制在1 ~ 3650天搜索 URL 的构造逻辑clis/jianyu/search.js为以supsearch页面为入口设置三个参数——keywords查询词、selectTypetitle标题匹配、searchGroup1。三级数据获取链路从 clis/jianyu/search.js 的func主流程可以看出search会按优先级依次尝试三种数据来源并逐级合并去重站点内部 API首选fetchJianyuApiRows在页面上下文中向/jyapi/jybx/core/{fType,eType,vType,mType}/searchList四个接口发起 POST 请求见 clis/jianyu/search.js请求体携带keyWords、selectType: title,content、pageSize20~50以及近三年的publishTime时间窗等条件。返回体中若antiVerify -1则标记为触发人机验证挑战challenge。DOM 行抽取searchRowsFromEntries遍历siteSearchCandidates生成的候选 URL以supsearch为首选另含https://www.jianyu360.cn/list/stype/ZBGG.html与首页等兜底入口见 clis/jianyu/search.js在浏览器中用table tbody tr、ul li、article、[class*list] li等通用选择器提取包含日期或采购关键词的链接行见 clis/jianyu/shared/china-bid-search.js。搜索引擎索引兜底仅当前两级均无结果时通过https://r.jina.ai/http://duckduckgo.com/html/?qsite:jianyu360.cn query代理检索见 clis/jianyu/search.js解析 Markdown 形式的搜索结果标题解包 DuckDuckGo 跳转链接uddg参数并过滤掉非jianyu360.cn域名的链接。结果行的质量过滤filterNavigationRows与classifyDetailStatus共同保证输出行是“真实可读的采购公告”而非导航页详情状态分类clis/jianyu/search.jsblocked路径命中/nologin/content/、/article/bdprivate/等前缀说明详情页受登录/付费墙保护entry_only命中导航类路径前缀如/product/、/list/、/jylab/、/tags/、/sitemap等见NAVIGATION_PATH_PREFIXES仅是列表入口或主页ok路径为/jybx/详情detail_reason: jybx_detail或其他详情候选路径detail_candidate。行级过滤clis/jianyu/search.js要求标题或上下文中包含查询词、包含采购类提示词公告|招标|采购|中标|成交|项目|投标|结果|notice|tender|procurement|bidding等并且排除detail_status ! ok的行对非详情路径的行还必须同时具备日期与采购提示词才放行。质量门quality gatetoProcurementSearchRecords会对每行做内容类型分类result / notice / news / navigation / unknown、检查是否匹配查询词并在“有原始行但全部被拒”时抛出taxonomyextraction_drift错误而非静默返回空结果见 clis/jianyu/shared/procurement-contract.js。去重与时间过滤去重结果先按title url去重再按稳定公告 id 去重——extractNoticeId从/jybx/id.html路径中提取公告 id如20260310_26030938267551当source_id与notice_id都存在时以source_id notice_id作为去重键见 clis/jianyu/search.js 与 clis/jianyu/search.js。时间归一化normalizeDate支持2026-4-7、2026年4月7日、2026/04/07 09:00等多种格式统一输出YYYY-MM-DD见 clis/jianyu/shared/procurement-contract.js。--since_days过滤isWithinSinceDays将发布日期与当天按 UTC 日对齐计算天数差仅在0 deltaDays sinceDays时保留见 clis/jianyu/search.js。detail 命令详解detail命令接收search输出的详情页 URL抽取结构化证据opencli jianyu detail https://www.jianyu360.cn/nologin/content/....html -f json参数只有两个位置参数url必填来自search输出与可选的--query用于证据块排序见 clis/jianyu/detail.js。抽取流程核心实现在 clis/jianyu/shared/procurement-detail.js 的runProcurementDetail打开目标 URL等待 2 秒读取document.title与document.body.innerText截取前 12000 字符从正文正则匹配日期(20\d{2}).\-/年.\-/月得到publishTime对正文做鉴权挑战检测命中请在下图依次点击、验证码、请完成验证、验证登录、登录即可获得更多浏览权限等模式即抛selector_drift错误若无标题且无正文抛empty_result错误最多重试 3 次DETAIL_MAX_ATTEMPTS仅在遇到execution context was destroyed、detached、target closed等可重试错误时退避重试退避时间随次数递增。返回字段detail在search的字段基础上额外返回字段说明detail_text归一化后的详情正文截取前 6000 字符evidence_blocks按句子/段落切分并排序后的证据块最多 5 条证据块的排序逻辑在 clis/jianyu/shared/procurement-contract.js 的splitEvidenceBlocks中正文按中文句号、感叹号、问号、分号与换行切分每个片段按“命中查询词的 token 数 × 2 是否含采购提示词 × 1”打分分数相同则取更长的片段最终保序去重。结构化字段抽取detail与search都通过normalizeCoreRecord从上下文文本中正则抽取见 clis/jianyu/shared/procurement-contract.jsproject_owner匹配招标人/采购人/业主/建设单位/项目单位后的取值project_code匹配项目编号/招标编号/采购编号/项目编码/项目代码/编号后的取值budget_or_limit匹配预算(金额)/控制价/最高限价/限价/采购金额/合同估算价后的取值deadline_or_open_time匹配报名截止时间/投标截止时间/开标时间/响应文件递交截止时间/截止时间/开标日期后的取值content_type按关键词优先级分为result中标/成交/结果/候选人…、notice招标/采购/询价/比选…、news新闻/资讯/动态…、navigation、unknownquality_flags当缺project_owner、project_code、budget、deadline或 URL 为列表页/导航页时输出对应标记如missing_project_code、navigation_risk。常见问题排查依据适配器文档 docs/adapters/browser/jianyu.md 的 Troubleshooting 章节并结合源码行为页面出现登录/验证提示在 Chrome 中完成登录或验证后重试。源码中search在“内部 API 返回antiVerify-1挑战”或“页面文本命中验证提示”且无可用结果时会抛出AuthRequiredError见 clis/jianyu/search.jsdetail同样会在正文命中验证码相关模式时报错。返回空行或噪声结果如果结果全是导航/列表页entry_only或被质量门全部拒绝命令会以[taxonomy...]前缀的“分类式提取错误”结束而不是静默返回弱结果——例如[taxonomyextraction_drift] sitejianyu commandsearch all rows rejected by quality gate。这类错误说明页面结构可能发生了变化选择器漂移或当前关键词无有效公告建议更换关键词或检查登录态。detail命中受保护链接search默认只保留detail_status ok的行若你手动传入/nologin/content/路径detail页面仍可能返回空内容或触发验证此时按上述提示处理。测试验证仓库为上述行为提供了单元测试见 clis/jianyu/search.test.js可作为行为契约参考搜索 URL 构造确认supsearch为优先入口且携带keywords、selectTypetitle、searchGroup1第 4~16 行日期归一化2026-4-7、2026年4月7日、2026/04/07 09:00均归一为2026-04-07第 17~21 行导航行过滤列表页与帮助中心被剔除仅保留真实公告第 30~38 行无查询证据的行被拒绝第 39~49 行DuckDuckGo 跳转链接解包与uddg还原第 59~62 行从jybxURL 提取发布日期与稳定公告 id第 63~66、141~144 行API 载荷归一化与跨桶去重第 67~127 行nologin链接分类为blocked、普通详情分类为ok、列表页分类为entry_only第 128~140 行--since_days时间窗判定第 145~152 行。使用场景建议jianyu适配器适合以下数据流先以search批量发现标讯配合--since_days做近期监控、-f json输出便于下游消费再对detail_status为ok的链接调用detail获取detail_text与evidence_blocks用于证据留存或摘要生成。由于search已内置“只保留可访问详情链接”的过滤整条链路可以直接嵌入定时任务实现对标讯的自动化跟进。赞分享开发工具CLI人工智能AI 应用浏览器控制GUI 自动化【免费下载链接】OpenCLIMake Any Website into CLI Use your logged-in browser by AI agent.项目地址https://gitcode.com/gh_mirrors/ope/OpenCLI点击查看免费下载相关推荐OpenCLI Coupang 浏览器适配器实战基于登录会话的商品搜索、详情抓取与加购OpenCLI Coupang 浏览器适配器实战基于登录会话的商品搜索、详情抓取与加购 导读 本文以 OpenCLI 仓库中 Coupang 适配器文档 ht开发工具CLI人工智能AI 应用浏览器控制GUI 自动化OpenCLI Indeed 适配器实战用 Cookie 浏览器会话穿透 Cloudflare 抓取美国站职位搜索与详情OpenCLI Indeed 适配器实战用 Cookie 浏览器会话穿透 Cloudflare 抓取美国站职位搜索与详情 本文以 OpenCLI 仓库中的 I开发工具CLI人工智能AI 应用浏览器控制GUI 自动化OpenCLI 大众点评dianping浏览器适配器实战基于登录态 Chrome 的店铺搜索与详情采集OpenCLI 大众点评dianping浏览器适配器实战基于登录态 Chrome 的店铺搜索与详情采集 本篇指南围绕 OpenCLI 项目中的大众点评d开发工具CLI人工智能AI 应用浏览器控制GUI 自动化创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考