[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-steel-dev--steel-browser":3,"tool-steel-dev--steel-browser":64},[4,17,27,35,43,56],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":16},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,3,"2026-04-05T11:01:52",[13,14,15],"开发框架","图像","Agent","ready",{"id":18,"name":19,"github_repo":20,"description_zh":21,"stars":22,"difficulty_score":23,"last_commit_at":24,"category_tags":25,"status":16},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",138956,2,"2026-04-05T11:33:21",[13,15,26],"语言模型",{"id":28,"name":29,"github_repo":30,"description_zh":31,"stars":32,"difficulty_score":23,"last_commit_at":33,"category_tags":34,"status":16},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",107662,"2026-04-03T11:11:01",[13,14,15],{"id":36,"name":37,"github_repo":38,"description_zh":39,"stars":40,"difficulty_score":23,"last_commit_at":41,"category_tags":42,"status":16},3704,"NextChat","ChatGPTNextWeb\u002FNextChat","NextChat 是一款轻量且极速的 AI 助手，旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性，以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发，NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。\n\n这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言，它也提供了便捷的自托管方案，支持一键部署到 Vercel 或 Zeabur 等平台。\n\nNextChat 的核心亮点在于其广泛的模型兼容性，原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型，让用户在一个界面即可自由切换不同 AI 能力。此外，它还率先支持 MCP（Model Context Protocol）协议，增强了上下文处理能力。针对企业用户，NextChat 提供专业版解决方案，具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能，满足公司对数据隐私和个性化管理的高标准要求。",87618,"2026-04-05T07:20:52",[13,26],{"id":44,"name":45,"github_repo":46,"description_zh":47,"stars":48,"difficulty_score":23,"last_commit_at":49,"category_tags":50,"status":16},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",84991,"2026-04-05T10:45:23",[14,51,52,53,15,54,26,13,55],"数据工具","视频","插件","其他","音频",{"id":57,"name":58,"github_repo":59,"description_zh":60,"stars":61,"difficulty_score":10,"last_commit_at":62,"category_tags":63,"status":16},3128,"ragflow","infiniflow\u002Fragflow","RAGFlow 是一款领先的开源检索增强生成（RAG）引擎，旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体（Agent）能力相结合，不仅支持从各类文档中高效提取知识，还能让模型基于这些知识进行逻辑推理和任务执行。\n\n在大模型应用中，幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构（如表格、图表及混合排版），显著提升了信息检索的准确度，从而有效减少模型“胡编乱造”的现象，确保回答既有据可依又具备时效性。其内置的智能体机制更进一步，使系统不仅能回答问题，还能自主规划步骤解决复杂问题。\n\n这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统，还是致力于探索大模型在垂直领域落地的创新者，都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口，既降低了非算法背景用户的上手门槛，也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目，它正成为连接通用大模型与行业专有知识之间的重要桥梁。",77062,"2026-04-04T04:44:48",[15,14,13,26,54],{"id":65,"github_repo":66,"name":67,"description_en":68,"description_zh":69,"ai_summary_zh":69,"readme_en":70,"readme_zh":71,"quickstart_zh":72,"use_case_zh":73,"hero_image_url":74,"owner_login":75,"owner_name":76,"owner_avatar_url":77,"owner_bio":78,"owner_company":79,"owner_location":79,"owner_email":80,"owner_twitter":81,"owner_website":82,"owner_url":83,"languages":84,"stars":112,"forks":113,"last_commit_at":114,"license":115,"difficulty_score":10,"env_os":116,"env_gpu":117,"env_ram":117,"env_deps":118,"category_tags":126,"github_topics":127,"view_count":23,"oss_zip_url":79,"oss_zip_packed_at":79,"status":16,"created_at":133,"updated_at":134,"faqs":135,"releases":166},2367,"steel-dev\u002Fsteel-browser","steel-browser","🔥 Open Source Browser API for AI Agents & Apps. Steel Browser is a batteries-included browser sandbox that lets you automate the web without worrying about infrastructure.","Steel Browser 是一款专为 AI 智能体和应用打造的开源浏览器 API。它提供了一个“开箱即用”的浏览器沙箱环境，让开发者能够轻松实现网页自动化操作，而无需从零搭建复杂的底层基础设施。\n\n在传统开发中，管理浏览器会话、处理 Cookie、维持状态以及规避反爬虫检测往往耗费大量精力。Steel Browser 完美解决了这些痛点，它在后台自动接管了会话管理、进程生命周期和资源清理等工作。开发者只需关注业务逻辑，即可通过代码灵活控制浏览器行为。\n\n这款工具非常适合需要构建联网 AI 助手、自动化测试脚本或数据采集工具的开发者。其技术亮点在于基于 Puppeteer 和 CDP 提供完整的浏览器控制权，支持无缝对接 Playwright 或 Selenium；内置代理轮换、自定义扩展加载及防指纹检测功能，有效应对反爬机制。此外，它还提供了将网页快速转换为 Markdown、截图或 PDF 的实用 API，并配备可视化的调试界面，极大提升了开发与排错效率。无论是本地运行还是部署到云端，Steel Browser 都能帮助团队更高效地打造强大的 Web 交互应用。","\u003Cbr \u002F>\n\u003Cp align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fsteel.dev\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsteel-dev_steel-browser_readme_b7b70e815dc1.png\" alt=\"Steel Logo\" width=\"100\">\n\u003C\u002Fa>\n\u003C\u002Fp>\n\n\n\n\u003Ch3 align=\"center\">\u003Cb>Steel\u003C\u002Fb>\u003C\u002Fh3>\n\u003Cp align=\"center\">\n    \u003Cb>The open-source browser API for AI agents & apps.\u003C\u002Fb> \u003Cbr \u002F>\n    The best way to build live web agents and browser automation tools.\n\u003C\u002Fp>\n\n\u003Cdiv align=\"center\">\n\n[![Commit Activity](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fcommit-activity\u002Fm\u002Fsteel-dev\u002Fsteel-browser?color=yellow)](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommits\u002Fmain)\n[![License](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Fsteel-dev\u002Fsteel-browser?color=yellow)](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fblob\u002Fmain\u002FLICENSE)\n[![Discord](https:\u002F\u002Fimg.shields.io\u002Fdiscord\u002F1285696350117167226?label=discord)](https:\u002F\u002Fdiscord.gg\u002Fsteel-dev)\n[![Twitter Follow](https:\u002F\u002Fimg.shields.io\u002Ftwitter\u002Ffollow\u002Fsteeldotdev)](https:\u002F\u002Ftwitter.com\u002Fsteeldotdev)\n[![GitHub stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fsteel-dev\u002Fsteel-browser)](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser)\n\n\u003C\u002Fdiv>\n\n\u003Ch4 align=\"center\">\n    \u003Ca href=\"https:\u002F\u002Fapp.steel.dev\u002Fsign-up\" target=\"_blank\">\n      Get Started\n  \u003C\u002Fa>  ·\n    \u003Ca href=\"https:\u002F\u002Fdocs.steel.dev\u002F\" target=\"_blank\">\n      Documentation\n  \u003C\u002Fa>  ·\n  \u003Ca href=\"https:\u002F\u002Fsteel.dev\u002F\" target=\"_blank\">\n      Website\n  \u003C\u002Fa> ·\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-cookbook\" target=\"_blank\">\n      Cookbook\n  \u003C\u002Fa>\n\u003C\u002Fh4>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsteel-dev_steel-browser_readme_2d1e41dde8a2.gif\" alt=\"Steel Demo\" width=\"600\">\n\u003C\u002Fp>\n\n## ✨ Highlights\n\n[Steel.dev](https:\u002F\u002Fsteel.dev) is an open-source browser API that makes it easy to build AI apps and agents that interact with the web. Instead of building automation infrastructure from scratch, you can focus on your AI application while Steel handles the complexity.\n\nUnder the hood, it manages sessions, pages, and browser processes, allowing you to perform complex browsing tasks programmatically without any of the headaches:\n- **Full Browser Control**: Uses Puppeteer and CDP for complete control over Chrome instances -- allowing you to connect using Puppeteer, Playwright, or Selenium.\n- **Session Management**: Maintains browser state, cookies, and local storage across requests\n- **Proxy Support**: Built-in proxy chain management for IP rotation\n- **Extension Support**: Load custom Chrome extensions for enhanced functionality\n- **Debugging Tools**: Built-in request logging and a UI to view\u002Fdebug sessions with\n- **Anti-Detection**: Includes stealth plugins and fingerprint management\n- **Resource Management**: Automatic cleanup and browser lifecycle management\n- **Browser Tools**: Exposes APIs to quick convert pages to markdown, readability, screenshots, or PDFs.\n\n\nFor detailed API documentation and examples, check out our [API reference](https:\u002F\u002Fdocs.steel.dev\u002Fapi-reference) or explore the Swagger UI directly at `http:\u002F\u002F0.0.0.0:3000\u002Fdocumentation`.\n\n> Steel is in public beta and evolving every day. Your suggestions, ideas, and reported bugs help us immensely. Do not hesitate to join in the conversation on [Discord](https:\u002F\u002Fdiscord.gg\u002Fsteel-dev) or raise a GitHub issue. We read everything, respond to most, and love you.\n\nIf you love open-source, AI, and dev tools, [we're hiring across the stack](https:\u002F\u002Fjobs.ashbyhq.com\u002Fsteel)!\n\n### Make sure to give us a star ⭐\n\n\u003Cimg width=\"200\" alt=\"Start us on Github!\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsteel-dev_steel-browser_readme_61da8ed7e8a0.png\">\n\n## 🛠️ Getting Started\nThe easiest way to get started with Steel is by creating a [Steel Cloud](https:\u002F\u002Fapp.steel.dev) account. Otherwise, you can deploy this Steel browser instance to a cloud provider or run it locally.\n\n## ⚡ Quick Deploy\nIf you're looking to deploy to a cloud provider, we've got you covered.\n\n| Deployment methods | Link |\n| -------------------- | ----- |\n| Pre-built Docker Image (combined API + UI) | [![Deploy with Github Container Registry](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FGHCR-478CFF?style=for-the-badge&labelColor=478CFF&logo=github&logoColor=white)](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpkgs\u002Fcontainer\u002Fsteel-browser) |\n| 1-click deploy to Railway | [![Deploy on Railway](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FRailway-B039CB?style=for-the-badge&labelColor=B039CB&logo=railway&logoColor=white)](https:\u002F\u002Frailway.app\u002Fdeploy\u002Fsteelbrowser) |\n| 1-click deploy to Render | [![Deploy to Render](https:\u002F\u002Frender.com\u002Fimages\u002Fdeploy-to-render-button.svg)](https:\u002F\u002Frender.com\u002Fdeploy) |\n\n\n## 💻 Running Locally\n\n### Docker\n\nThe simplest way to deploy\u002Frun a Steel browser instance locally is to run the pre-built Docker image:\n\n```bash\n# Pull and run the Docker image\ndocker run -p 3000:3000 -p 9223:9223 ghcr.io\u002Fsteel-dev\u002Fsteel-browser\n```\n\nThis will start the Steel browser server on port 3000 (http:\u002F\u002Flocalhost:3000) and the UI at http:\u002F\u002Flocalhost:3000\u002Fui. The 9223 port is used for the console debugger.\n\nYou can now create sessions, scrape pages, take screenshots, and more. Jump to the [Usage](#usage) section for some quick examples on how you can do that.\n\nAlternatively, you can run the API and UI separately with docker compose:\n\n```bash\ndocker compose up\n```\n\nFor Mac Silicon users, you will need to pass this env flag to the Docker compose command to run the images on the correct platform:\n```bash\nDOCKER_DEFAULT_PLATFORM=linux\u002Farm64 docker compose up\n```\n\n## Quickstart for Contributors\nWhen developing locally, you will need to run the [`docker-compose.dev.yml`](.\u002Fdocker-compose.dev.yml) file instead of the default [`docker-compose.yml`](.\u002Fdocker-compose.yml) file so that your local changes are reflected. Doing this will build the Docker images from the [`api`](.\u002Fapi) and [`ui`](.\u002Fui) directories and run the server and UI on port 3000 and 5173 respectively.\n\n```bash\ndocker compose -f docker-compose.dev.yml up\n```\n\nYou will also need to run it with `--build` to ensure the Docker images are re-built every time you make changes:\n\n```bash\ndocker compose -f docker-compose.dev.yml up --build\n```\n\nIf you run on a custom host, create a `.env` file (see `docs\u002FDEVELOPMENT_SETUP.md` for variables) or modify the environment variables used by `docker-compose.dev.yml` to use your host.\n\n### Node.js\nAlternatively, if you have Node.js and Chrome installed, you can run both the server and the UI directly:\n\n```bash\nnpm install\nnpm run dev\n```\n\nThis will also start the Steel server on port 3000 and the UI on port 5173.\n\nMake sure you have the Chrome executable installed and in one of these paths:\n\n- **Linux**:\n  `\u002Fusr\u002Fbin\u002Fgoogle-chrome`\n\n- **MacOS**:\n  `\u002FApplications\u002FGoogle Chrome.app\u002FContents\u002FMacOS\u002FGoogle Chrome`\n\n- **Windows**:\n  - `C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe` OR\n  - `C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe`\n\n#### Custom Chrome Executable\n\nIf you have a custom Chrome executable or a different path, you can set the `CHROME_EXECUTABLE_PATH` environment variable to the path of your Chrome executable:\n\n```bash\nexport CHROME_EXECUTABLE_PATH=\u002Fpath\u002Fto\u002Fyour\u002Fchrome\nnpm run dev\n```\n\nFor more details on where this is checked look at [`api\u002Fsrc\u002Futils\u002Fbrowser.ts`](.\u002Fapi\u002Fsrc\u002Futils\u002Fbrowser.ts).\n\n## 🏄🏽‍♂️ Usage\n> If you're looking for quick examples on how to use Steel, check out the [Cookbook](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-cookbook).\n>\n> Alternatively you can play with the [REPL package](.\u002Frepl\u002FREADME.md) too `cd repl` and `npm run start`\n\nThere are two main ways to interact with the Steel browser API:\n1. [Using Sessions](#sessions)\n2. [Using the Quick Actions Endpoints](#quick-actions-api)\n\nIn these examples, we assume your custom Steel API endpoint is `http:\u002F\u002Flocalhost:3000`.\n\nThe full REST OpenAPI documentation can be found [on our site](https:\u002F\u002Fdocs.steel.dev\u002Fapi-reference) and on your local Steel instance at `http:\u002F\u002Flocalhost:3000\u002Fdocumentation`.\n\n#### Using the SDKs\nIf you prefer to use the our Python and Node SDKs, you can install the `steel-sdk` package for Node or Python.\n\nThese SDKs are built on top of the REST API and provide a more convenient way to interact with the Steel browser API. They are fully typed, and are compatible with both Steel Cloud and self-hosted Steel instances (changeable using the `baseURL` option on Node and `base_url` on Python).\n\nFor more details on installing and using the SDKs, please see the [Node SDK Reference](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-node\u002Fblob\u002Fmain\u002Fapi.md) and the [Python SDK Reference](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-python\u002Fblob\u002Fmain\u002Fapi.md).\n\n\n### Sessions\nThe `\u002Fsessions` endpoint lets you relaunch the browser with custom options or extensions (e.g. with a custom proxy) and also reset the browser state. Perfect for complex, stateful workflows that need fine-grained control.\n\nOnce you have a session, you can use the session ID or the root URL to interact with the browser. To do this, you will need to use Puppeteer or Playwright. You can find some examples of how to use Puppeteer and Playwright with Steel in the docs below:\n* [Puppeteer Integration](https:\u002F\u002Fdocs.steel.dev\u002Foverview\u002Fguides\u002Fpuppeteer)\n* [Playwright with Node](https:\u002F\u002Fdocs.steel.dev\u002Foverview\u002Fguides\u002Fplaywright-node)\n* [Playwright with Python](https:\u002F\u002Fdocs.steel.dev\u002Foverview\u002Fguides\u002Fplaywright-python)\n\n\u003Cdetails open>\n\u003Csummary>\u003Cb>Creating a Session using the Node SDK\u003C\u002Fb>\u003C\u002Fsummary>\n\u003Cbr>\n\n```typescript\nimport Steel from 'steel-sdk';\n\nconst client = new Steel({\n  baseURL: \"http:\u002F\u002Flocalhost:3000\", \u002F\u002F Custom API Base URL override\n});\n\n(async () => {\n  try {\n    \u002F\u002F Create a new browser session with current API fields\n    const session = await client.sessions.create({\n      blockAds: true,\n      proxyUrl: \"user:pass@host:port\", \u002F\u002F optional\n      dimensions: { width: 1280, height: 800 }, \u002F\u002F optional\n    });\n    console.log(\"Created session with ID:\", session.id);\n  } catch (error) {\n    console.error(\"Error creating session:\", error);\n  }\n})();\n````\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>Creating a Session using the Python SDK\u003C\u002Fb>\u003C\u002Fsummary>\n\u003Cbr>\n\n````python\nimport os\nfrom steel import Steel\n\nclient = Steel(\n    base_url=\"http:\u002F\u002Flocalhost:3000\",  # Custom API Base URL override\n)\n\ntry:\n    # Create a new browser session with custom options\n    session = client.sessions.create(\n        block_ads=True,\n        proxy_url=\"user:pass@host:port\",  # optional\n        dimensions={\"width\": 1280, \"height\": 800},  # optional\n    )\n    print(\"Created session with ID:\", session.id)\nexcept Exception as e:\n    print(\"Error creating session:\", e)\n````\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>Creating a Session using Curl\u003C\u002Fb>\u003C\u002Fsummary>\n\u003Cbr>\n\n```bash\n# Launch a new browser session\ncurl -X POST http:\u002F\u002Flocalhost:3000\u002Fv1\u002Fsessions \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"proxyUrl\": \"user:pass@host:port\",\n    \"blockAds\": true,\n    \"dimensions\": { \"width\": 1280, \"height\": 800 }\n  }'\n```\n\u003C\u002Fdetails>\n\n\n#### Selenium Sessions\n>**Note:** This integration does not support all the features of the CDP-based browser sessions API.\n\nFor teams with existing Selenium workflows, the Steel browser provides a drop-in replacement that adds enhanced features while maintaining compatibility. You can simply use the `isSelenium` option to create a Selenium session:\n\n```typescript\n\u002F\u002F Using the Node SDK\nconst session = await client.sessions.create({ isSelenium: true });\n```\n```python\n# Using the Python SDK\nsession = client.sessions.create(is_selenium=True)\n```\n\u003Cdetails>\n\u003Csummary>\u003Cb>Using Curl\u003C\u002Fb>\u003C\u002Fsummary>\n\u003Cbr>\n\n```bash\n# Launch a Selenium session\ncurl -X POST http:\u002F\u002Flocalhost:3000\u002Fv1\u002Fsessions \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"isSelenium\": true\n  }'\n```\n\u003C\u002Fdetails>\n\u003Cbr>\n\nThe Selenium API is fully compatible with Selenium's WebDriver protocol, so you can use any existing Selenium clients to connect to the Steel browser. **For more details on using Selenium with Steel, refer to the [Selenium Docs](https:\u002F\u002Fdocs.steel.dev\u002Foverview\u002Fguides\u002Fselenium).**\n\n### Quick Actions API\nThe `\u002Fscrape`, `\u002Fscreenshot`, and `\u002Fpdf` endpoints let you quickly extract clean, well-formatted data from any webpage using the running Steel server. Ideal for simple, read-only, on-demand jobs:\n\n\u003Cdetails open>\n\u003Csummary>\u003Cb>Scrape a Web Page\u003C\u002Fb>\u003C\u002Fsummary>\n\u003Cbr>\n\nExtract the HTML content of a web page.\n\n```bash\n# Example using the Actions API\ncurl -X POST http:\u002F\u002F0.0.0.0:3000\u002Fv1\u002Fscrape \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"url\": \"https:\u002F\u002Fexample.com\",\n    \"delay\": 1000\n  }'\n```\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>Take a Screenshot\u003C\u002Fb>\u003C\u002Fsummary>\n\u003Cbr>\n\nTake a screenshot of a web page.\n```bash\n# Example using the Actions API\ncurl -X POST http:\u002F\u002F0.0.0.0:3000\u002Fv1\u002Fscreenshot \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"url\": \"https:\u002F\u002Fexample.com\",\n    \"fullPage\": true\n  }' --output screenshot.png\n```\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>Download a PDF\u003C\u002Fb>\u003C\u002Fsummary>\n\u003Cbr>\n\nDownload a PDF of a web page.\n```bash\n# Example using the Actions API\ncurl -X POST http:\u002F\u002F0.0.0.0:3000\u002Fv1\u002Fpdf \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"url\": \"https:\u002F\u002Fexample.com\"\n  }' --output output.pdf\n```\n\u003C\u002Fdetails>\n\n## Get involved\nSteel browser is an open-source project, and we welcome contributions!\n- Questions\u002Fideas\u002Ffeedback? Come hangout on [Discord](https:\u002F\u002Fdiscord.gg\u002Fsteel-dev)\n- Found a bug? Open an issue on [GitHub](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fissues)\n\n## License\n[Apache 2.0](.\u002FLICENSE)\n\n---\n\nMade with ❤️ by the Steel team.\n","\u003Cbr \u002F>\n\u003Cp align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fsteel.dev\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsteel-dev_steel-browser_readme_b7b70e815dc1.png\" alt=\"Steel Logo\" width=\"100\">\n\u003C\u002Fa>\n\u003C\u002Fp>\n\n\n\n\u003Ch3 align=\"center\">\u003Cb>Steel\u003C\u002Fb>\u003C\u002Fh3>\n\u003Cp align=\"center\">\n    \u003Cb>面向AI智能体与应用的开源浏览器API。\u003C\u002Fb> 构建实时网络智能体和浏览器自动化工具的最佳方式。\n\u003C\u002Fp>\n\n\u003Cdiv align=\"center\">\n\n[![提交活跃度](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fcommit-activity\u002Fm\u002Fsteel-dev\u002Fsteel-browser?color=yellow)](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommits\u002Fmain)\n[![许可证](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Fsteel-dev\u002Fsteel-browser?color=yellow)](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fblob\u002Fmain\u002FLICENSE)\n[![Discord](https:\u002F\u002Fimg.shields.io\u002Fdiscord\u002F1285696350117167226?label=discord)](https:\u002F\u002Fdiscord.gg\u002Fsteel-dev)\n[![Twitter关注](https:\u002F\u002Fimg.shields.io\u002Ftwitter\u002Ffollow\u002Fsteeldotdev)](https:\u002F\u002Ftwitter.com\u002Fsteeldotdev)\n[![GitHub星标](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fsteel-dev\u002Fsteel-browser)](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser)\n\n\u003C\u002Fdiv>\n\n\u003Ch4 align=\"center\">\n    \u003Ca href=\"https:\u002F\u002Fapp.steel.dev\u002Fsign-up\" target=\"_blank\">\n      开始使用\n  \u003C\u002Fa>  ·\n    \u003Ca href=\"https:\u002F\u002Fdocs.steel.dev\u002F\" target=\"_blank\">\n      文档\n  \u003C\u002Fa>  ·\n  \u003Ca href=\"https:\u002F\u002Fsteel.dev\u002F\" target=\"_blank\">\n      官网\n  \u003C\u002Fa> ·\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-cookbook\" target=\"_blank\">\n      食谱\n  \u003C\u002Fa>\n\u003C\u002Fh4>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsteel-dev_steel-browser_readme_2d1e41dde8a2.gif\" alt=\"Steel演示\" width=\"600\">\n\u003C\u002Fp>\n\n## ✨ 亮点\n\n[Steel.dev](https:\u002F\u002Fsteel.dev) 是一个开源浏览器API，让构建与网页交互的AI应用和智能体变得简单。无需从头开始搭建自动化基础设施，你可以专注于自己的AI应用，而复杂的细节则由Steel来处理。\n\n在底层，它管理会话、页面和浏览器进程，使你能够以编程方式执行复杂的浏览任务，而无需面对各种麻烦：\n- **完全浏览器控制**：使用Puppeteer和CDP对Chrome实例进行全面控制——支持通过Puppeteer、Playwright或Selenium连接。\n- **会话管理**：跨请求维护浏览器状态、Cookie和本地存储。\n- **代理支持**：内置代理链管理，便于IP轮换。\n- **扩展支持**：可加载自定义Chrome扩展，增强功能。\n- **调试工具**：内置请求日志记录，并提供UI用于查看和调试会话。\n- **反检测**：包含隐身插件和指纹管理功能。\n- **资源管理**：自动清理和浏览器生命周期管理。\n- **浏览器工具**：提供API，可快速将页面转换为Markdown、可读性文本、截图或PDF。\n\n\n有关详细的API文档和示例，请参阅我们的[API参考](https:\u002F\u002Fdocs.steel.dev\u002Fapi-reference)，或直接访问`http:\u002F\u002F0.0.0.0:3000\u002Fdocumentation`的Swagger UI。\n\n> Steel目前处于公开测试阶段，每天都在不断演进。你的建议、想法和报告的Bug对我们帮助极大。请随时加入[Discord](https:\u002F\u002Fdiscord.gg\u002Fsteel-dev)的讨论，或在GitHub上提交问题。我们会阅读每一条反馈，回复大多数问题，非常感谢！ \n\n如果你热爱开源、AI和开发工具，我们正在全栈招聘！[点击了解详情](https:\u002F\u002Fjobs.ashbyhq.com\u002Fsteel)！\n\n### 别忘了给我们点个星⭐\n\n\u003Cimg width=\"200\" alt=\"在Github上给Steel标个星吧！\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsteel-dev_steel-browser_readme_61da8ed7e8a0.png\">\n\n## 🛠️ 入门指南\n开始使用Steel最简单的方式是创建一个[Steel Cloud](https:\u002F\u002Fapp.steel.dev)账户。当然，你也可以将Steel浏览器实例部署到云服务商，或者在本地运行。\n\n## ⚡ 快速部署\n如果你想部署到云服务商，我们已经为你准备好了方案。\n\n| 部署方式 | 链接 |\n| -------------------- | ----- |\n| 预构建Docker镜像（API+UI合一） | [![使用Github容器注册表部署](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FGHCR-478CFF?style=for-the-badge&labelColor=478CFF&logo=github&logoColor=white)](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpkgs\u002Fcontainer\u002Fsteel-browser) |\n| 一键部署至Railway | [![在Railway上部署](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FRailway-B039CB?style=for-the-badge&labelColor=B039CB&logo=railway&logoColor=white)](https:\u002F\u002Frailway.app\u002Fdeploy\u002Fsteelbrowser) |\n| 一键部署至Render | [![部署到Render](https:\u002F\u002Frender.com\u002Fimages\u002Fdeploy-to-render-button.svg)](https:\u002F\u002Frender.com\u002Fdeploy) |\n\n\n## 💻 本地运行\n\n### Docker\n\n在本地部署或运行Steel浏览器实例的最简单方法是使用预构建的Docker镜像：\n\n```bash\n# 拉取并运行Docker镜像\ndocker run -p 3000:3000 -p 9223:9223 ghcr.io\u002Fsteel-dev\u002Fsteel-browser\n```\n\n这将在端口3000启动Steel浏览器服务器（http:\u002F\u002Flocalhost:3000），并在http:\u002F\u002Flocalhost:3000\u002Fui启动UI界面。端口9223用于控制台调试器。\n\n现在你可以创建会话、抓取页面、截屏等操作。跳转到[使用说明](#usage)部分，获取一些快速示例，了解如何操作。\n\n此外，你也可以使用Docker Compose分别运行API和UI：\n\n```bash\ndocker compose up\n```\n\n对于使用M1\u002FM2芯片的Mac用户，需要在Docker Compose命令中添加以下环境变量，以确保镜像在正确的平台上运行：\n```bash\nDOCKER_DEFAULT_PLATFORM=linux\u002Farm64 docker compose up\n```\n\n## 贡献者快速入门\n在本地开发时，你需要运行[`docker-compose.dev.yml`](.\u002Fdocker-compose.dev.yml)文件，而不是默认的[`docker-compose.yml`](.\u002Fdocker-compose.yml)，这样才能反映你的本地更改。这样做会从`[api](.\u002Fapi)`和`[ui](.\u002Fui)`目录构建Docker镜像，并分别在端口3000和5173运行服务器和UI。\n\n```bash\ndocker compose -f docker-compose.dev.yml up\n```\n\n同时，每次修改代码后都需要加上`--build`参数，以确保Docker镜像被重新构建：\n\n```bash\ndocker compose -f docker-compose.dev.yml up --build\n```\n\n如果你使用自定义主机，可以创建一个`.env`文件（详见`docs\u002FDEVELOPMENT_SETUP.md`中的变量说明），或者修改`docker-compose.dev.yml`中使用的环境变量，以适配你的主机。\n\n### Node.js\n或者，如果你已经安装了 Node.js 和 Chrome 浏览器，可以直接运行服务器和 UI：\n\n```bash\nnpm install\nnpm run dev\n```\n\n这将会在端口 3000 上启动 Steel 服务器，在端口 5173 上启动 UI。\n\n请确保你已安装 Chrome 可执行文件，并且它位于以下路径之一：\n\n- **Linux**:\n  `\u002Fusr\u002Fbin\u002Fgoogle-chrome`\n\n- **MacOS**:\n  `\u002FApplications\u002FGoogle Chrome.app\u002FContents\u002FMacOS\u002FGoogle Chrome`\n\n- **Windows**:\n  - `C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe` 或\n  - `C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe`\n\n#### 自定义 Chrome 可执行文件\n\n如果你使用的是自定义的 Chrome 可执行文件或不同的路径，可以将 `CHROME_EXECUTABLE_PATH` 环境变量设置为你 Chrome 可执行文件的路径：\n\n```bash\nexport CHROME_EXECUTABLE_PATH=\u002Fpath\u002Fto\u002Fyour\u002Fchrome\nnpm run dev\n```\n\n有关具体检查位置的详细信息，请参阅 [`api\u002Fsrc\u002Futils\u002Fbrowser.ts`](.\u002Fapi\u002Fsrc\u002Futils\u002Fbrowser.ts)。\n\n## 🏄🏽‍♂️ 使用方法\n> 如果你想快速了解如何使用 Steel，可以查看 [Cookbook](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-cookbook)。\n>\n> 或者，你也可以尝试使用 [REPL 包](.\u002Frepl\u002FREADME.md)，进入 `cd repl` 并运行 `npm run start`。\n\n与 Steel 浏览器 API 进行交互主要有两种方式：\n1. [使用会话](#sessions)\n2. [使用快速操作 API](#quick-actions-api)\n\n在这些示例中，我们假设你的自定义 Steel API 端点是 `http:\u002F\u002Flocalhost:3000`。\n\n完整的 REST OpenAPI 文档可以在我们的网站上找到：[https:\u002F\u002Fdocs.steel.dev\u002Fapi-reference](https:\u002F\u002Fdocs.steel.dev\u002Fapi-reference)，也可以在本地 Steel 实例上访问：`http:\u002F\u002Flocalhost:3000\u002Fdocumentation`。\n\n#### 使用 SDK\n如果你更倾向于使用我们的 Python 和 Node.js SDK，可以安装适用于 Node 或 Python 的 `steel-sdk` 包。\n\n这些 SDK 基于 REST API 构建，提供了更便捷的方式来与 Steel 浏览器 API 交互。它们具有完全的类型支持，并且兼容 Steel Cloud 和自托管的 Steel 实例（可通过 Node 中的 `baseURL` 选项或 Python 中的 `base_url` 来更改）。\n\n有关安装和使用 SDK 的更多详细信息，请参阅 [Node SDK 参考文档](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-node\u002Fblob\u002Fmain\u002Fapi.md) 和 [Python SDK 参考文档](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-python\u002Fblob\u002Fmain\u002Fapi.md)。\n\n\n### 会话\n`\u002Fsessions` 端点允许你使用自定义选项或扩展程序重新启动浏览器（例如使用自定义代理），并重置浏览器状态。这对于需要精细控制的复杂、有状态的工作流来说非常理想。\n\n一旦创建了会话，你可以使用会话 ID 或根 URL 与浏览器进行交互。为此，你需要使用 Puppeteer 或 Playwright。你可以在下面的文档中找到一些使用 Puppeteer 和 Playwright 与 Steel 集成的示例：\n* [Puppeteer 集成](https:\u002F\u002Fdocs.steel.dev\u002Foverview\u002Fguides\u002Fpuppeteer)\n* [Playwright 与 Node](https:\u002F\u002Fdocs.steel.dev\u002Foverview\u002Fguides\u002Fplaywright-node)\n* [Playwright 与 Python](https:\u002F\u002Fdocs.steel.dev\u002Foverview\u002Fguides\u002Fplaywright-python)\n\n\u003Cdetails open>\n\u003Csummary>\u003Cb>使用 Node SDK 创建会话\u003C\u002Fb>\u003C\u002Fsummary>\n\u003Cbr>\n\n```typescript\nimport Steel from 'steel-sdk';\n\nconst client = new Steel({\n  baseURL: \"http:\u002F\u002Flocalhost:3000\", \u002F\u002F 自定义 API 基础 URL 覆盖\n});\n\n(async () => {\n  try {\n    \u002F\u002F 使用当前 API 字段创建一个新的浏览器会话\n    const session = await client.sessions.create({\n      blockAds: true,\n      proxyUrl: \"user:pass@host:port\", \u002F\u002F 可选\n      dimensions: { width: 1280, height: 800 }, \u002F\u002F 可选\n    });\n    console.log(\"创建的会话 ID:\", session.id);\n  } catch (error) {\n    console.error(\"创建会话时出错:\", error);\n  }\n})();\n````\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>使用 Python SDK 创建会话\u003C\u002Fb>\u003C\u002Fsummary>\n\u003Cbr>\n\n````python\nimport os\nfrom steel import Steel\n\nclient = Steel(\n    base_url=\"http:\u002F\u002Flocalhost:3000\",  # 自定义 API 基础 URL 覆盖\n)\n\ntry:\n    # 使用自定义选项创建一个新的浏览器会话\n    session = client.sessions.create(\n        block_ads=True,\n        proxy_url=\"user:pass@host:port\",  # 可选\n        dimensions={\"width\": 1280, \"height\": 800},  # 可选\n    )\n    print(\"创建的会话 ID:\", session.id)\nexcept Exception as e:\n    print(\"创建会话时出错:\", e)\n````\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>使用 Curl 创建会话\u003C\u002Fb>\u003C\u002Fsummary>\n\u003Cbr>\n\n```bash\n# 启动一个新的浏览器会话\ncurl -X POST http:\u002F\u002Flocalhost:3000\u002Fv1\u002Fsessions \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"proxyUrl\": \"user:pass@host:port\",\n    \"blockAds\": true,\n    \"dimensions\": { \"width\": 1280, \"height\": 800 }\n  }'\n```\n\u003C\u002Fdetails>\n\n\n#### Selenium 会话\n>**注意:** 此集成并不支持基于 CDP 的浏览器会话 API 的所有功能。\n\n对于已有 Selenium 工作流的团队，Steel 浏览器提供了一个即插即用的替代方案，在保持兼容性的同时增加了增强功能。你只需使用 `isSelenium` 选项即可创建一个 Selenium 会话：\n\n```typescript\n\u002F\u002F 使用 Node SDK\nconst session = await client.sessions.create({ isSelenium: true });\n```\n```python\n\u002F\u002F 使用 Python SDK\nsession = client.sessions.create(is_selenium=True)\n```\n\u003Cdetails>\n\u003Csummary>\u003Cb>使用 Curl\u003C\u002Fb>\u003C\u002Fsummary>\n\u003Cbr>\n\n```bash\n# 启动一个 Selenium 会话\ncurl -X POST http:\u002F\u002Flocalhost:3000\u002Fv1\u002Fsessions \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"isSelenium\": true\n  }'\n```\n\u003C\u002Fdetails>\n\u003Cbr>\n\nSelenium API 完全兼容 Selenium 的 WebDriver 协议，因此你可以使用任何现有的 Selenium 客户端连接到 Steel 浏览器。**有关使用 Selenium 与 Steel 的更多信息，请参阅 [Selenium 文档](https:\u002F\u002Fdocs.steel.dev\u002Foverview\u002Fguides\u002Fselenium)。**\n\n### 快速操作 API\n`\u002Fscrape`、`\u002Fscreenshot` 和 `\u002Fpdf` 端点允许你使用正在运行的 Steel 服务器快速从任何网页中提取干净、格式良好的数据。非常适合简单的只读、按需任务：\n\n\u003Cdetails open>\n\u003Csummary>\u003Cb>抓取网页内容\u003C\u002Fb>\u003C\u002Fsummary>\n\u003Cbr>\n\n提取网页的 HTML 内容。\n\n```bash\n# 使用 Actions API 的示例\ncurl -X POST http:\u002F\u002F0.0.0.0:3000\u002Fv1\u002Fscrape \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"url\": \"https:\u002F\u002Fexample.com\",\n    \"delay\": 1000\n  }'\n```\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>截取网页截图\u003C\u002Fb>\u003C\u002Fsummary>\n\u003Cbr>\n\n截取网页的屏幕截图。\n```bash\n# 使用 Actions API 的示例\ncurl -X POST http:\u002F\u002F0.0.0.0:3000\u002Fv1\u002Fscreenshot \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"url\": \"https:\u002F\u002Fexample.com\",\n    \"fullPage\": true\n  }' --output screenshot.png\n```\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>下载网页 PDF\u003C\u002Fb>\u003C\u002Fsummary>\n\u003Cbr>\n\n下载网页的 PDF 文件。\n```bash\n# 使用 Actions API 的示例\ncurl -X POST http:\u002F\u002F0.0.0.0:3000\u002Fv1\u002Fpdf \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"url\": \"https:\u002F\u002Fexample.com\"\n  }' --output output.pdf\n```\n\u003C\u002Fdetails>\n\n## 参与进来\nSteel 浏览器是一个开源项目，我们欢迎各方贡献！\n- 有问题、想法或反馈？欢迎加入我们的 [Discord](https:\u002F\u002Fdiscord.gg\u002Fsteel-dev) 社区交流。\n- 发现了 bug？请在 [GitHub](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fissues) 上提交 issue。\n\n## 许可证\n[Apache 2.0](.\u002FLICENSE)\n\n---\n\n由 Steel 团队用心打造。","# Steel Browser 快速上手指南\n\nSteel 是一个开源浏览器 API，专为构建 AI 智能体（Agents）和自动化应用设计。它基于 Puppeteer 和 CDP，提供完整的浏览器控制、会话管理、反检测及代理支持，让你无需从零搭建基础设施即可轻松操作网页。\n\n## 环境准备\n\n### 系统要求\n- **操作系统**: Linux, macOS (包括 Silicon 芯片), Windows\n- **运行时**: Node.js (推荐 v18+) 或 Docker\n- **浏览器**: Google Chrome (本地运行模式必需)\n\n### 前置依赖\n若选择**本地 Node.js 模式**运行，需确保已安装 Chrome 并位于以下默认路径之一：\n- **Linux**: `\u002Fusr\u002Fbin\u002Fgoogle-chrome`\n- **macOS**: `\u002FApplications\u002FGoogle Chrome.app\u002FContents\u002FMacOS\u002FGoogle Chrome`\n- **Windows**: \n  - `C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe`\n  - `C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe`\n\n> **提示**: 若 Chrome 安装在自定义路径，需设置环境变量 `CHROME_EXECUTABLE_PATH`。\n\n## 安装步骤\n\n推荐使用 **Docker** 方式部署，最为简便且环境隔离性好。\n\n### 方法一：使用 Docker（推荐）\n\n拉取并运行预构建的镜像，同时启动 API 服务（端口 3000）和调试 UI：\n\n```bash\ndocker run -p 3000:3000 -p 9223:9223 ghcr.io\u002Fsteel-dev\u002Fsteel-browser\n```\n\n*注：Mac Silicon (M1\u002FM2\u002FM3) 用户若使用 `docker compose`，需指定平台：*\n```bash\nDOCKER_DEFAULT_PLATFORM=linux\u002Farm64 docker compose up\n```\n\n启动后：\n- API 地址：`http:\u002F\u002Flocalhost:3000`\n- 管理 UI 地址：`http:\u002F\u002Flocalhost:3000\u002Fui`\n- 调试器端口：`9223`\n\n### 方法二：本地 Node.js 开发模式\n\n如果你希望直接运行源码或进行二次开发：\n\n```bash\n# 克隆项目并安装依赖\ngit clone https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser.git\ncd steel-browser\nnpm install\n\n# 启动开发服务器 (API + UI)\nnpm run dev\n```\n\n若需指定自定义 Chrome 路径：\n```bash\nexport CHROME_EXECUTABLE_PATH=\u002Fpath\u002Fto\u002Fyour\u002Fchrome\nnpm run dev\n```\n\n## 基本使用\n\nSteel 主要通过 REST API 或官方 SDK (Node.js\u002FPython) 进行交互。以下是两种最常用的场景。\n\n### 1. 创建浏览器会话 (Sessions)\n适用于需要保持状态、执行复杂交互或使用插件的场景。支持通过 Puppeteer 或 Playwright 连接。\n\n**使用 Node.js SDK:**\n\n```typescript\nimport Steel from 'steel-sdk';\n\nconst client = new Steel({\n  baseURL: \"http:\u002F\u002Flocalhost:3000\", \u002F\u002F 本地部署地址\n});\n\n(async () => {\n  try {\n    \u002F\u002F 创建新会话，开启广告拦截并设置窗口尺寸\n    const session = await client.sessions.create({\n      blockAds: true,\n      dimensions: { width: 1280, height: 800 },\n      \u002F\u002F proxyUrl: \"user:pass@host:port\", \u002F\u002F 可选：配置代理\n    });\n    console.log(\"会话创建成功，ID:\", session.id);\n    \n    \u002F\u002F 获取连接字符串后可用于 Puppeteer\u002FPlaywright 连接\n    \u002F\u002F console.log(session.connectUrl); \n  } catch (error) {\n    console.error(\"创建会话失败:\", error);\n  }\n})();\n```\n\n**使用 Python SDK:**\n\n```python\nfrom steel import Steel\n\nclient = Steel(\n    base_url=\"http:\u002F\u002Flocalhost:3000\",\n)\n\ntry:\n    session = client.sessions.create(\n        block_ads=True,\n        dimensions={\"width\": 1280, \"height\": 800},\n    )\n    print(\"会话创建成功，ID:\", session.id)\nexcept Exception as e:\n    print(\"创建会话失败:\", e)\n```\n\n### 2. 快速动作 (Quick Actions)\n适用于简单的单次任务，如抓取页面内容、截图或生成 PDF，无需手动管理会话生命周期。\n\n**使用 Curl 抓取网页内容:**\n\n```bash\ncurl -X POST http:\u002F\u002Flocalhost:3000\u002Fv1\u002Fscrape \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"url\": \"https:\u002F\u002Fexample.com\",\n    \"waitForSelector\": null,\n    \"format\": \"markdown\"\n  }'\n```\n\n**使用 Curl 截取网页截图:**\n\n```bash\ncurl -X POST http:\u002F\u002Flocalhost:3000\u002Fv1\u002Fscreenshot \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"url\": \"https:\u002F\u002Fexample.com\",\n    \"fullPage\": true\n  }' --output screenshot.png\n```\n\n### 3. 连接 Selenium (可选)\n如果你已有 Selenium 工作流，可通过设置 `isSelenium: true` 创建兼容会话：\n\n```typescript\n\u002F\u002F Node.js\nconst session = await client.sessions.create({ isSelenium: true });\n```\n\n创建后，使用标准的 Selenium WebDriver 连接到返回的 endpoint 即可。","某电商数据团队需要构建一个 AI 代理，每日自动监控竞争对手在复杂动态网页上的商品价格与库存变动，并生成结构化报告。\n\n### 没有 steel-browser 时\n- **基础设施繁琐**：开发人员需手动搭建和维护 Selenium 或 Puppeteer 集群，耗费大量精力配置 Docker、管理浏览器进程及处理崩溃重启。\n- **反爬对抗困难**：面对目标网站的指纹检测和无头浏览器识别，需自行集成复杂的隐身插件和指纹伪造方案，否则请求极易被封锁。\n- **状态保持棘手**：难以在多次抓取任务间维持登录态、Cookie 和本地存储，导致每次运行都需重新模拟登录，触发风控验证。\n- **调试成本高昂**：缺乏可视化的会话监控工具，当自动化脚本失败时，只能依靠枯燥的日志排查，无法直观复现浏览器现场。\n- **资源清理隐患**：忘记关闭浏览器实例或页面标签会导致服务器内存泄漏，需编写额外的守护脚本来强制回收资源。\n\n### 使用 steel-browser 后\n- **开箱即用**：直接调用 API 即可获取完整的浏览器沙箱环境，无需关心底层基础设施，团队可专注于编写核心业务逻辑。\n- **内置隐身能力**：利用自带的 stealth 插件和指纹管理功能，AI 代理能自然模拟真实用户行为，有效绕过主流反爬机制。\n- **会话持久化**：通过 Session Management 自动保留 Cookies 和 LocalStorage，轻松实现跨请求的登录态维持，稳定抓取需授权的数据。\n- **可视化调试**：借助内置的 UI 界面实时查看浏览器操作录像和请求日志，快速定位脚本错误，大幅缩短开发周期。\n- **自动生命周期管理**：系统自动处理浏览器的创建、清理和资源回收，彻底杜绝内存泄漏风险，确保服务长期稳定运行。\n\nsteel-browser 将复杂的浏览器自动化基础设施转化为简单的 API 调用，让开发者能零负担地构建高可靠、抗干扰的 AI 网页代理应用。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsteel-dev_steel-browser_b7b70e81.png","steel-dev","Steel","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fsteel-dev_3b047cd7.png","Steel is an open-source browser API purpose-built for AI agents.",null,"team@steel.dev","steeldotdev","steel.dev","https:\u002F\u002Fgithub.com\u002Fsteel-dev",[85,89,93,96,100,104,108],{"name":86,"color":87,"percentage":88},"TypeScript","#3178c6",85.2,{"name":90,"color":91,"percentage":92},"EJS","#a91e50",10.1,{"name":94,"color":95,"percentage":23},"CSS","#663399",{"name":97,"color":98,"percentage":99},"Dockerfile","#384d54",1,{"name":101,"color":102,"percentage":103},"JavaScript","#f1e05a",0.9,{"name":105,"color":106,"percentage":107},"Shell","#89e051",0.6,{"name":109,"color":110,"percentage":111},"HTML","#e34c26",0.1,6769,924,"2026-04-02T20:56:57","Apache-2.0","Linux, macOS, Windows","未说明",{"notes":119,"python":120,"dependencies":121},"该工具主要是一个基于 Node.js 的浏览器 API 服务，而非本地运行的 AI 模型。核心依赖是已安装的 Google Chrome 浏览器（需指定路径）和 Node.js 环境。推荐使用 Docker 部署以简化环境配置。Mac Silicon 用户运行 Docker 时需设置平台标志 (linux\u002Farm64)。支持通过 SDK (Python\u002FNode) 或 REST API 调用，也可集成 Selenium。","未说明 (主要基于 Node.js)",[122,123,124,125],"Node.js","Google Chrome","Docker (可选)","Puppeteer\u002FPlaywright\u002FSelenium (客户端)",[13,26,14,15],[128,129,130,131,132],"ai","ai-agents","ai-tools","browser-automation","llm","2026-03-27T02:49:30.150509","2026-04-06T07:13:26.309367",[136,141,146,151,156,161],{"id":137,"question_zh":138,"answer_zh":139,"source_url":140},10870,"如何在会话实时视图中使用复制\u002F粘贴功能？","社区已提交并合并了相关 PR（#156），现在支持用户在接管控制权时向浏览器进行复制\u002F粘贴操作。请确保您使用的是包含此更新的最新版本镜像或代码库。","https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fissues\u002F150",{"id":142,"question_zh":143,"answer_zh":144,"source_url":145},10868,"如何在 Docker Compose 中正确配置 UI 连接自定义 API 地址（VITE_API_URL）？","该问题已在后续版本中修复。在部署时，请确保在 docker-compose.yml 的 ui 服务环境变量中正确设置 VITE_API_URL 和 VITE_WS_URL。例如：\nenvironment:\n  - VITE_API_URL=https:\u002F\u002F\u003C你的 API 域名>\n  - VITE_WS_URL=wss:\u002F\u002F\u003C你的 API 域名>\n如果仍然连接到 localhost:3000，请尝试重新构建容器或拉取最新镜像以确保包含修复补丁。","https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fissues\u002F99",{"id":147,"question_zh":148,"answer_zh":149,"source_url":150},10869,"开源版本是否支持查看和嵌入实时会话（Live Sessions）？为什么返回 404 错误？","Steel Browser 目前设计为一次只运行一个会话，以便每个会话能获得隔离的资源访问权限。虽然不支持并发多会话，但存储在内存中的过往会话是可以访问的。\n对于调试视图，可以通过以下 URL 访问：http:\u002F\u002Flocalhost:3000\u002Fv1\u002Fsessions\u002Fdebug?interactive=true&showControls=true\n如果需要运行多个会话，建议围绕 steel-browser 创建一个编排器（orchestrator），相关文档即将发布。","https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fissues\u002F72",{"id":152,"question_zh":153,"answer_zh":154,"source_url":155},10871,"多次运行 docker compose up 时遇到 Xvfb 报错\"Server is already active for display\"怎么办？","这是由于残留的锁文件导致的。解决方案是更新入口点脚本以在启动时清除过期的锁文件。\n临时解决方法：在重新启动前手动删除锁文件，命令如下：\nrm \u002Ftmp\u002F.X10-lock\n永久解决方法：重新构建容器以应用修复后的入口点脚本：\ndocker-compose up --force-recreate --build","https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fissues\u002F24",{"id":157,"question_zh":158,"answer_zh":159,"source_url":160},10872,"注册账户时提示\"Sign up unsuccessful due to failed security validations\"如何解决？","该项目的身份验证由 Clerk 管理，有时会出现安全验证失败的情况。如果遇到此问题：\n1. 尝试刷新页面重试。\n2. 尝试使用不同的注册方式（例如从邮箱注册改为 Google 登录，或反之）。\n3. 如果问题依旧，建议加入项目的 Discord 服务器联系维护者，他们可以手动为您设置账户。","https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fissues\u002F20",{"id":162,"question_zh":163,"answer_zh":164,"source_url":165},10873,"Hobby 计划用户在使用 SDK 配置 proxyUrl 时收到 400 错误，文档不是说允许吗？","这是一个文档与实现不一致的问题，目前已修复。根据最新反馈，Hobby 计划用户现在应该可以正常使用 proxyUrl 配置自带代理（BYOP）。\n如果您仍遇到\"Proxy use is not available on the hobby plan\"的错误，请确保您的 steel-sdk 版本已更新至最新（检查 package.json 中的版本），并确认 API Key 有效。如果问题持续，可能需要等待云端策略完全同步或联系支持团队。","https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fissues\u002F246",[167,172,177,182,187,192,197,202,207,212,217,222,227,232,237,242,247,252,257,262],{"id":168,"version":169,"summary_zh":170,"released_at":171},53319,"v0.5.2-beta","## 改进\n\n- [`e9ec37`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Fe9ec374f10a661a8050ebd15421d438bc92bf8b4): 功能：允许覆盖断开连接处理器 (#233) (@junhsss)\n- [`ed8178`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Fed81787cf020193084e2fbacfd119f5132e72d18): 功能：添加搜索操作 (#231) (@aspectrr)\n- [`861029`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F8610295bf3d25fcb509e4303fba47feeeaf28df2): 功能：优化 Steel 浏览器性能 (#239) (@danew)\n- [`27af93`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F27af93e694f5ae9925b0ea9597a76cc3d819e10f): 功能：添加禁用沙箱的环境变量覆盖 (#260) (@danew)\n- [`f36730`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Ff367307a2cbd097b85d24ee632ab4cd3a058cc82): 功能：从页面请求事件迁移到 Chrome 的 Network 域 (#262) (@danew)\n\n## 错误修复\n\n- [`c053ee`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Fc053ee5e9c5730a2818dc65ccb447ad7c36e54d6): 修复：解决并优化时区获取问题 (#234) (@jagadeshjai)\n- [`1f5ec4`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F1f5ec4255afcb3df69adfce1a1f7f6965d1d3bd6): 修复：文件清理更加细化，并指定主目录 (#236) (@fukouda)\n- [`9d99e8`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F9d99e8927ed25759479426e1ddbf40be66d3f060): 修复：禁用会话崩溃冒泡 (#238) (@danew)\n- [`592c2b`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F592c2b3791fbb726d1c176fa64122bb765e084cb): 修复：处理未定义错误访问问题 (#237) (@junhsss)\n- [`70da1e`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F70da1eea1814f0d9aed1b7bf2e57b5768d111006): 修复：在非开发环境中更改默认文件目录 (#244) (@danew)\n- [`cf6cdf`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Fcf6cdfd3ab359f33e9e0e0fbf78edab83cacb9ab): 修复：修复事件存储中的循环引用栈溢出问题 (#251) (@danew)\n- [`733cd7`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F733cd7a0ae348512b92b909c0561127f3570a6a2): 修复：使用最小化 Logger 接口以避免 pino v9\u002Fv10 类型冲突 (#259) (@danew)\n\n## 文档\n\n- [`a5d2cc`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Fa5d2cc0087af8c2af242097fcbecd5f1c68e8f2b): 文档：更新 README.md (#248) (@hussufo)\n- [`d74478`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Fd744784e243ae9ed30b792095771cfd0c31306fe): 文档：修复 README 中损坏的文档指南 URL (#255) (@Ray0907)\n\n## 日常维护\n\n- [`d5efd1`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Fd5efd1d7528d7ee33163581b6c13a2767ee1c17d): 杂项：为有界面的会话添加更多静态 Chrome 参数 (#232) (@danew)\n- [`86ff52`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F86ff52903f6071d0ed6ba06c93f146fd85190b03): 性能优化：在请求处理器中去重 URL 解析 (#253) (@Ray0907)\n- [`6e0ea9`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F6e0ea98e22ce87c47c112e9053ba2c2724889ce8): 性能优化：在会话开始时预编译 URL 模式正则表达式 (#252) (@Ray0907)\n\n\n\n---\n\n![release-image](https:\u002F\u002Fraw.github","2026-03-15T21:49:51",{"id":173,"version":174,"summary_zh":175,"released_at":176},53320,"v0.5.1-beta","## 改进\n\n- [`a10637`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Fa10637f315750f5bdede3ece494dad2f8b0247dc): 功能：抓取 PDF 解析 (#227) (@aspectrr)\n- [`b098af`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Fb098afebd16659f8705c5a18450a574e49cfc5db): 功能：添加启用\u002F禁用 CDP 服务的逻辑 (#219) (@danew)\n\n## Bug 修复\n\n- [`8675b4`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F8675b439d127bdf47062f187138e9932228c2096): 修复：修复发布脚本 (#221) (@aspectrr)\n- [`2dac49`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F2dac49e78cdba123b71fb996bcdb32b494ef4e09): 修复：更新 render.yaml 部署和 README (#220) (@aspectrr)\n\n## 日常维护\n\n- [`c9f49e`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Fc9f49e13dd347367c23c23bcc689d9a83b0f2b61): 杂项：升级依赖包 + 条件性鼠标绘制 (#229) (@fukouda)\n\n\n\n---\n\n![release-image](https:\u002F\u002Fraw.githubusercontent.com\u002Fsteel-dev\u002F.github\u002Frefs\u002Fheads\u002Fmain\u002Fprofile\u002Fgithub_hero.png)\n\n## 加入我们\n- 有疑问？请加入我们的 [Discord](https:\u002F\u002Fdiscord.gg\u002FgPpvhNvc5R)\n- 发现了 bug？请在 [GitHub](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fissues) 上提交 issue","2025-11-19T08:53:36",{"id":178,"version":179,"summary_zh":180,"released_at":181},53321,"v0.5.0-beta","## 改进\n\n- [`fd9369`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Ffd93697b89f89155501b588bc8b6714819ced3d3): 功能：在 `onBrowserReady` 中支持 Promise (#226) (@danew)\n\n## 文档\n\n- [`9dcdc2`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F9dcdc253bf6b6e54bf2ce0fe214cb790b522953a): 文档：更新 README.md (#225) (@hussufo)\n\n\n\n---\n\n![release-image](https:\u002F\u002Fraw.githubusercontent.com\u002Fsteel-dev\u002F.github\u002Frefs\u002Fheads\u002Fmain\u002Fprofile\u002Fgithub_hero.png)\n\n## 来一起交流吧\n- 有疑问？加入我们的 [Discord](https:\u002F\u002Fdiscord.gg\u002FgPpvhNvc5R)\n- 发现了 bug？在 [GitHub](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fissues) 上提交一个问题","2025-11-10T20:03:21",{"id":183,"version":184,"summary_zh":185,"released_at":186},53322,"v0.4.5-beta","## Bug 修复\n\n- [`9ea931`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F9ea93131896848a869322ce8b70af67186cc7be0): 修复：设置默认下载行为 + 整合部分错误流程 (#224) (@fukouda)\n\n\n\n---\n\n![release-image](https:\u002F\u002Fraw.githubusercontent.com\u002Fsteel-dev\u002F.github\u002Frefs\u002Fheads\u002Fmain\u002Fprofile\u002Fgithub_hero.png)\n\n## 欢迎加入\n- 有问题？欢迎加入我们的 [Discord](https:\u002F\u002Fdiscord.gg\u002FgPpvhNvc5R)\n- 发现了 bug？请在 [GitHub](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fissues) 上提交 issue","2025-11-04T07:40:46",{"id":188,"version":189,"summary_zh":190,"released_at":191},53323,"v0.4.4-beta","## 改进\n\n- [`50274e`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F50274ec6288b1298d143f7fc88900d10176ab5c7): 功能：启用鼠标辅助工具并更新以支持桌面光标 (#212) (@jagadeshjai)\n- [`62b98a`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F62b98a1d474bd7f9a020fb9c36e6ecbc9ada8b37): 功能：支持通过会话选项传递无头\u002F有头模式 (#214) (@danew)\n- [`17ab09`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F17ab0906529cbf2fd52fb15706ffb0b26a337031): 功能：通用日志接口 (#207) (@danew)\n\n## 错误修复\n\n- [`8ae459`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F8ae459a217746962ddb7767624782c8130865192): 修复：将 GET \u002Fsessions 响应包裹在对象中，以匹配生产环境 API (#213) (@Bas3line)\n- [`969cc1`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F969cc1aa011d6f44e05efa3ddb1de0b595cb0377): 修复：允许 duckdb 完成安装后跳过 husky (#215) (@aspectrr)\n- [`0b0f75`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F0b0f75e08a59894f69c4d5e9a302c61491a7ee87): 修复：在默认配置中添加设备信息 (#216) (@fukouda)\n- [`e9165b`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Fe9165bb92fdda8e690a25cf5fdbe8cfaef3c2be1): 修复：修复因 #213 中的会话 API 更新导致的 UI 渲染问题 (#218) (@aspectrr)\n\n\n\n---\n\n![release-image](https:\u002F\u002Fraw.githubusercontent.com\u002Fsteel-dev\u002F.github\u002Frefs\u002Fheads\u002Fmain\u002Fprofile\u002Fgithub_hero.png)\n\n## 来一起聊聊吧\n- 有问题？加入我们的 [Discord](https:\u002F\u002Fdiscord.gg\u002FgPpvhNvc5R)\n- 发现了 bug？在 [GitHub](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fissues) 上提交一个问题","2025-10-19T23:39:03",{"id":193,"version":194,"summary_zh":195,"released_at":196},53324,"v0.4.3-beta","## 改进\n\n- [`b85c71`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Fb85c71833282f452dec29cd8dde0242389a7c39c): 功能：改进插件启动钩子的时机及指纹覆盖支持 (#206) (@jagadeshjai)\n- [`f27ab7`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Ff27ab76cabcc3cc8265778ec8681c6e28ead8bfa): 功能：从 CDP 服务配置中更新窗口尺寸 (#209) (@jagadeshjai)\n- [`459be5`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F459be5b857fa1d32d6dbfbcc0738bb839f8a4da2): 功能：为用户数据目录的持久化奠定基础 (#210) (@aspectrr)\n\n## 错误修复\n\n- [`b2bcb1`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Fb2bcb1b129d0092323e2cf24e14736be5d1e1c1f): 修复：更深入的配置检查 (#208) (@fukouda)\n- [`f93e80`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Ff93e80041fa8a2c4ab5902907f43238b966a2194): 修复：视口不一致问题 (#211) (@fukouda)\n\n\n---\n\n![release-image](https:\u002F\u002Fraw.githubusercontent.com\u002Fsteel-dev\u002F.github\u002Frefs\u002Fheads\u002Fmain\u002Fprofile\u002Fgithub_hero.png)\n\n## 来一起聊聊吧\n- 有问题？欢迎加入我们的 [Discord](https:\u002F\u002Fdiscord.gg\u002FgPpvhNvc5R)\n- 发现了 bug？请在 [GitHub](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fissues) 上提交 issue","2025-10-14T00:41:36",{"id":198,"version":199,"summary_zh":200,"released_at":201},53325,"v0.4.2-beta","## 改进\n- [`4d50ea`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F4d50ea7b79046fa1ee5f01bab2d61f7318ab1d70): 功能：添加 `optimizeBandwidth` 标志以优化带宽使用（#201）（@fukouda）\n\n## 错误修复\n- [`21a2f1`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F21a2f1ed5bc35cd1d54575ee3fdaebd1ebfaa2a7): 修复：快速启动中的上下文使用问题（#198）（@fukouda）\n- [`1e3081`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F1e3081957e2cf9eaeab744f08971d9a4ef50df88): 修复：改进错误处理，并为较慢的设备设置更长的超时时间（#199）（@fukouda）\n\n## 日常维护\n\n- [`82d10a`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F82d10a4839cc054813e56c6b86cd210ca50b0f8e): 杂项：将指纹识别套件版本更新至 2.1.72（#200）（@jagadeshjai）\n\n\n\n---\n\n![release-image](https:\u002F\u002Fraw.githubusercontent.com\u002Fsteel-dev\u002F.github\u002Frefs\u002Fheads\u002Fmain\u002Fprofile\u002Fgithub_hero.png)\n\n## 欢迎交流\n- 有疑问？欢迎加入我们的 [Discord](https:\u002F\u002Fdiscord.gg\u002FgPpvhNvc5R)\n- 发现了 bug？请在 [GitHub](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fissues) 上提交 issue","2025-09-29T17:26:26",{"id":203,"version":204,"summary_zh":205,"released_at":206},53326,"v0.4.1-beta","## 文档\n\n- [`2f5918`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F2f5918397eed23733013ad95e0b488b41e533553): 文档：更新新镜像的使用说明 (#197) (@fukouda)\n\n\n\n---\n\n![release-image](https:\u002F\u002Fraw.githubusercontent.com\u002Fsteel-dev\u002F.github\u002Frefs\u002Fheads\u002Fmain\u002Fprofile\u002Fgithub_hero.png)\n\n## 来一起聊聊吧\n- 有问题？欢迎加入我们的 [Discord](https:\u002F\u002Fdiscord.gg\u002FgPpvhNvc5R)\n- 发现了 bug？请在 [GitHub](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fissues) 上提交 issue","2025-09-24T06:42:44",{"id":208,"version":209,"summary_zh":210,"released_at":211},53327,"v0.4.0-beta","## 改进\n\n- [`f6378a`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Ff6378a57a264dceff40cd50c5a5d6b5882d2b7d3): 功能：env.DISPLAY (#192) (@aspectrr)\n- [`3824d1`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F3824d10354b1008d8ed5bf59133d4b4e998ae61a): 功能：将 UI 合并为 API，以支持单应用部署 (#186) (@danew)\n\n## Bug 修复\n\n- [`f55f72`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Ff55f72b3b0837fd055098f81f8017399215215ef): 修复：在指纹中考虑显卡为空的情况 (#193) (@fukouda)\n- [`3ac4e7`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F3ac4e71cefd684e3b52c5c1d915c634ec4ae9290): 修复：修补部分依赖项及 userDataDir 路径的环境变量 (#194) (@fukouda)\n\n\n\n---\n\n![release-image](https:\u002F\u002Fraw.githubusercontent.com\u002Fsteel-dev\u002F.github\u002Frefs\u002Fheads\u002Fmain\u002Fprofile\u002Fgithub_hero.png)\n\n## 来一起聊聊吧\n- 有问题？加入我们的 [Discord](https:\u002F\u002Fdiscord.gg\u002FgPpvhNvc5R)\n- 发现了 bug？在 [GitHub](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fissues) 上提交一个 issue","2025-09-18T05:30:44",{"id":213,"version":214,"summary_zh":215,"released_at":216},53328,"v0.3.0-beta","## 改进\n\n- [`cc24ca`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Fcc24cadb10272effa083865a4c8bc2ad45f786a3): 功能：在 CDP 插件管理器中添加 `onBrowserReady` 钩子 (#191) (@danew)\n\n## 错误修复\n\n- [`a7bf01`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Fa7bf01cd0e4337e82e3b55ec82c79eef34bc6941): 修复：更新 `package-lock` (#190) (@aspectrr)\n- [`ab56ef`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Fab56ef67115428396397eaef7eb15bf1b26c46f7): 修复：将 `validate pr labeller` 更新至最新版本 (#188) (@danew)\n- [`ad079a`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Fad079a59f01bb8e596dab19bc0b3082fa1d892fb): 修复：为 `__name` 提供 polyfill，以防止 Puppeteer 上下文中出现 esbuild 错误 (#184) (@danew)\n- [`539981`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F539981d6fd435cdb0fa9d1c8c51da9ec44432356): 修复：移除 `arrounious extensionsPath` (@aspectrr)\n\n\n\n---\n\n![release-image](https:\u002F\u002Fraw.githubusercontent.com\u002Fsteel-dev\u002F.github\u002Frefs\u002Fheads\u002Fmain\u002Fprofile\u002Fgithub_hero.png)\n\n## 来一起聊聊吧\n- 有疑问？加入我们的 [Discord](https:\u002F\u002Fdiscord.gg\u002FgPpvhNvc5R)\n- 发现了 bug？在 [GitHub](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fissues) 上提交一个问题","2025-09-04T16:42:10",{"id":218,"version":219,"summary_zh":220,"released_at":221},53329,"v0.2.6-beta","## Improvements\r\n\r\n- [`ecc103`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Fecc10371b26bc8fd89cb9d20b7a244a5ed699cee): feat: added cloud extension support, update version (#183) (@aspectrr)\r\n\r\n\r\n\r\n---\r\n\r\n![release-image](https:\u002F\u002Fraw.githubusercontent.com\u002Fsteel-dev\u002F.github\u002Frefs\u002Fheads\u002Fmain\u002Fprofile\u002Fgithub_hero.png)\r\n\r\n## Come Hang Out\r\n- Questions? Join us on [Discord](https:\u002F\u002Fdiscord.gg\u002FgPpvhNvc5R)\r\n- Found a bug? Open an issue on [GitHub](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fissues)","2025-08-20T11:49:29",{"id":223,"version":224,"summary_zh":225,"released_at":226},53330,"v0.2.5-beta","## Housekeeping\n\n- [`19d599`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F19d59908cdb5446397fa6da6929ed6d8b0480463): chore: update logging and build warnings on newer versions (#189) (@fukouda)\n\n\n\n---\n\n![release-image](https:\u002F\u002Fraw.githubusercontent.com\u002Fsteel-dev\u002F.github\u002Frefs\u002Fheads\u002Fmain\u002Fprofile\u002Fgithub_hero.png)\n\n## Come Hang Out\n- Questions? Join us on [Discord](https:\u002F\u002Fdiscord.gg\u002FgPpvhNvc5R)\n- Found a bug? Open an issue on [GitHub](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fissues)","2025-08-19T19:52:25",{"id":228,"version":229,"summary_zh":230,"released_at":231},53331,"v0.2.4-beta","## Improvements\r\n\r\n- [`a22248`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Fa2224835c3d59250d655241f31d734dd5230284d): feat: improve scraping quality (#182) (@junhsss)\r\n\r\n## Bug Fixes\r\n\r\n- [`eb15df`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Feb15df15d7058f27889a59d54bd2f3766e23d286): fix: validate pr action (#187) (@danew)\r\n\r\n\r\n\r\n---\r\n\r\n![release-image](https:\u002F\u002Fraw.githubusercontent.com\u002Fsteel-dev\u002F.github\u002Frefs\u002Fheads\u002Fmain\u002Fprofile\u002Fgithub_hero.png)\r\n\r\n## Come Hang Out\r\n- Questions? Join us on [Discord](https:\u002F\u002Fdiscord.gg\u002FgPpvhNvc5R)\r\n- Found a bug? Open an issue on [GitHub](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fissues)","2025-08-19T13:07:41",{"id":233,"version":234,"summary_zh":235,"released_at":236},53332,"v0.2.3-beta","## Improvements\r\n\r\n- [`ff221a`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Fff221aff724a5d137ac463c98c102126edad3c2b): feat: clean html before markdown conversion (#181) (@junhsss)\r\n\r\n\r\n\r\n---\r\n\r\n![release-image](https:\u002F\u002Fraw.githubusercontent.com\u002Fsteel-dev\u002F.github\u002Frefs\u002Fheads\u002Fmain\u002Fprofile\u002Fgithub_hero.png)\r\n\r\n## Come Hang Out\r\n- Questions? Join us on [Discord](https:\u002F\u002Fdiscord.gg\u002FgPpvhNvc5R)\r\n- Found a bug? Open an issue on [GitHub](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fissues)","2025-08-04T08:35:33",{"id":238,"version":239,"summary_zh":240,"released_at":241},53333,"v0.2.2-beta","## Bug Fixes\r\n\r\n- [`0adf55`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F0adf554f4afc8912ceb29dccd855a7e5f634ed09): fix: some structure to contributing + more process scripts + docs (#180) (@fukouda)\r\n\r\n\r\n\r\n---\r\n\r\n![release-image](https:\u002F\u002Fraw.githubusercontent.com\u002Fsteel-dev\u002F.github\u002Frefs\u002Fheads\u002Fmain\u002Fprofile\u002Fgithub_hero.png)\r\n\r\n## Come Hang Out\r\n- Questions? Join us on [Discord](https:\u002F\u002Fdiscord.gg\u002FgPpvhNvc5R)\r\n- Found a bug? Open an issue on [GitHub](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fissues)","2025-07-29T21:45:08",{"id":243,"version":244,"summary_zh":245,"released_at":246},53334,"v0.2.1-beta","## Bug Fixes\r\n\r\n- [`3e64af`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F3e64af4c8ffa31d014c496c8ddc05e4a4e970c19): fix: some device inconsistencies + enable web security by default (#179) (@fukouda)\r\n\r\n\r\n\r\n---\r\n\r\n![release-image](https:\u002F\u002Fraw.githubusercontent.com\u002Fsteel-dev\u002F.github\u002Frefs\u002Fheads\u002Fmain\u002Fprofile\u002Fgithub_hero.png)\r\n\r\n## Come Hang Out\r\n- Questions? Join us on [Discord](https:\u002F\u002Fdiscord.gg\u002FgPpvhNvc5R)\r\n- Found a bug? Open an issue on [GitHub](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fissues)","2025-07-28T18:45:38",{"id":248,"version":249,"summary_zh":250,"released_at":251},53335,"v0.2.0-beta","## Improvements\r\n\r\n- [`a5ae79`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Fa5ae793f2e39442a9e712c50cda5df4786a2a444): feat: reuse idle browser when config is unchanged (#79) (@fukouda)\r\n- [`f3418d`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Ff3418dd0fc08fc2cfd313cda9d2a99ba9563674c): feat: add files API (#78) (@junhsss)\r\n- [`6aa98f`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F6aa98fedb8f13ab1ec7270df355f073eab83125c): feat: session details endpoint + connection cleanup (#82) (@fukouda)\r\n- [`7ee5f7`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F7ee5f7b71069549ecd0203cdedc1c1a5330ac6b3): feat: expose local file path in file details (#81) (@junhsss)\r\n- [`c9f1e8`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Fc9f1e8988d807f25bb7fb8dcd5ff7ff2829a6b0f): feat: add commitlint (#80) (@mislavjc)\r\n- [`35996c`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F35996c8aac39d0d39be8e54d143bfa2a42553219): feat: Add env to skip our fingerprint injection (#98) (@jagadeshjai)\r\n- [`ec8964`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Fec89642e4b5bb9491e166169fc53b839dbe4cf94): feat: change files path (#103) (@junhsss)\r\n- [`6d9981`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F6d9981b7c77469cf156775811aaabbf6a84bf0ff): feat: ui fixes + sessions logic (#107) (@fukouda)\r\n- [`aefef5`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Faefef5919dc3a8a3774314583bbd05dec093f883): feat: save files to local before processing (#108) (@junhsss)\r\n- [`21d2c2`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F21d2c25e2dad8efb2300fa07f42ef281f5d774f5): feat: added ability to pass chrome args to new sessions via .env or docker-compose (#116) (@aspectrr)\r\n- [`7debcf`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F7debcf490274193cc9769a2a03a4295979644dce): feat:  add files event listener (#117) (@junhsss)\r\n- [`90af6e`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F90af6e8adc251e0401a7df879f086d9fad341b31): feat: add new plugin framework + rework session contexts (#102) (@fukouda)\r\n- [`339e63`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F339e63ceb538271debd60ce85d4e0f147e410641): feat: Funtionality for running actions on current pages (#118) (@aspectrr)\r\n- [`a05d4f`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Fa05d4f8029471455304b52c5ffc1b6f78c2d4e61): feat: better, faster context manipulation (#121) (@fukouda)\r\n- [`4d905c`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F4d905c53464b7fad4670750f0ee94d2cfadb1e55): feat: better chrome args structure (#141) (@fukouda)\r\n- [`89c780`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F89c78083912071e91eb048d05c6547120ebef54b): feat: consolidate files API schema (#147) (@junhsss)\r\n- [`a65991`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Fa65991be43de0e7d13dc0a91e9db9484455273c4): feat: change route structure of files API (#148) (@junhsss)\r\n- [`fa6886`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Ffa6886468aedb27ce4424e3734a9799545c5db30): feat: added copying\u002Fpasting support when users take control of browser (#156) (@aspectrr)\r\n- [`c37ef2`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Fc37ef2db8ad17ae3eb4e6650b75007ce57165b77): feat: support for custom WebSocket proxy handlers in CDP service (#160) (@jagadeshjai)\r\n- [`23c730`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F23c7308f677c89a594d757ef5154a60a7a7a8509): feat: better ws handling logic + registry & options for adding custom handlers (#166) (@fukouda)\r\n- [`5fd879`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F5fd879617299ceb1c1de6b01cdecff372ece1976): feat: add onSessionEnd hook to plugin manager (#168) (@danew)\r\n- [`b26d83`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Fb26d83be9f98f063b5bdb2a1fbbb856610f500f2): feat: add support for browser preferences (#170) (@junhsss)\r\n- [`0af0a0`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F0af0a08e40b7c3b2927a9f6c7ec6fcb179fd9fe5): feat: add proxy factory (#173) (@junhsss)\r\n- [`0e37ac`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F0e37ac9856a1678aaa29b2b2dc16e481db173a01): feat: add automatic releases on PR (#175) (@aspectrr)\r\n\r\n## Bug Fixes\r\n\r\n- [`059235`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F059235bd1d4846e9276c70387df8f0fe9a8a73e1): fix: remove extra session restart call and rename pending to idle (#75) (@fukouda)\r\n- [`1e3035`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F1e3035281380b3c36ba668581fba4fd3a3c23bef): fix: bug when dimensions are undefined (#83) (@fukouda)\r\n- [`617097`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002F6170972f09edb169f1eae3c3b2d5cda37045b27e): fix: downgrade to puppeteer 23.6 for now (#86) (@fukouda)\r\n- [`c5ea01`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Fc5ea013e03733b3c283fd9aa7941a258d55a9427): fix: timezone configurations when using proxy (#89) (@fukouda)\r\n- [`ddb442`](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fcommit\u002Fddb4420471ccb627d2aac34c7a77cbc390813626): fix: fingerprint + stealth updates (#93) (@fukouda)\r\n- [`7645bc`](https:\u002F\u002Fgithub.com","2025-07-24T20:25:20",{"id":253,"version":254,"summary_zh":255,"released_at":256},53336,"v0.1.3-beta","## New feature highlights\r\n### 📺  Embeddable Live Session Iframe\r\nNow every Steel browser session comes with a debug URL that provides a flexible way to view and interact with the session. This URL is returned as `debugUrl` in the session object.\r\n\r\n```jsx\r\n\u003Ciframe \r\n  src={session.debugUrl}\r\n  style=\"width: 100%; height: 600px; border: none;\"\r\n>\u003C\u002Fiframe>\r\n```\r\n\r\nYou can learn more about it [here!](https:\u002F\u002Fdocs.steel.dev\u002Foverview\u002Fguides\u002Fview-and-embed-live-sessions)\r\n\r\n## Bug fixes\r\n* [a68462](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpull\u002F62\u002F80af8946fa21b8243c1f0e85bbb322058e0ecc5d) fix: local dev using docker (#62)\r\n* [76aa97](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpull\u002F73\u002F76aa97b0366dfd1b554d1882074b38248eef6912) fix: context injection and read (#73)\r\n* [21ff16](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpull\u002F71\u002F21ff16ea426100221e77a243fa6120e6031e0eff) fix: docker builds to work for workspaces (#71)\r\n\r\n\r\n## Improvements\r\n* [a68462](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpull\u002F66\u002Fa684626c8026614a37c142c905f5f9b2df90ded7) feat: better live debug view (#66)\r\n* [a460d1](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpull\u002F68\u002Fa460d1d394acc3d8f6876c23cc3571ab42f774eb) Improve logging and change hardcoded localhost to env in a few spots (shoutout @hakzarov) (#68)\r\n* [20765d](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpull\u002F52\u002F20765d8b4bb68a25753ef963654a52f38dc99260) Re-package recorder extension using rrweb from NPM (shoutout @Envek) (#52)\r\n* [e9884b](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpull\u002F70\u002Fe9884b0d598714985a5cae314b5c46ceeb4145f5) fastify v5 upgrade (shoutout @danew) (#70)\r\n\r\n## First-time Contributors!\r\nSpecial thanks @hakzarov for adding better logging for both the API and the Chrome process\r\n\r\n\r\n---\r\n\u003Cimg width=\"560\" alt=\"Xnapper-2024-11-25-21 25 29\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F9937e162-22c9-4b30-b9d0-ccf90c9b6fb4\">\r\n\r\n## Come Hang Out\r\n\r\n- Questions? Join us on [Discord](https:\u002F\u002Fdiscord.gg\u002FgPpvhNvc5R)\r\n- Found a bug? Open an issue on [GitHub](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fissues)","2025-02-26T00:06:45",{"id":258,"version":259,"summary_zh":260,"released_at":261},53337,"v0.1.2-beta","The feedback and community support on Steel's beta has been beyond incredible. We've heard to your wishes, aches, pains, and with this release, we're bundling a variety of fixes and improvements that have been shipped over the last 2 months. Even a few new features!\r\n\r\n## New feature highlights\r\n### 🎛️ Dimensions for sessions\r\nWe now support the ability to set screen + viewport dimensions when creating a session (`POST \u002Fv1\u002Fsessions`).\r\n\r\n```python\r\nfrom steel import Steel\r\n\r\nclient = Steel(\r\n    base_url=\"https:\u002F\u002Flocalhost:3000\"\r\n)\r\n\r\nsession = client.sessions.create(\r\n    dimensions={\r\n        \"width\":1280,\r\n        \"height\":800\r\n    }\r\n)\r\n```\r\nThis helps save you from having to set page viewport on every page load. Which can cause buggy resizing behaviour with your sessions.\r\n\r\n### 😴 Ad blocking\r\nYou can now block ads from rendering in your sessions. This is useful for saving on proxy bandwidth, simplifying action space for agents (so they don’t have the option of clicking on ads), and generally speeding up page load times.\r\n\r\nIt defaults to `true` when starting a session but you can explicitly turn it on\u002Foff by passing a bool into the blockAds param in the create session endpoint (`POST \u002Fv1\u002Fsessions`) or via the SDK like so:\r\n\r\n```python\r\nfrom steel import Steel\r\n\r\nclient = Steel(\r\n    base_url=\"https:\u002F\u002Flocalhost:3000\"\r\n)\r\n\r\nsession = client.sessions.create(\r\n    block_ads=true\r\n)\r\n```\r\n\r\n\r\n\r\n## Bug fixes\r\n* [b886f1](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpull\u002F18\u002Fcommits\u002Fb886f18c66ce0721dcd788ce2755b779a5d2d04f) fix(api): logging listeners not being used\r\n* [51d4c4](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpull\u002F19\u002F51d4c4957a830dc15f32f1aba94d905d8bed5796) fix(ui): recording issue\r\n* [ec95f2](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpull\u002F21\u002Fec95f24f18d1bdd9011ada9a13b9463da26a4035) fix(recording): allow 0.0.0.0:3000 to be safely called without https\r\n* [15fa81](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpull\u002F22\u002F15fa817c76ebf2e76787ceb6e56f66ca29aac74e) fix: error with browser actions running two consecutive requests\r\n* [26497](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpull\u002F25\u002F26497ad991c9b721dbe8ba00b32c9d0d9fbfa3c0) fix: issues loading cnn and other sites + performance improvements\r\n* [13d7c2](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpull\u002F29\u002F13d7c2e8473af6f8a851ef6904857d8e0b72f9c7) Add gitattributes to ensure line endings are set to LF for all OSs (shoutout @BrentBrightling)\r\n* [f72d3a](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpull\u002F30\u002Ff72d3a95058332dbb05adad69f4e06ec71ff5aff) fix: make DEFAULT_HEADERS actually optional\r\n* [2c99bf](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpull\u002F34\u002F2c99bffcb8eb70b17081963acc399bec4c47eeca) fix: add support for 'Program Files (x86)' path (shoutout @raymelon)\r\n* [0e141e](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpull\u002F49\u002F0e141eb0b104bed834b7a1c31e2bba615688ff7f) fix: stray chrome processes causing buildup\r\n* [4dad8f](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpull\u002F58\u002F4dad8f8f5b556f2bec69f008e65f804395709a85) Fix Puppeteer Crash: Remove --disable-software-rasterizer (shoutout @danew)\r\n* [42b67c](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpull\u002F56\u002F42b67c0e6ecc60f87f3b2235f562b63ef9b69e63) Fix Xvfb & DBus Startup Issues in Docker Compose (shoutout @danew)\r\n\r\n\r\n\r\n## Improvements\r\n* [afac76](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpull\u002F23\u002Fafac766255ad41dfec6db1338aceb06ce9550dbe) chore: add issue template\r\n* [ad393a](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpull\u002F26\u002Fad393a654c802a6b98d683670c49680c652302ae) fix: session recording events to be sent on extension side\r\n* [62af6d](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpull\u002F36\u002F62af6d711e13e39f87d55d59f9f3f98e6e41933d) feat: basic ad blocking by hostname + handling proxy server shutdown\r\n* [5a8dff](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpull\u002F35\u002F5a8dff7cdf9ee50bb357ee5a36c2d85982b9821c) Graceful shutdown: wait for session to be released (shoutout @Envek)\r\n* [05d5b3](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpull\u002F37\u002F05d5b3df013e5107200bd19476fa8117f831161f) Optimize Dockerfile to reduce number of layers and speedup build (shoutout @Envek)\r\n* [71a74b](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpull\u002F39\u002F71a74b783976984142f1dbbc2d9ff4d821faf0c3) Feat\u002Fconfigurable setup (shoutout @21e8)\r\n* [d7793e](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpull\u002F40\u002Fd7793e57aaa340354e78ad75de1b9195223546d4) fix: update manifest version to v3 and push improvements to session recorder\r\n* [cabe39](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpull\u002F41\u002Fcabe39ed6c7ce4c96fddbd16bda7e0fe10430c56) feat: add CHROME_EXECUTABLE_PATH environment variable for custom chromium binaries (shoutout @QAComet)\r\n* [62013e](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpull\u002F38\u002F62013edb5fa5b6219f1a1d5b81e75b6c4ad488a2) Measure traffic usage if proxy server is specified (shoutout @Envek)\r\n* [c96edf](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpull\u002F42\u002Fc96edf73b0218f92b3b9b3da68383759f2b38046) fix: ensure requests made back to the API are not proxied\r\n* [1a6e69](htt","2025-02-10T17:58:27",{"id":263,"version":264,"summary_zh":265,"released_at":266},53338,"v0.1.1-beta.1","## Changelog\r\n\r\n### Bug fixes\r\n* [f14cf7d](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpull\u002F14\u002Fcommits\u002Ff14cf7d4d2a58ec74c1934d39ff22ce6aec50a62) fix(api): switched to using chrome in backend API to fix docker image build issue\r\n\r\n### Improvements\r\n* [f14cf7d](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpull\u002F14\u002Fcommits\u002Ff14cf7d4d2a58ec74c1934d39ff22ce6aec50a62) feat: introducing docker compose back and splitting apps out to their own images\r\n* [f14cf7d](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpull\u002F14\u002Fcommits\u002Ff14cf7d4d2a58ec74c1934d39ff22ce6aec50a62) feat(api): added extension for better recording\r\n* [f14cf7d](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpull\u002F14\u002Fcommits\u002Ff14cf7d4d2a58ec74c1934d39ff22ce6aec50a62) chore(ui): a little clean up\r\n* [e50f085](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpull\u002F14\u002Fcommits\u002Fe50f08543891943de9c439ec88cc4a7babf4a06e) chore: removed root docker file and updated readme slightly\r\n* [0115134](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fpull\u002F14\u002Fcommits\u002F011513422707223e19bbf877f9c328047a361759) fix: update the gh actions to build separate images\r\n\r\n---\r\n\r\n\u003Cimg width=\"560\" alt=\"Xnapper-2024-11-25-21 25 29\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fc7866f72-522a-401a-80d3-0c982712ce23\">\r\n\r\n## Come Hang Out\r\n\r\n- Questions? Join us on [Discord](https:\u002F\u002Fdiscord.gg\u002FgPpvhNvc5R)\r\n- Found a bug? Open an issue on [GitHub](https:\u002F\u002Fgithub.com\u002Fsteel-dev\u002Fsteel-browser\u002Fissues)","2024-12-02T20:35:39"]