自動化Trae Apollo參數解釋的批量獲取
- 一、背景介紹
- 二、設計思路
- 三、操作步驟
- 1. 環境準備
- 2. 獲取界面坐標
- 3. 定位關鍵元素
- 4. 執行自動化查詢
- 5. 獲取結果
- 四、完整代碼
- 五、擴展應用
一、背景介紹
在自動駕駛開發中,百度Apollo平臺提供了大量參數用于調整系統行為。Trae添加Apollo工程后,可以通過交互的方式詢問參數的作用,但存在兩個痛點:
- Trae沒有提供API接口,無法通過編程方式獲取參數解釋
- 手動查詢大量參數效率極低(如Apollo 9.0有2000+參數)
為解決這些問題,準備了一個Python自動化腳本,通過模擬人工操作的方式:
- 自動輸入參數名
- 觸發Trae查詢
- 捕獲并保存解釋文本
實現了Apollo參數解釋的批量獲取,大幅提升參數研究效率。
二、設計思路
整個自動化流程模擬人類操作行為,核心解決三個關鍵問題:
-
界面交互定位
通過圖像識別確定按鈕狀態(特別是發送按鈕的"空閑"狀態) -
操作模擬鏈
輸入參數 → 點擊發送 → 等待響應 → 復制結果 → 保存數據
-
狀態檢測機制
使用OpenCV比對按鈕區域截圖,精確判斷Trae響應狀態
三、操作步驟
1. 環境準備
安裝依賴庫:
pip install pyautogui opencv-python pillow keyboard pyperclip pywin32
2. 獲取界面坐標
-
啟動Trae,添加工程,打開聊天界面,創建一個智能體,輸入提示詞
-
運行腳本(取消注釋以下代碼):
# 第一步: 獲取底圖
screenshot1 = capture_screen()
screenshot1.save("base.bmp")# 第三步: 保存空閑時發送按鈕的圖標
img=cv2.imread('base.bmp')
x,y=btn_snd_pos
w,h=btn_snd_size
ico=img[y:y+h,x:x+w,:]
cv2.imwrite("idle.bmp",ico)
3. 定位關鍵元素
使用畫圖工具打開base.bmp
,記錄以下坐標(示例值需替換):
btn_snd_pos=(862,914) # 發送按鈕中心坐標
btn_snd_size=(29,29) # 發送按鈕尺寸
btn_copy_pos=(296,754) # 復制按鈕坐標
edt_input_pos=(362,871) # 輸入框坐標
4. 執行自動化查詢
- 將要查詢的參數寫入列表:
args = ['enable_multi_agent_vehicle_evaluator','prediction_eval_mode','enable_multi_thread'# 添加更多參數...
]
- 運行主程序:
python trae_automation.py
5. 獲取結果
所有參數解釋將保存到result.md
,按參數名分章節存儲。
四、完整代碼
import pyautogui
import keyboard
from PIL import Image, ImageGrab
import pyperclip
import time
import cv2
import win32clipboarddef clear_clipboard():"""清空剪切板內容"""try:win32clipboard.OpenClipboard()win32clipboard.EmptyClipboard()win32clipboard.CloseClipboard()return Trueexcept Exception as e:print(f"清空剪切板失敗: {e}")return Falsedef capture_screen(region=None):"""截取全屏或指定區域"""screenshot = ImageGrab.grab()return screenshotdef mouse_click(x, y, clicks=1, interval=0.1):"""模擬鼠標點擊"""pyautogui.click(x, y, clicks=clicks, interval=interval)def copy_to_clipboard(text):"""復制文本到剪切板"""pyperclip.copy(text)def paste_from_clipboard():"""獲取剪切板內容"""return pyperclip.paste()def send_ctrl_v():"""發送Ctrl+V粘貼"""keyboard.press_and_release('ctrl+a')keyboard.press_and_release('del')keyboard.press_and_release('ctrl+v')def cacl_distance(img1, img2):diff = cv2.absdiff(img1, img2)return diff.sum()def wait_ico(name,btn_snd_pos,btn_snd_size):'''# 圖像狀態檢測(等待發送按鈕空閑)'''idle=cv2.imread(name)idle_gray = cv2.cvtColor(idle, cv2.COLOR_RGB2GRAY)x,y=btn_snd_posw,h=btn_snd_sizewhile True:screenshot1 = capture_screen()screenshot1.save("temp.bmp")img=cv2.imread('temp.bmp')ico=img[y:y+h,x:x+w,:]ico_gray = cv2.cvtColor(ico, cv2.COLOR_RGB2GRAY)distance = cacl_distance(ico_gray, idle_gray)# 計算與空閑狀態的差異值if distance<10: # 差異小于閾值說明狀態相同breaktime.sleep(1)def input_message(text,edt_input_pos):copy_to_clipboard(text)mouse_click(edt_input_pos[0],edt_input_pos[1])time.sleep(1)send_ctrl_v()def get_message(btn_copy_pos):mouse_click(btn_copy_pos[0]+16,btn_copy_pos[1]+16)return paste_from_clipboard()def main(): # 第一步: 獲取底圖#screenshot1 = capture_screen()#screenshot1.save("base.bmp") # 第二步: 用畫圖工具,得到發送按鈕,復制按鈕,輸入框的坐標 btn_snd_pos=(862,914)btn_snd_size=(29,29)btn_copy_pos=(296,754)edt_input_pos=(362,871)# 第三步: 保存空閑時發送按鈕的圖標#img=cv2.imread('base.bmp')#x,y=btn_snd_pos#w,h=btn_snd_size #ico=img[y:y+h,x:x+w,:]#cv2.imwrite("idle.bmp",ico)args=['enable_multi_agent_vehicle_evaluator','prediction_eval_mode','enable_multi_thread']# 等待空閑wait_ico('idle.bmp',btn_snd_pos,btn_snd_size)fo=open("result.md","a+")for arg in args: print(arg)# 發送請的請求input_message(arg,edt_input_pos)time.sleep(3)mouse_click(btn_snd_pos[0]+16,btn_snd_pos[1]+16)time.sleep(3)# 移動走鼠標mouse_click(btn_copy_pos[0]+16,btn_copy_pos[1]+16)# 等待空閑wait_ico('idle.bmp',btn_snd_pos,btn_snd_size)# 保存結果fo.write(f"# {arg}\n")msg=get_message(btn_copy_pos)print(msg)fo.write(f'{msg}\n')fo.flush()# 清空剪切板clear_clipboard() if __name__ == "__main__":main()
關鍵技術點解析
防干擾設計
- 每次操作后移動鼠標到非交互區
- 清空剪貼板避免內容污染
- 雙保險等待機制(固定延時+狀態檢測)
健壯性保障
# 清空輸入框再粘貼 keyboard.press_and_release('ctrl+a') keyboard.press_and_release('del')
五、擴展應用
此方案不僅適用于Trae,還可遷移到其他無API的桌面應用,例如:
- 自動化測試GUI軟件
- 批量操作ERP系統
- 游戲自動化腳本
- 定時填報網頁表單
注意事項:自動化操作需遵守目標軟件的用戶協議,本方案僅用于技術研究,請勿用于商業侵權用途。