可串接 / 可過濾的候選定位器

anchor_locator 解析單一錨點→目標關係,``grid_locator`` 定址網格儲存格;兩者都不支援對候選集合做*可組合的細化* ——.within(panel).filter(has_text="Delete").nth(2)——這是 Selenium-4 / Playwright 的串接並過濾定位慣用法。 目前細化得重新查詢後端。本功能是對來自*任何*來源(模板比對、OCR、a11y 樹、融合並排序螢幕元素框)的框做純 後置過濾。

Candidates 包裝一串 {x, y, width, height, …} 框;每個方法都回傳*新的* Candidates,因此鏈式呼叫無副作用 且完全可單元測試。純標準函式庫,不匯入 PySide6

無頭 API

from je_auto_control import from_boxes

target = (from_boxes(boxes)                    # 來自任何定位器的框
          .within((0, 0, 1920, 120))           # 只取工具列
          .filter(has_text="Delete")           # 只取刪除按鈕
          .sort_reading()                       # 由左到右
          .nth(1))                              # 第二個
if target.center():
    click(*target.center())

within(region) 保留中心落在矩形內的框;``filter`` 保留符合所有條件的框(has_text 子字串、near (x, y, max_dist) 鄰近、min_area / max_area,或任意 predicate);``sort_reading`` 排序; nth / first / last 選取;``resolve()`` 回傳存活清單、center() 回傳第一個框的中心。鏈式呼叫永不 變動原集合。

執行器命令

AC_locate_chainboxes 陣列依序套用一串 JSON ops——{op:"within",region:[…]}{op:"filter",has_text:…}{op:"reading"}{op:"nth",index:…}{op:"first"}{op:"last"}—— 回傳 {count, boxes, center}。它以 MCP 工具 ac_locate_chain 以及 Script Builder 中 Image 分類下的命令提供。