Closed shadow root недоступен через .shadowRoot — оно возвращает null. На sandbox-странице разработчик намеренно сохранил ссылку в window.__closedShadowRoot — это учебный приём, в реальных сайтах можно попробовать найти аналогичную утечку и тогда эти примеры могут быть полезны иначе используйте поиск по картинке.
На sandbox-странице: хост — #shadow-host-closed, внутри #shadow-closed-input, #shadow-closed-pass, #shadow-closed-btn.
Прочитать значение поля
string val = instance.ActiveTab.MainDocument.EvaluateScript(
"return window.__closedShadowRoot.querySelector('#shadow-closed-input').value;"
);
project.SendInfoToLog("closed input: " + val);Кликнуть кнопку
instance.ActiveTab.MainDocument.EvaluateScript(
"window.__closedShadowRoot.querySelector('#shadow-closed-btn').click();"
);Прочитать поле пароля
string pass = instance.ActiveTab.MainDocument.EvaluateScript(
"return window.__closedShadowRoot.querySelector('#shadow-closed-pass').value;"
);
project.SendInfoToLog("pass: " + pass);Проверить что root доступен
string check = instance.ActiveTab.MainDocument.EvaluateScript(
"return window.__closedShadowRoot ? 'доступен' : 'null';"
);
project.SendInfoToLog(check);Использовать JsGet
string val = instance.JsGet(
"window.__closedShadowRoot.querySelector('#shadow-closed-input')",
"value"
);
project.SendInfoToLog(val);Как искать утечку в реальных сайтах
Если window.__closedShadowRoot не существует — нужно искать где сайт сохраняет ссылку. Типичные места: глобальные переменные, кастомные свойства компонентов, React/Vue internals. Это задача для DevTools, не для ZennoPoster.