#javascript #google-chrome
#javascript #google-chrome
Вопрос:
Я использую следующий JS-код в функции для выхода из веб-сайта в Chrome:
var docLogout = document.querySelector('.submit.logout');
docLogout.click();
Я получаю сообщение об ошибке:
'Uncaught TypeError: Cannot read property 'click' of undefined'
Это потому, что мне нужно сначала убедиться, что класс кнопки существует, и я делаю это с помощью следующих шагов, которые я выяснил:
-
Используйте кнопку «выбрать элемент на странице, чтобы проверить его» (первая кнопка в крайнем левом углу инструментов разработчика)
-
Нажмите на кнопку выхода, чтобы проверить ее
- Откроется вкладка Elemets
- Поле Elements выделяет строку
<button type="submit" class="submit logout">Log out</button>
- Затем я нажимаю на вкладку консоли
- Вставьте мой код снова, и он заработает (после этого будет работать любая кнопка на той же странице)
Как я могу избежать этого ручного шага, чтобы сначала сделать элементы известными с помощью описанных выше шагов? есть ли способ развернуть все элементы DOM изначально, когда веб-сайт загружает другую страницу, чтобы избежать ошибки «Не удается прочитать свойство «щелчок» неопределенного»» без какого-либо взаимодействия с человеком, сначала используя кнопку «Проверить элементы»?
ПРИМЕЧАНИЕ: по крайней мере, объясните, что сделано, чтобы я мог вас привлечь!!!!!!
Комментарии:
1. вы неправильно написали (‘.submit.logut’); разве это не должно быть .logout?
2. @Icewine Я исправил ошибку (я вводил вручную), но вопрос все еще остается в силе
3. Вы пробовали переносить свой код в
DOMContentLoaded
прослушиватель?4. нет, я этого не сделал, более того, если у меня есть 2 кнопки на одной странице, то есть одна кнопка для выхода из системы, а другая для выбора другой вкладки, код для нажатия кнопки будет работать только для проверенной мной кнопки, если я проверю кнопку A, я могу нажать кнопку A с помощью JS иполучит ошибку, если попытается нажать кнопку B, если я проверю кнопку B JS, он нажмет кнопку B и выдаст ошибку, если попытается нажать кнопку A, однако, если кнопки B C D имеют один и тот же тип (пример выбора разных вкладок), все они будут работать, если я проверю только одну изих..
Ответ №1:
docLogout
это undefined
означает, что в документе нет элемента с классами submit
и logout
в настоящее время
Если возможно вручную проверить страницу и найти <button class="submit logout">
, то код, вероятно, выполняется до <button>
того, как был присоединен к DOM
.
Решение: убедитесь, что код выполняется после DOM
того, как он прикрепил <button>
.
Один из способов сделать это — поместить <script>
непосредственно перед </body>
закрывающим тегом, например,
<!doctype html>
<html>
<head></head>
<body>
<button class="submit logout">Logout</button>
<script>
/* button is attached to the DOM at this point */
const docLogout = document.querySelector('.submit.logout')
docLogout.click()
<script>
</body>
</html>
Другим решением является запуск кода после window
load
события ‘s, например,
window.addEventListener('load', () => {
document.querySelector('.submit.logout').click()
})
Если возможно, я бы рекомендовал присвоить кнопке id
и использовать document.getElementById
Ответ №2:
кажется, вы неправильно используете селектор. вы можете поместить разрыв в эту строку, проверить, почему он становится нулевым / неопределенным, использовать f12 и перейти к источнику, выполнить поиск в файле js и поставить точку останова в этой строке give для ее отладки.