吏有牍。吾请其择一物。吏拒之。
Element not found
更之。犹同。
遂启工具,挲入:
document.querySelector('select[name="status"]')
// null
null。于显有选单之页。吾见之。吾触之。吾以指展之。然无故document.querySelector坚执其无。
此乃一谈三层DOM互不言语之故,及safari_select_option于Safari MCP之v2.11.3中,欲越此三层而达之学也.
其设
此页乃Salesforce/Lightning之支持表单,嵌于客户门户之中。门户为父文书。表单处<iframe> 闪电之舟自异域(同源)之主而出。其内,闪电自元素之图织其界面,各元素有独用之影根,各元素有自具之布局。
故当开发者于闪电撰“状态”之选单,其实际<select>元素终呈于类此之境:
top document
└── <iframe src="...lightning host...">
└── <support-form>
└── #shadow-root
└── <lightning-status-field>
└── #shadow-root
└── <select> ← the element my agent needed
document.querySelector('select[name="status"]'),源自顶层文档,不涉及其间。非iframe,非阴影根。于其视之,<select>形同虚设。
何故困惑
二事使此不易察觉:
-
safari_snapshot未见之。 代理取页之可及性影,则见下拉之选,具引、具标、具aria-expanded之状、具项。无缺遗之憾。 -
safari_click之效彰。 吾数周矣,轻点深DOM之元,未尝思量。此启同表之钮,处异影根之内,点之则解,无滞碍焉。
故代理自忖曰:"吾方点此表单,下拉之选赫然在目,何不能择一物耶?"
然耻于言者,盖click与select_option所用者,乃不同之寻器也.
二寻器,一未闻之器
Safari MCP于页内纳二元素解析径。
-
mcpFindRef(ref)— 既得引据自safari_snapshot, 循文书而行,遍历同源iframe,及可及之影根,以觅ref所指之素。 -
mcpQuerySelectorDeep(selector)— 既得CSS选择器,亦当深巡,惟以选择器相配,非以参照也。
点击者久用此二者。是故点击于闪电表单及React组件库与模态对话框之渲染门户,皆"自顺其然"。
safari_select_option,而点击者犹行此道:
var el = document.querySelector(sel);
仅一行。顶框而已。无iframe,无shadow root,无他物。于寻常之境<select>常页之中,此行无碍,自工具成之日便如此,故无人更之。
然一旦有用户将 Safari MCP 投入 Salesforce 之真实门户,是线于每呼皆谬。
其补
《v2.11.3之补丁甚微,其教之》safari_select_option何哉safari_click已知之矣
let finder;
if (ref) {
finder = `mcpFindRef('${ref}')`;
} else if (selector) {
finder = `(document.querySelector('${sel}')||mcpQuerySelectorDeep('${sel}'))`;
}
二途:
-
ref一途 — 乃用以寻诸物于safari_snapshot。其解同于点击之深行者,若iframe、影根、嵌套组件之属皆可。 -
selector一途 — 当初以廉价之顶框查询,犹九五之数其效,若其返虚,则继之以深行者。
其器余事 — _valueTracker之重置,可醒React之控输入簿记;input之值、文、子串匹配,适于选器,其显文不等于其值者;change之/之/之……blur之事序未改。彼处未损。元素寻访如常。
吾当早为之计者
此实情乃:吾有二寻器。一器用于点击。及撰select_option时,吾忘其存在。修复费时一辰。然此弊已存三月矣。
吾于造此器之中,屡屡重悟者,乃DOM之器,不宜有"坦途"之设。凡解元素之器,皆当如一,盖页不知次将呼何器也。入影根,试填一域,填器宜视点击之处。
safari_fill,safari_get_element、safari_hover、safari_get_computed_style — 皆尝经此迁移于v2.x之序初,逐弊报而迁。safari_select_option乃余未察之终。v2.11.3遂合其隙。
若尔建browser自动化之器——无论MCP与否——则今夜当自问其码:凡我元素解析之径,其指“元素”为何,果能同乎?盖其日异,则代理者将自知之。
Safari MCP乃开源之器(MIT),存于github.com/achiya-automation/safari-mcp。 macOS 上 AI 代理之原生浏览器自动化——尔之真 Safari,尔之真登录,无 Chrome。












