в консоли строка работает (елемент находит),а при выполнении в теле документа - нет
Вложений: 2
Пытаюсь заполнить данные карты на aliexpress через тампермонкей
в консоли строки заполняют поле карты, а при запуске из скрипта не работают. // работает в консоли но здесь TypeError: Cannot set property 'value' of undefined document.getElementsByTagName('input')['cardNum'].value =111; // работает в консоли но здесь TypeError: Cannot set property 'value' of null document.querySelector('#j-payment-method > div.checkout-payment.checkout-container.payment-content.form > ul > li:nth-child(1) > div.checkout-payment-form.checkout-spring > div > div:nth-child(1) > input[type="text"]:nth-child(2)').value=111 Как так,почему и что делать ? |
getElementsByTagName возвращает HTMLCollection, не hash-таблицу (ассоциативный массив, в js - object), также у коллекции нет свойства "cardNum", поэтому в строке 2 ошибка.
В строке 5 querySelector не может найти на странице элемент, удовлетворяющий селектору, поэтому возвращает null. |
а почему эти строки все находят при запуске их в консоли а?
тут явно указан элемент cardNum в коллекции input document.getElementsByTagName('input')['cardNum'].value =111;и это работает вообще и в данном случае проверено на этом коде в консоли а то что querySelector не может найти на странице элемент это я написал в первом сообщении как и то сто он находит запуском этой же строки в консоли |
Цитата:
Действительно, к элементу можно обратиться по его имени, я ошибся. Цитата:
|
По имени или по id
<input type="text" name="cardNum" > <script> document.getElementsByTagName('input')['cardNum'].value =111; </script> <input type="text" id="cardNum" > <script> document.getElementsByTagName('input')['cardNum'].value =111; </script> |
тоже думал что раньше
поставил на всякий случай запускаться после загрузки всей страницы (в конце страницы) результат такой же Может ... А как сделать скрипт подождал секунд 5 перед запуском ? |
В общем вот так заработало
setTimeout("document.getElementsByTagName('input')['cardNum'].value ='111'", 3000) но этот вариант слегка напрягает как сделать так чтобы он сам определял загрузились ли данные ? |
selevo, в tampermonkey, по-моему, можно выбрать когда скрипт будет запущен, убедитесь, что он запускается после загрузки DOM.
Откройте исходный код страницы (ctrl+u) и попробуйте найти в нем нужный вам input (поиск на странице: ctrl+f). Если элемента на странице нет, значит он подгружается асинхронно и нужно откладывать запуск вашего скрипта до появления на странице нужного элемента. В противном случае попробуйте запускать ваш скрипт после полной загрузки страницы: window.addEventListener('load',function execute(){ //тут ваш скрипт }); if(document.readyState==='complete') execute(); Цитата:
|
Цитата:
Первый вариант предпочтительнее. |
мастер!
|
Часовой пояс GMT +3, время: 05:20. |