
没有公开 API 的政府网站怎么查韩国法院拍卖k-skill court-auction-notice-search 保守设计深度解析【免费下载链接】k-skill한국인을 위한 스킬 모음집 - 에이전트를 한국인으로项目地址: https://gitcode.com/GitHub_Trending/ks/k-skill从一个真实问题说起用户丢给你一句话首尔中央地方法院下周拍哪些房或者帮我找江南区 5 亿以下、流拍过的公寓。数据源头只有韩国大法院运营的法院拍卖信息站 courtauction.go.kr——一个没有公开 Open API、反爬极其激进的政府站点大约 30 秒内打 16 次请求你的 IP 就会被封 1 小时。直接写爬虫抓等于烧掉自己的出口 IP。k-skill 仓库里的court-auction-notice-search技能就是为这个矛盾而生的把法院不动产拍卖公告与案件数据转成 Agent 能直接消费的结构化 JSON全程 read-only而且慢得让人心疼。30 秒跑通第一条查询装包后你会得到一个和 npm 包同名的 CLI。最快的方式是先拉一张法院代码表npm install court-auction-notice-search court-auction-notice-search codes courts --pretty | head -20跑完你会看到 60 多个法院事务所的代码与名称比如B000210对应首尔中央地方法院——后面所有查询都要用到它。真正查公告则是court-auction-notice-search notices --date 2026-04 --court-code B000210 --pretty如果你习惯 Node.js也可以直接require它导出的searchSaleNotices、getCaseByCaseNumber、searchProperties等函数CLI 底层用的就是同一套门面 API。没有 API 时它怎么和网站对话这个站点是 WebSquare 前端框架搭的——韩国政务站的常见选择。关键洞察在于页面上那个搜索按钮本质上就是向后端 POST 一份结构化 JSON。既然按钮能拿到数据程序当然也能。于是技能直接调用站点内部的 XHR endpoint一条真实请求长这样公告列表往POST /pgj/pgj143/selectRletDspslPbanc.on发请求体核心是dma_srchDspslPbanc.{srchYmd, cortOfcCd, bidDvsCd}其中日期是月粒度的YYYYMM和站点搜索按钮的行为完全一致。每次 POST 之前还会先做一次 warmup GET 拿到会话 Cookie请求头里补齐X-Requested-With: XMLHttpRequest、韩语Accept-Language和按 endpoint 对应的Referer把伪装成正常浏览器行为这件事做足。那浏览器呢默认不需要。正常路径下公告、案件、物件查询全部走直接 HTTP零浏览器依赖。浏览器只作为降级通道存在且只在自由条件检索撞到 WAF 型 HTTP 400 时才激活。降级分两层优先复用用户已经打开的 BrowserOS / Aside / Chrome 的 CDP 会话由k-skill-browser-runtime按平台探测全都够不着才本地chromium.launch起一个。为什么这么设计因为浏览器通道慢、重、还可能撞上登录态问题能不用就不用而 WAF 400 是请求形状被拦而非身份被封换一条更拟真的通道往往就能过。通道何时启用特点直接 HTTP默认所有查询无浏览器依赖最快Runtime 浏览器自由检索遇 WAF 型 400复用用户已开的 CDP不碰用户 profile本地 Playwrightruntime 均不可达时自建 chromium用完完整关闭用户到底会问什么抛开实现这个技能覆盖的其实就三类问法。某天某法院拍了哪些东西用户给日期可选给法院、投标区分调searchSaleNotices({ date, courtCode, bidType })拿到当天的公告卡片列表用户点中某张卡片后把卡片对象原样传给getSaleNoticeDetail返回的items[]里就有caseNumber、usage、address、appraisedPrice、minimumSalePrice这些字段。有个细节值得注意detail 请求体里有个jdbnCd裁判部加密令牌它只能从列表响应里拿外部构造不出来——这就是原样传卡片的原因。价格都是韩元整数展示时记得给韩式千分位加亿/万换算감정 4억 2천만원比420000000对用户友好得多。这个案件号现在进展如何getCaseByCaseNumber({ courtCode, caseNumber })一步到位caseInfo案件名、受理日、请求金额、裁判部、schedule[]各拍卖日的最低价/评估价/结果、claimDeadline配当要求终期、stakeholders利害关系人都在返回里。如果found: falsestatus 204说明案件不存在或不公开此时该做的是让用户核对案件号和法院而不是重试。帮我找符合条件的物件searchProperties支持区域、用途、最低价区间、评估价区间、拍卖日期区间、流拍次数、面积等多条件组合。区域给了就按地番地址搜不给就走公告模式pageSize只接受10/20/50/100——这不是技能的洁癖而是站点下拉框里就只有这几个值传1会被线上 endpoint 直接 400所以干脆本地拒绝。const notices await searchSaleNotices({ date: 2026-04-27, courtCode: B000210 }); if (notices.items.length 0) { const detail await getSaleNoticeDetail(notices.items[0]); console.log(detail.items[0].caseNumber, detail.items[0].minimumSalePrice); }输入容错比直觉宽松日期可月可日给日就按月查完再过滤案件号2024-100001会自动规范化成2024타경100001courtCode留空即查全部法院。慢即是稳一套反直觉的保守设计 这个技能最有意思的部分不是能查什么而是它拒绝什么。所有设计都指向同一个威胁模型站点按 IP 封禁且阈值很低。调用间隔下限 2 秒 0~1 秒随机抖动。2 秒是算过账的30 秒 16 次是封禁线2 秒起步意味着一分钟最多 30 次左右留足余量再加随机抖动是为了避免固定间隔这种典型机器人指纹。每会话预算默认 10 次。超了抛BUDGET_EXCEEDED这是故意设计的安全阀——它把我要不要继续查的决策交还给调用方。确有需要时开新客户端或显式调大maxCallsPerSession但前提是同步向用户提示封禁风险。遇到ipcheck false立即抛BLOCKED绝不自动重试。直觉上失败了重试一下是好事但在这里重试恰恰是雪上加霜站点判定你已经被封继续打只会延长封禁。正确姿势是停手把被封了、约 1 小时后自然恢复如实告诉用户等待期间可以换网络或让人用浏览器走一遍站点的解封画面。浏览器 fallback 也有清晰的所有权边界连到用户已打开的 runtime 浏览器时结束只清理 adapter 自己创建的 page/context/tab然后断开 automation client——用户的 profile 一个字都不碰本地 launch 的浏览器则是自己起的就完整关掉。最后是代码表的fail-open哲学用途/区域代码表只收录了确认过的静态值未知输入一律透传而不是报错。特别地像아파트公寓这种名字如果只存在于中/小分类而用户填的是大分类位resolveUsageCode不会静默返回一个同名的错误代码而是 fail-open 透传原文——宁可让服务端报错也不让请求体被静默污染。另外实测同一个 Playwright 客户端连续 10~15 次间隔调用是稳定的真要更高 burst加 3~5 秒 sleep 并换新客户端。它明确不做什么保守不只体现在快慢上边界也画得很硬不投标、不填表、不自动提交。动产拍卖、物件照片、明세서/감정평가서 PDF 下载都不在 v1 范围全部留作 follow-up。这个技能是 read-only 的观察工具投标必须由人在法院完成。每次使用它还要求向用户声明四件事一数据只是法院公开信息的原样转述真正投标前必须回原始公告复核二自动化调用会触发 IP 封禁同 IP 需等约 1 小时三价格、拍卖日期、场所均以公告时点为准可能因更正/撤回/延期而变化响应里的correctionCount、cancellationCount字段就是佐证四本技能绝不自动投标。更广义的合规红线同样适用不绕 CAPTCHA、不碰支付与电子签名、不执行任何不可逆外部副作用遇到这类环节做到最远的合法一步把下一步的官方操作精确准备好交给用户然后停住。这不是免责声明的措辞游戏而是在反爬敏感的政府站点上长期存活的唯一姿势。排错你遇到了什么多半是什么问题 收到 WAF 型 HTTP 400。自由检索最常见。直接 HTTP 撞 400 会自动转浏览器通道重试一次如果连 fallback 都失败大概率是会话过期或jdbnCd不匹配——从 warmup 重新开始别急着怀疑参数。抛 BLOCKED。站点明确告诉你这个 IP 被封了。等约 1 小时、换网络、或人工浏览器走解封流程三选一。代码此时不会替你重试这是对的。抛 BUDGET_EXCEEDED。别慌这是安全阀不是故障。确有必要时--max-calls 20或调大maxCallsPerSession但记得把封禁风险一起说给用户。请求超时。NETWORK_ERROR原始异常挂在error.cause上检查一下timeoutMs默认 15s和你所在网络到韩国的链路。想用 Playwright fallback 却报 PLAYWRIGHT_UNAVAILABLE。模块没装npm install rebrowser-playwright或playwright-core即可这个错误是 fail-closed 的装了就安静工作。想理解响应长什么样test/fixtures/下的 JSON 样例是最佳教材——包括一份由真实浏览器提交捕获的 canonical 请求体。本地验证也很直接npm run lint npm run test仓库导航由浅入深的阅读顺序建议的阅读路径是先看技能目录下的 instruction.md 了解行为边界再读 包 README 掌握 Public API 与错误模型然后进 src/index.js 看门面层如何做输入规范化与请求体构造接着是src/transport/HTTP 限流与 Playwright 降级、src/normalize.jsraw 列名到英文键的映射和src/codetables/静态代码表及其 fail-open 解析。需要克隆仓库本地跑测试的话地址是 https://gitcode.com/GitHub_Trending/ks/k-skill 。这套保守限流 结构化输出 明确边界的组合放到任何政务、金融类的只读数据查询技能里都同样可复用。【免费下载链接】k-skill한국인을 위한 스킬 모음집 - 에이전트를 한국인으로项目地址: https://gitcode.com/GitHub_Trending/ks/k-skill创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考