name: browser-use-init description: 初始化並啟動 Chrome DevTools Protocol(CDP)模式,支援用 Playwright 和 browser-use Agent 遠端控制真實 Chrome 瀏覽器。解決 Chrome 145+ App-Bound Encryption 限制,自動複製 Profile 到非預設路徑以啟用 CDP。適合自動化網頁操作、資料提取、Form 填表、爬蟲等場景。
此 Skill 提供完整的 Chrome DevTools Protocol(CDP)初始化和連線方案,用於在 Chrome 145+ 版本下遠端控制瀏覽器。
Chrome 130+ 引入了安全限制,--remote-debugging-port 強制要求使用非預設的 user-data-dir 路徑。直接用預設 Profile 啟動 CDP 除錯會失敗,導致無法用 Playwright 或 browser-use 連線瀏覽器。
此 Skill 通過自動複製 Profile 到自定義目錄的方式繞過此限制,同時保留登入態。
cd <skill 目錄>/scripts
python start_chrome.py
輸出示例:
[1] 關閉現有 Chrome...
[2] 準備 profile...
[profile] 首次複製 profile...
複製 Default (~可能需要幾分鐘)...
[profile] 複製完成: <CHROME_PROFILE_DIR>
[3] 啟動 Chrome (CDP 模式)...
[4] 等待 CDP 就緒...
[OK] Chrome 已啟動: Chrome/145.0.7632.160
[OK] CDP 埠 9222 就緒
[OK] WS URL: ws://localhost:9222/devtools/browser/...
此時 Chrome 視窗已開啟,可用瀏覽器操作。
如果登入狀態丟失(DPAPI 繫結限制),需要手動登入一次:
重新執行 start_chrome.py,登入態現已儲存,以後啟動無需重新登入。
python query_cdp.py
輸出:
Browser: Chrome/145.0.7632.160
WS URL: ws://localhost:9222/devtools/browser/8c3e...
Version: 12.7
標籤頁 (1):
- 京東首頁 | https://www.jd.com/
適用於:資料提取、頁面截圖、表單填充等明確的操作
import asyncio
from scripts.playwright_connect import get_page
async def extract_data():
pw, browser, page = await get_page()
try:
await page.goto("https://example.com/data-page")
await page.wait_for_load_state("networkidle")
# 用 JS 提取頁面資訊
items = await page.evaluate("""
() => {
return Array.from(document.querySelectorAll('.item-name'))
.map(el => el.textContent.trim());
}
""")
print("提取的資料:", items)
finally:
await pw.stop()
asyncio.run(extract_data())
優點: - 快速、可靠、確定性強 - 直接控制 DOM,支援 JS 注入 - 無需 LLM
適用於:開放式任務、需要 AI 判斷的操作
python run_agent.py --task "開啟網站,找出最新發布的產品名稱" --model qwen3.5:9b
或在程式碼中:
import asyncio
from scripts.run_agent import run_task
asyncio.run(run_task(
task="開啟網站列表頁,提取所有商品的名稱和價格",
model="qwen3.5:9b"
))
優點: - 支援自然語言描述任務 - AI 自動判斷操作流程 - 適合複雜的人機互動
注意: - 需要本地 Ollama 執行且模型可用 - LLM 輸出質量直接影響效果
| 指令碼 | 用途 | 何時使用 |
|---|---|---|
start_chrome.py |
啟動 Chrome CDP 模式,複製 Profile | 首次初始化、每次重啟瀏覽器 |
query_cdp.py |
查詢 CDP 連線狀態和已開啟標籤頁 | 診斷、獲取 WebSocket URL |
playwright_connect.py |
用 Playwright 直連 CDP Chrome | 需要確定性自動化操作 |
run_agent.py |
用 browser-use Agent + LLM | 需要 AI 驅動的自然語言任務 |
首次執行 start_chrome.py 時:
原始路徑:%LOCALAPPDATA%\Google\Chrome\User Data
↓ (複製)
自定義路徑:<CHROME_PROFILE_DIR>(可通過環境變數配置)
↓ (啟動 Chrome)
Chrome 以 --remote-debugging-port 識別為"非預設路徑" ✓
↓ (DPAPI 解密)
舊 Cookie 被解密並載入 ✓
首次登入態可能丟失的原因:DPAPI 金鑰繫結到原始 user-data-dir 路徑。
解決方案:手動登入一次後,新 Cookie 使用新路徑的 DPAPI 金鑰加密,之後自動保持。
詳見:references/chrome-cdp-solution.md 中的 DPAPI 章節。
7w4.net收錄了海量優質技能外掛。
# 僅啟動 Chrome(無需額外包)
python start_chrome.py
# 查詢 CDP(僅需標準庫)
python query_cdp.py
pip install playwright
playwright install chromium
pip install browser-use langchain-ollama
ollama pull qwen3.5:9b # 或其他模型
A: Chrome 126+ 用 DPAPI 加密 Cookie,金鑰繫結到原始 user-data-dir。複製 Profile 後需重新登入一次,之後會自動保持。詳見參考文件。
A: 修改 start_chrome.py 中的 PORT 和 DST_DIR 變數,為每個例項指定不同埠(如 9222、9223)和獨立 Profile 目錄。
A: 檢查清單(詳見參考文件故障排查章節):
- tasklist | grep chrome 確認 Chrome 程序
- netstat -ano | grep 9222 檢查端口占用
- 確認 --user-data-dir 是非預設路徑
A: 執行 query_cdp.py 確認 CDP 線上,再嘗試連線。如仍失敗,檢查防火牆設定。
# 方式 1:修改指令碼中的常數(開發模式)
# 編輯 start_chrome.py,修改 DST_DIR 和 PORT
# 方式 2:使用環境變數(推薦,更靈活)
$env:CHROME_PROFILE_DIR = "E:\my-chrome-profile"
$env:CDP_PORT = 9223
python start_chrome.py
async def fill_form():
pw, browser, page = await get_page()
try:
await page.fill("input[name='username']", "user_input")
await page.fill("input[name='password']", "pass_input")
await page.click("button[type='submit']")
await page.wait_for_load_state("networkidle")
await page.screenshot(path="result.png")
finally:
await pw.stop()
asyncio.run(run_task(
task="開啟網站,用中文列出首頁推薦商品的名稱和價格",
model="qwen3.5:9b"
))
詳細的技術說明、Chrome 版本歷史、DPAPI 機制、故障排查等資訊,見:
📄 references/chrome-cdp-solution.md
python start_chrome.py 啟動 Chromereferences/chrome-cdp-solution.md 深入瞭解技術細節這個工具解決了新版 Chrome 無法遠端控制的難題,文件清晰易懂,程式碼註釋詳細,能快速上手。主要優點是功能完整、配置靈活,同時提供簡單和高階兩種使用方式。不足之處是缺少自動化測試,對蘋果電腦使用者支援不夠完善,引數校驗也有待加強。整體質量良好,適合需要自動化網頁操作的開發者使用。