Select Page

Stagehand 教學|AI 驅動的瀏覽器自動化神器,TypeScript 與 Python 都支援!

想用 AI 控制網頁自動化,但程式碼又要精準可靠,同時享受自然語言,高效又方便?那你絕不能錯過由 Browserbase 團隊推出的 Stagehand —— 這款專為 AI 時代設計的瀏覽器自動化框架,不僅支援 TypeScript 與 Python、可本地或雲端部署,還比 Browser‑Use 更快、更耐變動!

Stagehand 兼具控制力與智慧的 AI 瀏覽器自動化框架

Stagehand 是以 Playwright 為核心構建的 AI-native 自動化工具,它加入了 LLM 判斷能力,結合程式精準控制與自然語言指令,令自動化腳本更穩定、更智慧也更高效

  • 自然語言 + 程式碼混合操作:你可以用程式寫明確動作,也能用「act(‘點擊第一個 Stagehand 元件’)」這樣類人語法完成UI操作 。
  • 接口完整,支援察看、執行與資料萃取:核心三大命令 actobserveextract,讓操作更透明、更可控
  • 容錯與自恢復能力: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
提升 App 測試效率:UIAutoDev UI定位與 XPath 自動生成指南

提升 App 測試效率:UIAutoDev UI定位與 XPath 自動生成指南

UIAutoDev 是一款不可或缺的工具,它支援 Android 和 iOS 平台,提供直觀的圖形介面,讓開發者能夠輕鬆地定位 UI 元素、生成選擇器,並進行色彩分析。

UIAutoDev UI DEMO

🔧 UIAutoDev 的核心特色

1. 支援 Android 和 iOS 平台

UIAutoDev 同時支援 Android 和 iOS 裝置的 UI 元素檢視與操作。​對於 iOS,用戶需自行啟動 WebDriverAgent(WDA)服務,以實現與裝置的連接。​

2. 直觀的控件選擇與屬性檢視

透過滑鼠點選應用程式中的控件,UIAutoDev 會即時顯示該元素的屬性資訊,如 resource-idtextclass 等,並在控件樹中高亮顯示,方便用戶精確定位。​

3. 自動生成 XPath 選擇器

UIAutoDev 能夠根據選取的控件,自動生成多個 XPath 選擇器,並標示每個選擇器匹配的元素數量,協助用戶選擇最合適的定位方式。​

4. 色彩分析與坐標微調

工具提供找色功能,允許用戶獲取指定位置的 RGB 和 HSB 色值。​同時,透過方向鍵微調坐標,精確定位需要操作的區域,提升自動化腳本的準確性。​


🚀 安裝與使用指南

1. 安裝 Python 環境

確保系統已安裝 Python 3.8 或以上版本。​

2. 安裝 UIAutoDev

在終端機中執行以下命令:

pip install uiautodev

3. 啟動 UIAutoDev

安裝完成後,執行以下命令啟動工具:

python -m 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

Nuitka GUI 入門指南:Python 封裝成 exe,小白友善介面快速搞定

Nuitka GUI 入門指南:Python 封裝成 exe,小白友善介面快速搞定

當你在開發 Python 時,將程式轉換為可執行檔案(如 .exe)並提升執行效率是許多開發者關心的議題,Nuitka 是一款大家都推薦的 Python 編譯器,能夠將 Python 原始碼編譯為 C 語言,進而生成高效的可執行檔案​,今天來介紹 Nuitka 的安裝、封裝流程、靜態檔案,與相依套件的處理,以及常見問題與性能優化建議,讓即使是初學者也能輕鬆上手。​

1. 安裝與執行封裝

安裝 Nuitka

  1. 安裝 C++ 編譯器:​Nuitka 需要 C++ 編譯器來編譯生成的 C 程式碼。在 Windows 系統上,推薦安裝 MinGW64。
  2. 安裝 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 的內建函數,因為它們通常經過高度優化。​
  • 避免過度使用動態特性:​如 evalexec 等,這些可能影響編譯器的優化能力。

6.🌟使用 Nuitka GUI 友善介面

因為既指令很麻煩,推薦使用 Nuitka GUI,這是一款直覺且操作簡單的圖形介面工具。

Nuitka 官方 GUI 安裝:

開啟 Nuitka GUI:

或是用開源的 GUI

https://github.com/271374667/NuitkaGUI

參考資料

https://nuitka.net

PyAutoGUI-自動控制你的電腦

可以在 windows, mac, Linux 上使用,自動地透過滑鼠鍵盤來控制你的電腦畫面,還支援螢幕截圖

簡易使用方法

安裝 pyautogui

pip install pyautogui

使用 pyautogui

import 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 原始碼

中文說明檔

相關資源

用EXCEL製作專業的Python圖

用EXCEL製作專業的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

將你的Python程式碼改成 web api

現在AI的時代,實在是離不開python,有時候想要快速的驗證程式設計,並且對外服務,給外部的人測試,這時候可以考慮把在 CLI 執行的 python code ,改成 web api,讓外部的人測試看看,改法如下

步驟 1: 安裝 Flask

pip install 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 : 開啟服務

python webapi.py

步驟 4 : 使用 API

curl -X POST http://localhost:5000/query -H "Content-Type: application/json" -d "{\"question\": \"新修正之勞工特別休假日數有多少?\"}"

延伸閱讀