用Python構建能使用瀏覽器的AI代理
本文介紹瞭如何使用Playwright、browser-use和LangGraph在Python中構建能瀏覽和操作真實網站的AI代理。文章涵蓋了Playwright相較於Selenium的優勢(持久WebSocket連接、內置瀏覽器二進制、自動等待等)、環境搭建步驟、動態頁面抓取、多步驟表單填寫、反爬蟲處理、會話持久化以及Docker部署。通過實際代碼示例,讀者將學會構建一個能導航網站、填寫表單、提取結構化數據並通過LLM決策的瀏覽器代理。
用Python構建能使用瀏覽器的AI代理
大多數AI代理教程從API開始,教你如何調用OpenWeather、Stripe端點或從GitHub拉取數據。這是一個不錯的起點,但當你嘗試構建真實應用時,會發現許多需要的任務根本沒有API支持。
人類每天用瀏覽器做的事情——填寫政府表格、查看競爭對手價格、從那些通過JavaScript渲染來保護數據的網站提取研究資料、登錄從未聽説過OAuth的門户——這些任務大約有11億個網站,其中只有極少數提供公共API,其餘只“説瀏覽器語言”。
一個只限於API調用的代理只能處理人類日常工作約5%的任務。而賦予代理瀏覽器能力後,覆蓋範圍接近100%。這正是本文要解決的問題。
據估計,2026年全球AI代理市場規模為109.1億美元,預計到2030年將達到503.1億美元,其中具備瀏覽器能力的代理是增長核心。已有27.7%的企業在生產環境中運行基於瀏覽器的代理,而兩年前這個數字幾乎為零。工具已經成熟,模式也已穩定,可以系統地教授。
為什麼選擇Playwright而非Selenium
五年前,瀏覽器自動化幾乎都使用Selenium。Selenium仍然廣泛部署、工作正常,也不會消失。但對於2026年的任何新項目,Playwright是默認選擇。原因很實際。
Selenium通過向WebDriver發送獨立的HTTP請求與瀏覽器通信,每次點擊、輸入、滾動都是一次單獨請求。Playwright則為整個會話使用持久WebSocket連接,命令通過該通道流動,沒有每次操作的往返開銷。獨立基準測試一致顯示,Playwright在測試套件級別比Selenium快30-50%,每次操作平均約290毫秒,而Selenium約536毫秒。對於可能執行數百次操作的瀏覽器代理,這種差距會疊加。
Playwright還捆綁了自己的瀏覽器二進制文件。安裝時,你會獲得與Playwright版本兼容的Chromium、Firefox和WebKit預配置版本,沒有驅動版本不匹配或CI流水線因Chrome更新而中斷的問題。它內置了自動等待——在點擊元素前會驗證元素可見、啓用且不在動畫中,無需編寫time.sleep(2)碰運氣。
對於AI代理,Playwright觸發真實的鼠標和鍵盤事件,模擬人類與瀏覽器的交互方式。設計用於檢測自動化的網站會尋找合成DOM點擊,而Playwright的交互模型更難與真實人類輸入區分。
此外還有browser-use庫,它位於更高一層。browser-use是一個Python庫,為LLM提供可工作的瀏覽器。底層使用Playwright驅動瀏覽器,但LLM讀取頁面狀態並決定點擊、輸入和提取什麼,無需CSS選擇器。你只需用自然語言描述任務,它就會完成剩下的工作。本文將覆蓋原始Playwright和browser-use,因為它們滿足不同需求:Playwright用於精確、可預測的控制,browser-use用於代理自主處理導航決策。
環境搭建
你需要Python 3.10或更高版本、OpenAI API密鑰以及大約五分鐘時間。
- 創建虛擬環境:
python -m venv browser_agent_env,然後激活(Linux/macOS:source browser_agent_env/bin/activate;Windows:browser_agent_env\Scripts\activate)。 - 安裝依賴:
pip install playwright browser-use langchain langchain-openai langgraph langchain-community python-dotenv。 - 安裝瀏覽器二進制文件:運行
playwright install chromium(或playwright install安裝所有三種引擎)。這是許多人遺漏的步驟。 - 存儲API密鑰:在項目目錄中創建
.env文件,加入OPENAI_API_KEY=your_api_key_here,並立即添加到.gitignore。 - 驗證工作環境:運行一個簡單腳本,導航到example.com,讀取標題並截圖保存。如果運行成功,環境就配置好了。
網頁導航與抓取
你之所以需要Playwright而不是requests+BeautifulSoup,是因為JavaScript渲染。現代網站先發送HTML框架,然後通過JavaScript動態構建實際內容(React、Vue、Angular、Next.js)。普通的HTTP請求只能獲取框架,而Playwright運行真實瀏覽器,可以像人類一樣看到所有JavaScript執行後的內容。
示例目標為books.toscrape.com,這是一個合法的抓取練習沙盒。它分頁顯示結果,使用動態類名錶示評級,較真實地反映了電商產品頁的結構。
核心代碼展示瞭如何使用wait_for_selector等待特定元素出現後再提取數據,而不是固定延時。評級提取通過CSS類名(如star-rating Three)解析出文本值。這是處理動態頁面時常見的模式。
與LLM集成:瀏覽器代理的工作流
將瀏覽器操作連接到LLM,可以使用browser-use庫和LangGraph構建代理工作流。基本概念是:LLM(如GPT-4)讀取當前頁面內容,決定下一步操作(點擊、輸入、提取、導航),然後執行並觀察結果,循環直到任務完成。
對於高級用例,需要處理反爬蟲檢測(如使用更真實的用户代理、調整視口大小、隨機延遲)、管理會話狀態(保持登錄狀態)以及使用Docker容器化部署,確保可重現性和隔離性。
L總結
本文從零開始構建了一個能使用瀏覽器的AI代理:從Playwright的基礎知識到與LangGraph和browser-use集成,再到實際部署考慮。無論你是要自動化填寫表格、抓取動態數據,還是構建一個能自主瀏覽網頁的AI助手,這些模式都適用。瀏覽器代理已將AI能力擴展到API無法覆蓋的95%的網站任務中。