by Rain Chu | 8 月 8, 2025 | Agent, AI, Javascript, Python, RPA, 瀏覽器, 程式開發
想用 AI 控制網頁自動化,但程式碼又要精準可靠,同時享受自然語言,高效又方便?那你絕不能錯過由 Browserbase 團隊推出的 Stagehand —— 這款專為 AI 時代設計的瀏覽器自動化框架,不僅支援 TypeScript 與 Python、可本地或雲端部署,還比 Browser‑Use 更快、更耐變動!
Stagehand 兼具控制力與智慧的 AI 瀏覽器自動化框架
Stagehand 是以 Playwright 為核心構建的 AI-native 自動化工具,它加入了 LLM 判斷能力,結合程式精準控制與自然語言指令,令自動化腳本更穩定、更智慧也更高效
- 自然語言 + 程式碼混合操作:你可以用程式寫明確動作,也能用「act(‘點擊第一個 Stagehand 元件’)」這樣類人語法完成UI操作 。
- 接口完整,支援察看、執行與資料萃取:核心三大命令
act
、observe
、extract
,讓操作更透明、更可控
- 容錯與自恢復能力:UI 略有變動也不怕,Stagehand 的
observe
+ 快取策略讓腳本更具彈性
- 完美整合 Playwright:所有 Playwright 腳本都能無縫升級 Stagehand,省心又高效
核心玩法!TypeScript/JavaScript 快速上手範例
這段程式完整示範了初始化、導航、AI 驅動操作到資料萃取的流程,不僅省事,也大幅提升開發效率。
Stagehand 與 Browser-Use 比較
功能面 | Stagehand(此文主角) | Browser-Use |
---|
控制精準度 | Token 級動作掌控 + 自然語言指令混合 | 攻擊角度偏自然語言,程式控制較弱 |
容錯能力 | observe + 快取策略,對 DOM 變化更耐受 | 缺少自恢復機制 |
雲端支援 | 原生整合 Browserbase,輕鬆雲端部署 | 需額外集成,無預設雲平台支援 |
語言支援 | TypeScript / Python | 主要依賴 Python |
AI 整合 | 天生結合 LLM,支援複雜任務拆解 | 依賴外部 LLM,不那麼一體化 |
實戰快速導覽
安裝
建立 .env
export BROWSERBASE_API_KEY="your_browserbase_api_key"
export BROWSERBASE_PROJECT_ID="your_browserbase_project_id"
export MODEL_API_KEY="your_model_api_key" # OpenAI, Anthropic, etc.
建立程式碼
import asyncio
import os
from stagehand import Stagehand, StagehandConfig
from dotenv import load_dotenv
load_dotenv()
async def main():
config = StagehandConfig(
env="BROWSERBASE",
api_key=os.getenv("BROWSERBASE_API_KEY"),
project_id=os.getenv("BROWSERBASE_PROJECT_ID"),
model_name="gpt-4o",
model_api_key=os.getenv("MODEL_API_KEY")
)
stagehand = Stagehand(config)
try:
await stagehand.init()
page = stagehand.page
await page.goto("https://docs.stagehand.dev/")
await page.act("click the quickstart link")
result = await page.extract("extract the main heading of the page")
print(f"Extracted: {result}")
finally:
await stagehand.close()
if __name__ == "__main__":
asyncio.run(main())
驗證與測試
若要用本地端的瀏覽器的話,可以改成下面的程式碼
import asyncio
import os
from dotenv import load_dotenv
from stagehand import StagehandConfig, Stagehand
load_dotenv()
async def main():
# 检查API密钥是否设置
api_key = os.getenv("OPENAI_API_KEY")
config = StagehandConfig(
env="LOCAL", # 本地运行
# AI模型配置 - 使用环境变量
model_name="gpt-4o-mini", # 使用更便宜的模型
model_api_key=api_key, # 从环境变量读取
# 本地运行配置
headless=False, # 显示浏览器窗口
verbose=3, # 详细日志
debug_dom=True, # DOM调试
)
# 使用配置创建Stagehand实例
stagehand = Stagehand(config)
# 初始化Stagehand(启动浏览器会话)
await stagehand.init()
# 获取页面对象,用于后续的页面操作
page = stagehand.page
await page.goto("https://rain.tips/")
# # 使用observe()取得文章的連結
blog_links = await page.observe("取得文章中的所有連結)
print(f"✅ Page link: {blog_links}")
await page.act(blog_links[0])
data_post_1 = await page.extract("取得文章的標題和內文")
print(f"✅ 文章資訊如下: {data_post_1}")
if __name__ == "__main__":
asyncio.run(main())
總結:為什麼 Stagehand 是下一代自動化框架?
- 語言直覺更自然,人類可理解
- 對 UI 變化具彈性、不易失效
- 結合 LLM,自動拆解任務,效率提升數倍
- 支援本地與雲端,開發與生產環境都得心應手
Stagehand 正重新定義瀏覽器自動化,不再只是死板指令,而是一場「程式控+AI 智能」的完美結合,無論對開發者或 AI 自動化愛好者,都是一大利器。快一起駕馭它,打造更強、更智慧的自動化流程!
參考資料
BrowserBase
GitHub Stagehand
Demo
開發說明文件
https://www.aivi.fyi/aiagents/introduce-stagehand
https://www.browserbase.com
by Rain Chu | 4 月 26, 2025 | Python, 程式
UIAutoDev 是一款不可或缺的工具,它支援 Android 和 iOS 平台,提供直觀的圖形介面,讓開發者能夠輕鬆地定位 UI 元素、生成選擇器,並進行色彩分析。
UIAutoDev UI DEMO
🔧 UIAutoDev 的核心特色
1. 支援 Android 和 iOS 平台
UIAutoDev 同時支援 Android 和 iOS 裝置的 UI 元素檢視與操作。對於 iOS,用戶需自行啟動 WebDriverAgent(WDA)服務,以實現與裝置的連接。
2. 直觀的控件選擇與屬性檢視
透過滑鼠點選應用程式中的控件,UIAutoDev 會即時顯示該元素的屬性資訊,如 resource-id
、text
、class
等,並在控件樹中高亮顯示,方便用戶精確定位。
3. 自動生成 XPath 選擇器
UIAutoDev 能夠根據選取的控件,自動生成多個 XPath 選擇器,並標示每個選擇器匹配的元素數量,協助用戶選擇最合適的定位方式。
4. 色彩分析與坐標微調
工具提供找色功能,允許用戶獲取指定位置的 RGB 和 HSB 色值。同時,透過方向鍵微調坐標,精確定位需要操作的區域,提升自動化腳本的準確性。
🚀 安裝與使用指南
1. 安裝 Python 環境
確保系統已安裝 Python 3.8 或以上版本。
2. 安裝 UIAutoDev
在終端機中執行以下命令:
3. 啟動 UIAutoDev
安裝完成後,執行以下命令啟動工具:
啟動後,瀏覽器將自動打開 UIAutoDev 的網頁介面。
4. 連接裝置
- Android:啟用開發者選項並允許 USB 偵錯,使用 USB 或 Wi-Fi 連接裝置。
- iOS:啟動 WebDriverAgent(WDA)服務,並確保裝置與電腦在同一網路下。
5. 使用工具進行 UI 元素定位
- 在網頁介面中選擇已連接的裝置。
- 點擊「刷新」按鈕,同步裝置當前畫面。
- 使用滑鼠點選畫面中的控件,查看其屬性資訊,並在右側控件樹中進行導航。
- 利用自動生成的 XPath 選擇器,快速編寫自動化腳本。
🧪 實際應用範例
可以先看DEMO
以下是一段使用 uiautomator2
與 UIAutoDev 結合的 Python 腳本範例:
import uiautomator2 as u2
# 連接到裝置
d = u2.connect()
# 啟動應用程式
d.app_start("com.example.app")
# 點擊指定的控件
d(resourceId="com.example.app:id/button").click()
# 輸入文字
d(resourceId="com.example.app:id/input").set_text("測試輸入")
# 關閉應用程式
d.app_stop("com.example.app")
透過 UIAutoDev 提供的控件屬性資訊,您可以輕鬆取得 resource-id
等屬性,快速編寫上述腳本。
參考資料
https://testerhome.com/topics/40069
by Rain Chu | 3 月 27, 2025 | Python, 程式
當你在開發 Python 時,將程式轉換為可執行檔案(如 .exe
)並提升執行效率是許多開發者關心的議題,Nuitka 是一款大家都推薦的 Python 編譯器,能夠將 Python 原始碼編譯為 C 語言,進而生成高效的可執行檔案,今天來介紹 Nuitka 的安裝、封裝流程、靜態檔案,與相依套件的處理,以及常見問題與性能優化建議,讓即使是初學者也能輕鬆上手。
1. 安裝與執行封裝
安裝 Nuitka
- 安裝 C++ 編譯器:Nuitka 需要 C++ 編譯器來編譯生成的 C 程式碼。在 Windows 系統上,推薦安裝 MinGW64。
- 安裝 Nuitka:使用
pip
安裝 Nuitka:
執行封裝
假設您的主程式為 main.py
,可以使用以下命令將其封裝為可執行檔案:
nuitka --standalone --mingw64 --enable-plugins=tk-inter --disable-console --remove-output --onefile --output-dir=output main.py
上述命令的參數說明:
--standalone
:生成獨立的可執行檔案,包含所有相依套件。
--mingw64
:使用 MinGW64 作為編譯器。
--enable-plugins=tk-inter
:啟用 tkinter
插件,根據實際使用的套件啟用相應插件。
--disable-console
:隱藏執行時的控制台視窗,適用於 GUI 應用程式。
--remove-output
:在編譯完成後移除中間產物。
--output-dir=output
:指定輸出目錄為 output
。
- –onefile:如果希望輸出為單一
.exe
檔案
如果是要用 Visual Studio C++ 來封裝的話可以改用
nuitka --standalone --msvc=latest --enable-plugins=tk-inter --disable-console --remove-output --output-dir=output main.py
2.靜態檔案的處理
在某些應用中,可能需要包含額外的靜態檔案(如圖片、配置檔案)。Nuitka 提供了 --include-data-dir
參數來處理這些檔案:
此命令將當前目錄下的 static
資料夾包含到生成的可執行檔案中,並在執行時可正常訪問。
3.相依套件的處理
Nuitka 會自動檢測並包含大多數的相依套件。然而,對於某些特殊的套件,可能需要手動啟用相應的插件。例如,若您的程式使用了 PySide6
,則需要在編譯時啟用該插件:
您可以使用 nuitka --plugin-list
命令查看所有可用的插件列表。
4.常見問題的處理
Nuitka 在首次編譯大型專案時可能需要較長時間。為了加快編譯速度,可以安裝 ccache
來進行編譯快取。
由於 Nuitka 會將所有相依套件包含在內,生成的可執行檔案可能較大。可以嘗試使用 --onefile
參數將所有內容打包成單一檔案,或使用壓縮工具對生成的檔案進行壓縮。
5.關於速度的優化
Nuitka 通過將 Python 程式編譯為 C 語言,通常能提升程式的執行效率。然而,實際的性能提升取決於程式的結構和內容。為了獲得最佳性能,建議:
- 優化原始碼:確保程式碼中沒有不必要的計算和冗餘。
- 使用內建函數:盡可能使用 Python 的內建函數,因為它們通常經過高度優化。
- 避免過度使用動態特性:如
eval
、exec
等,這些可能影響編譯器的優化能力。
6.🌟使用 Nuitka GUI 友善介面
因為既指令很麻煩,推薦使用 Nuitka GUI,這是一款直覺且操作簡單的圖形介面工具。
Nuitka 官方 GUI 安裝:
開啟 Nuitka GUI:
或是用開源的 GUI
https://github.com/271374667/NuitkaGUI
參考資料
https://nuitka.net
by Rain Chu | 11 月 6, 2024 | Python, 程式
可以在 windows, mac, Linux 上使用,自動地透過滑鼠鍵盤來控制你的電腦畫面,還支援螢幕截圖
簡易使用方法
安裝 pyautogui
使用 pyautogui
螢幕截圖
pyautogui.screenshot('screenshot.png')
滑鼠控制
pyautogui.moveTo(100, 100, duration = 1.5) #用1.5秒移動到x=100,y=100的位置
pyautogui.dragTo(100, 100, duration=2, button='right') #用2秒按住滑鼠右鍵到x=100,y=100的位置
pyautogui.click(clicks=2, interval=0.5, button='right') #雙擊左鍵並且中途間隔0.5秒
鍵盤控制
pyautogui.keyDown('ctrl')
pyautogui.press('a')
pyautogui.keyUp('ctrl') #全選的功能鍵效果
pyautogui.hotkey('ctrl', 'shift', 'esc') #開啟工作管理員的快捷鍵
資源
PyAutoGUI 說明文件
PyAutoGUI 原始碼
中文說明檔
相關資源
by rainchu | 10 月 2, 2024 | Python, 程式
啟用 Excel 中的 Python
在輸入框中,輸入 =py 然後按下 TAB ,就會進入下圖,儲存格前面變成有綠色框的PY,這時就可以輸入 Python 程式碼了
繪製企鵝圖的公式
# 台積電股價的小提琴圖
stock2303 = xl("A1:G218", headers=True)
sns.set_theme (font='SimHei', font_scale=0.8)
plt.figure(dpi=300)
plt.ylabel('量', rotation = 0, labelpad=15)
sns.violinplot(x="成交價", y="分量(張)", data = stock2303)
參考資料
資料探索與視覺化的優秀入門數據集,https://github.com/allisonhorst/palmerpenguins
各種 python 圖表的程式碼範例,https://seaborn.pydata.org/examples/index.html
by rainchu | 8 月 7, 2024 | Python
現在AI的時代,實在是離不開python,有時候想要快速的驗證程式設計,並且對外服務,給外部的人測試,這時候可以考慮把在 CLI 執行的 python code ,改成 web api,讓外部的人測試看看,改法如下
步驟 1: 安裝 Flask
步驟 2 : 建立一個 Web APP
可以建立一個名為 webapi.py 的檔案,並且輸入以下程式碼,這樣就可以簡單地把 GraphRAG 的服務對外
from flask import Flask, request, jsonify
import subprocess
import shlex
app = Flask(__name__)
@app.route('/query', methods=['POST'])
def query():
# 获取请求中的问题
data = request.json
question = data.get('question')
if not question:
return jsonify({'error': 'No question provided'}), 400
# 构建 CLI 命令
command = f"python -m graphrag.query --root ./ragtest --method local \"{question}\""
# 安全地处理命令
args = shlex.split(command)
# 执行命令
try:
result = subprocess.run(args, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
response = result.stdout
# 假设输出中包含 "SUCCESS:" 和我们需要的答案
if "SUCCESS:" in response:
answer = response.split("SUCCESS:")[1].strip() # 取得成功后的文本作为答案
return jsonify({'answer': answer})
else:
return jsonify({'error': 'Failed to get a valid response from the CLI tool'}), 500
except subprocess.CalledProcessError as e:
return jsonify({'error': str(e)}), 500
if __name__ == '__main__':
app.run(debug=True, port=5000)
步驟 3 : 開啟服務
步驟 4 : 使用 API
curl -X POST http://localhost:5000/query -H "Content-Type: application/json" -d "{\"question\": \"新修正之勞工特別休假日數有多少?\"}"
延伸閱讀
近期留言