ai-goofish-monitor 闲鱼登录态采集 Chrome 扩展(Xianyu Login State Extractor)使用与原理详解
发布时间:2026/10/14 3:09:56 锦皓数字建站
使用与原理详解`)
后端网页爬虫AI 应用前端电商【免费下载链接】ai-goofish-monitor基于 Playwright 和AI实现的闲鱼多任务实时/定时监控与智能分析系统配备了功能完善的后台管理UI。帮助用户从闲鱼海量商品中找到心仪产品。项目地址https://gitcode.com/gh_mirrors/ai/ai-goofish-monitor点击查看免费下载本篇技术指南完整讲解 ai-goofish-monitor 项目中chrome-extension目录下的闲鱼登录态采集扩展它负责从真实浏览器中提取闲鱼Goofish登录态 Cookie、浏览器环境指纹与请求头生成监控机器人可直接使用的 JSON 快照。读完本文你将掌握该扩展的安装加载、一键采集、剪贴板导出流程理解其基于 Manifest V3 chrome.cookies/webRequest/scripting的底层实现原理并学会将产出文件xianyu_state.json正确接入监控系统的登录态校验、任务绑定与多账号轮换链路。扩展在项目中的定位ai-goofish-monitor 是基于 Playwright 的闲鱼多任务实时/定时监控系统。监控爬虫以 Playwright 驱动 Chromium 访问闲鱼而要维持真实用户身份就必须携带真实账号的登录态。由于闲鱼 Cookie 中 HttpOnly 标记的字段无法通过页面 JavaScript 直接读取常规的document.cookie方案存在天然盲区因此仓库在 chrome-extension/README.md 中提供了专用浏览器扩展来打通这条链路This Chrome extension helps extract complete login state information from Xianyu (Goofish) for use with the monitoring robot. It also records browser environment hints and request headers to better mimic a real session.其核心价值有两层一是完整导出登录态含 HttpOnly Cookie二是连带记录浏览器环境与请求头让监控端的 Playwright 会话能最大限度模拟真实浏览器指纹降低被识别为自动化的风险。安装加载未打包的扩展原文档给出了 4 步安装流程按其操作即可打开 Chrome地址栏访问chrome://extensions开启右上角的开发者模式Developer mode点击加载已解压的扩展程序Load unpacked选择仓库中的chrome-extension目录即本指南所在的目录加载完成后扩展图标会出现在浏览器工具栏。扩展的清单文件 chrome-extension/manifest.json 采用 Manifest V3manifest_version: 3版本号为1.1扩展名为 Xianyu Login State Extractor。它声明了以下权限理解这些权限有助于通过 Chrome 商店式的权限审核也便于排查为什么采集不到数据类问题权限用途activeTab/tabs定位当前活动标签页并读取其 URL判断是否为 goofish.com 页面cookies通过chrome.cookiesAPI 读取.goofish.com域下全部 Cookie含 HttpOnlyscripting向当前页面注入采集脚本读取navigator/screen/localStorage/sessionStorage并触发一次探测请求webRequest监听onBeforeSendHeaders捕获真实请求头配合extraHeadersstorage保存用户同意状态与功能开关见 xianyu-login-state-privacy.html 的权限说明host_permissions*://*.goofish.com/*限定只在闲鱼域名下工作使用三步拿到可用登录态原文档的使用流程可归纳为登录 → 采集 → 复制保存浏览器导航至https://www.goofish.com并登录你的闲鱼账号点击工具栏上的扩展图标打开弹窗点击Extract Login State弹窗内实际文案为1.点击获取环境登录状态扩展会一次性采集cookies 环境 请求头并自动过滤无用/超大字段采集完成后完整 JSON 会显示在弹窗的文本域中点击Copy to Clipboard即2.点击复制复制将 JSON 文本保存为xianyu_state.json或自定义文件名即可交给监控机器人使用。弹窗界面由 chrome-extension/popup.html 与 chrome-extension/popup.js 实现extractBtn发起chrome.runtime.sendMessage({ type: captureSnapshot })请求stateOutput以JSON.stringify(snapshot, null, 2)格式化展示结果copyBtn通过navigator.clipboard.writeText复制采集期间按钮会进入禁用态并显示采集中请稍候...成功/失败均有 4 秒后自动消失的状态提示条status区域的success/error样式。采集了什么快照数据字段全解点击采集后后台 Service Worker chrome-extension/background.js 的buildSnapshot()会拼装出一个完整快照对象字段结构如下结合buildSnapshot源码整理{ capturedAt: 2026-10-13T04:00:00.000Z, pageUrl: https://www.goofish.com/, page: { pageUrl: ..., referrer: null, visibilityState: visible }, env: { navigator: { userAgent: Mozilla/5.0 ..., platform: Win32, language: zh-CN, languages: [zh-CN, zh, en-US, en], hardwareConcurrency: 8, deviceMemory: 8, maxTouchPoints: 0, webdriver: false, doNotTrack: null, userAgentData: { brands: [...], mobile: false, platform: Windows } }, screen: { width: 1920, height: 1080, devicePixelRatio: 1, colorDepth: 24 }, intl: { timeZone: Asia/Shanghai, locale: zh-CN } }, storage: { local: { ...: ... }, session: { ...: ... } }, meta: { droppedStorageKeys: { local: [], session: [] } }, headers: { user-agent: ..., accept: ..., sec-ch-ua: ..., ...: ... }, cookies: [ { name: ..., value: ..., domain: .goofish.com, path: /, expires: 1760328000, httpOnly: true, secure: true, sameSite: Lax } ] }各字段含义与采集逻辑对应关系如下cookieschrome.cookies.getAll({ url })拉取当前标签页 origin 下全部 Cookie并归一化sameSiteChrome 的no_restriction→None、unspecified→Lax等见mapSameSiteValue同时保留httpOnly、secure、domain、path、expirationDate等属性env.navigator来自页面注入脚本读取的navigator对象filterEnvData()会主动剔除vendor等易变字段仅保留userAgent、platform、language(s)、hardwareConcurrency、deviceMemory、maxTouchPoints、webdriver、doNotTrack与userAgentData通过navigator.userAgentData.toJSON()获取env.screenscreen.width/height、devicePixelRatio、colorDepthfilterEnvData同样做了字段瘦身丢弃availWidth等冗余项env.intlIntl.DateTimeFormat().resolvedOptions()的timeZone与locale用于让 Playwright 侧对齐时区与语言storagelocalStorage/sessionStorage快照单键值超过 4096 字节MAX_STORAGE_ENTRY_LENGTH的条目会被丢弃并记录到meta.droppedStorageKeys避免超大字段撑爆配置文件headerscaptureHeaders()通过webRequest.onBeforeSendHeaders监听真实请求头并经filterHeaders()的白名单过滤user-agent、accept、accept-language、referer、sec-ch-ua系列、sec-fetch-*、origin、cache-control等约 17 项只保留对反检测最有价值的字段。工作原理三层 API 协同原文档对原理仅有一句概括——The extension uses thechrome.cookiesAPI to access all cookies for the.goofish.comdomain, including those with the HttpOnly flag set.结合 chrome-extension/background.js 源码实际由三部分协同完成1. Cookie 采集cookies APIchrome.cookies.getAll({ url })属于浏览器扩展特权 API不受页面 JavaScript 的 HttpOnly 限制因此能拿到_m_h5_tk、cookie2等签名型登录凭证。采集结果被包装成 PlaywrightstorageState兼容的{ name, value, domain, path, expires, httpOnly, secure, sameSite }结构见captureCookies。2. 页面环境采集scripting APIchrome.scripting.executeScript向当前标签页注入一段匿名函数一次性读取location.href、document.referrer、visibilityState、navigator、screen、Intl与两类 storage。所有读取都包裹在try/catch中即使个别属性被站点禁用也不会导致整个采集失败。3. 请求头捕获webRequest APIcaptureHeaders()先注册onBeforeSendHeaders监听器urls: [*://*.goofish.com/*]且限定tabId再通过chrome.scripting注入一段fetch(\${window.location.origin}/__codex_probe?ts${Date.now()})触发一次轻量探测请求从而捕获带extraHeaders的完整请求头2 秒超时兜底setTimeout(() cleanup(null), 2000)监听器只解析一次后即注销不拦截、不修改任何流量。产出接入从 xianyu_state.json 到监控机器人保存的xianyu_state.json是整个监控系统登录态的事实来源后端在多个层次引用它默认路径常量后端在 src/config.py 定义STATE_FILE xianyu_state.jsonsrc/infrastructure/config/settings.py 中也可通过环境变量STATE_FILE覆盖默认文件名启动强校验CLI 入口 spider_v2.py 启动时检查STATE_FILE、任务绑定的account_state_file与state/目录三者全无则直接报错退出未找到登录状态文件。请在 state/ 中添加账号或配置 account_state_fileWeb API 管理路由 src/api/routes/login_state.py 提供POST /api/login-state校验 JSON 合法性后写入xianyu_state.json与DELETE /api/login-state删除文件后台 UI 的登录态页面即通过该接口保存/清除状态src/api/routes/settings.py 也会探测该文件是否存在以展示状态多账号轮换src/rotation.py 的load_state_files(state_dir)可加载state/目录下多个 JSON 作为账号池配合任务配置中的account_state_file实现每任务固定账号或多账号轮换相关校验见 src/domain/models/task.py。重要扩展导出的不仅是 Cookies。在 src/scraper.py 的爬虫会话初始化逻辑中若检测到快照包含env、headers、page、storage等增强字段就会走增强快照分支storage_state只取cookies数组同时调用_build_context_overrides()src/scraper.py用快照中的userAgent、Accept-Language、timeZone、viewport、devicePixelRatio、maxTouchPoints覆盖 Playwright 上下文默认值并用_build_extra_headers()src/scraper.py把白名单外的请求头写入extra_http_headers。换言之你复制的环境指纹越真实Playwright 模拟的会话就越接近真人。若快照不含这些增强字段如旧版导出则退化为直接作为storage_state文件路径使用两种格式均兼容。数据安全与隐私边界扩展的数据处理遵循本地拼装、用户主动触发、不上传原则详见仓库根目录的隐私说明 xianyu-login-state-privacy.html仅在用户点击提取的瞬间读取当前页面的登录 Cookie、请求头与浏览器环境不监听、不常驻采集数据只在内存中拼装为 JSON由用户手动复制到剪贴板不写入任何远程服务器webRequest仅用于读取请求头生成 JSON不拦截或修改任何网络流量storage权限只保存用户同意状态与功能开关不存放敏感数据用户可随时关闭或卸载扩展即停止一切采集行为。常见问题与排查建议根据源码逻辑可预判以下典型问题提示请先打开 goofish.com 页面getActiveGoofishTab()校验当前活动标签页 URL 必须包含goofish.com请先切回闲鱼页面再点扩展图标采集超时/无请求头captureHeaders依赖 2 秒内的探测请求若页面网络异常或扩展权限被浏览器禁用如隐私模式下未开启允许会回退为null空对象可检查扩展详情页的站点访问权限JSON 过大超大 storage 键已被MAX_STORAGE_ENTRY_LENGTH 4096自动丢弃并在meta.droppedStorageKeys中标记若文件仍偏大可手动精简storage字段多数情况下爬虫只需 cookies/env/headers爬虫提示找不到登录态文件确认导出的 JSON 保存位置与STATE_FILE默认仓库根目录xianyu_state.json或任务绑定的account_state_file路径一致多账号场景可放入state/目录参与轮换。小结闲鱼登录态采集扩展是 ai-goofish-monitor真实会话模拟链路的第一环它用最少的浏览器权限cookieswebRequestscripting在一次点击内产出登录态 环境指纹 请求头三位一体的 JSON 快照监控端在 src/scraper.py 中无缝消费这份快照把采集到的真实指纹逐项映射为 Playwright 上下文参数。无论你使用单账号的xianyu_state.json还是通过state/目录构建多账号池这套真实浏览器取证 → 机器人会话复刻的机制都是保障监控任务稳定运行的基础设施。赞分享后端网页爬虫AI 应用前端电商【免费下载链接】ai-goofish-monitor基于 Playwright 和AI实现的闲鱼多任务实时/定时监控与智能分析系统配备了功能完善的后台管理UI。帮助用户从闲鱼海量商品中找到心仪产品。项目地址https://gitcode.com/gh_mirrors/ai/ai-goofish-monitor点击查看免费下载相关推荐ai-goofish-monitor Chrome扩展使用教程提取闲鱼登录状态ai goofish monitor Chrome扩展使用教程提取闲鱼登录状态 ai goofish monitor是一款基于Playwright和AI技术的后端网页爬虫AI 应用前端电商快速掌握闲鱼登录状态提取ai-goofish-monitor完整操作指南快速掌握闲鱼登录状态提取ai goofish monitor完整操作指南 作为闲鱼智能监控系统的关键组件Chrome扩展提供了便捷的登录状态获取功能让用户后端网页爬虫AI 应用前端电商ai-goofish-monitor如何用AI自动化监控闲鱼心仪商品ai goofish monitor如何用AI自动化监控闲鱼心仪商品 在二手交易市场中寻找心仪的商品往往需要花费大量时间和精力但有了ai goofish后端网页爬虫AI 应用前端电商上一篇使用 Rube MCP 在 Codex 中自动化 Hyperise 操作hyperise-automation Skill 实战指南下一篇Dozzle MCP 集成实战指南让 AI 编程助手直接读取 Docker 容器日志与状态创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。