для клика, выполняете JS со своим селектором. в примере клик по полю ввода
var result = (function findAndClick(root = document) {
// 1. Поиск Элемента в текущем root (document или shadowRoot)
const button = root.querySelector('#q');
if (button) {
button.click();
return true; // Элемент найден и кликнут
}
// 2. Поиск всех shadowRoot внутри текущего root
const shadowRoots = Array.from(root.querySelectorAll('*'))
.filter(el => el.shadowRoot)
.map(el => el.shadowRoot);
// 3. Рекурсивный поиск в каждом shadowRoot
for (const shadowRoot of shadowRoots) {
if (findAndClick(shadowRoot)) return true;
}
return false; // Элемент не найден
})();
return result ? "Элемент найден и нажат" : "Элемент не найден";
после клика, можно использовать эмуляцию клавиатуры
сразу видно - поколение gpt, запросил у нейронки код,
а что этот код при работе с зеннопостером не имеет самого важного метода - понимания нет ...
когда мы в браузере кликаем на поле поиска - у нас появляется прямой слэш "|",
который визуально дает понять пользователю, что он может вводить свой поисковой запрос в поле
при работе в зенке - твой код должен обязательно иметь вызов метода фокусировки на этом поле,
который равносилен прямому слешу "|" в браузере, иначе при эмуляции клавиатуры - часть текста может просто не написаться .....
с таким же успехом, мы можем в зенке просто перейти на msn и без всяких кликов сразу вторым кубиком после перехода
начать вводить текст в поле, т.е. второй кубик сразу "эмуляция клавиатуры" - это будет равносильно твоему коду ...
поэтому в твой код обязательно нужно добавить фокусировку:
button.focus()
я бы немного упростил конструкцию:
(function f(r=document){
if(e=r.querySelector('#q')){ e.click(); e.focus(); return 1 }
return [...r.querySelectorAll('*')].some(n=>n.shadowRoot&&f(n.shadowRoot))||0
})()