в консоли строка работает (елемент находит),а при выполнении в теле документа - нет
Вложений: 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, время: 14:04. |