#puppeteer
#кукловод
Вопрос:
Я пытаюсь использовать puppeteer для очистки информации, предварительно загруженной в поле ввода. Я полагаю, это означало бы, что это заполнитель.
Кажется, я не могу заставить селектор работать. Я щелкаю правой кнопкой мыши в поле ввода и копирую селектор с помощью Chrome dev tools, и я получаю #company-legal-name > span > ng-transclude > wf:textfield > div > input
Но если я помещу это в консоль
document.querySelector('#company-legal-name > span > ng-transclude > wf:textfield > div > input')
Я получаю эту ошибку
VM637:1 Uncaught DOMException: Failed to execute 'querySelector' on 'Document': '#company-legal-name > span > ng-transclude > wf:textfield > div > input' is not a valid selector.
at <anonymous>:1:10
Я пробовал много разных вещей, но он никогда не может найти селектор. Страница, похоже, находится в angular, если это имеет значение. К сожалению, я не могу связать страницу, поскольку она заблокирована для пользователей, не являющихся администраторами.
PS:
document.getElementById('#company-legal-name')
ВОЗВРАТ null
Ответ №1:
wf:textfield
недопустимый селектор CSS, следовательно, вы получаете синтаксическую ошибку:
> document.querySelector('wf:textfield')
SyntaxError: 'wf:textfield' is not a valid selector
тогда как без wf:
это принято:
>document.querySelector('textfield')
null
У меня также есть сомнения по поводу ng-transclude
селектора, который, как я предполагаю, должен быть именем тега (Angular?).
Комментарии:
1. Спасибо, Стефан, сейчас я не получаю никаких ошибок, но я все еще получаю null.. Есть идеи?
2. Не могли бы вы, может быть, разобрать и прикрепить HTML-документ к вашему вопросу? Он должен содержать только узлы в пути, который вы хотите сопоставить / выбрать. Пожалуйста, помните, что CSS-селектор
A > B
работает,B
только если является прямымA
дочерним элементом.a > .b
, т.е.<A class="a"><B class="b">...</B></A>
будет соответствовать, но не<A class="a"><B><C class="b">...</C></B></A>
Ответ №2:
- Вы получаете недопустимый селектор из-за двоеточия (:), в частности
wf:textfield
, который не является допустимым селектором для querySelector, даже если вы получаете его с помощью inspect element . getElementById
потребует от вас удаления хэша перед селектором#
Решение: Удалите поврежденный фрагмент ( wf:textfield
) и напишите так,
#company-legal-name input
Похоже, мы также можем использовать input[name="input_2"]
, как обсуждалось в комментариях.
Комментарии:
1. Спасибо
document.querySelector('#company-legal-name > span > ng-transclude > div > input')
возвращает null! Есть идеи, как я извлекаю информацию из входных данных вместо получения null?2. Что
document.querySelector('#company-legal-name')
возвращает?3. imgur.com/PBBfBBB текста-заполнителя, который я ищу, нигде там нет
4. Почему бы вам не использовать
input[name="input_2"]
в качестве селектора? Это кажется очень разумным. Попробуйте#company-legal-name input
иinput[name="input_2"]
, в зависимости от того, что сработает. Он просто должен быть уникальным, вот и все.