Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 05.01.2014
Сообщений: 35
1

Нужен совет новичку. Поиск элемента в DOM

17.10.2016, 13:15. Показов 3106. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Необходим скрипт, который позволит найти на странице кнопку/ссылку и нажать ее.

Попробовал варианты:

Javascript
1
2
3
var span = document.getElementById('menu4')
var menu4 = span.getElementsByTagName('*')
menu4[1].click()
и

Javascript
1
2
var elems = document.getElementsByTagName('a')
elems[1].click()
Оба они работают, но как-то странно... Если запустить сразу после загрузки страницы, получаю ответ ""VM1492:2 Uncaught TypeError: Cannot read property 'getElementsByTagName' of null или во втором случае VM1526:2 Uncaught TypeError: Cannot read property 'click' of undefined.

Но если сначала выбрать нужный элемент через указатель из консоли разработчика (хром) или вручную в той же консоли раскрыть все теги вплоть до необходимого - все работает как нужно.

P.S. Необходимые элементы находятся довольно глубоко в странице. Но страница константная, поэтому подходит вариант спарсить все теги "a" и выбрать необходимый, elems[1].click()

Спасибо.

Добавлено через 3 часа 42 минуты
Up.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.10.2016, 13:15
Ответы с готовыми решениями:

Нужен совет новичку
Доброго времени суток! Наверняка, на этом форуме вопрос, подобный моему уже обсуждался.Но все же....

нужен совет новичку
Помогут ли публикации в продвижении сайтика?

Нужен совет новичку
Привет Всем! Вопрос по азам. Работаю на ubuntu. Установил pycharm, django, сервер работает когда...

Нужен совет новичку
Простите за такой вопрос, но можно ли создать такие программы как на рисунках, через Delphi, где...

6
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,625
17.10.2016, 16:16 2
Цитата Сообщение от illustrated man Посмотреть сообщение
Оба они работают, но как-то странно...
нормально они работают
браузер прочитывает код файла построчно и последовательно
чтобы что-то найти в DOM'e, надо сначала этот самый DOM иметь
браузер ещё не увидел ни одной ссылки <a href="где-то">что-то</a>, а вы уже требуете от него вернуть коллекцию всех ссылок в документе document.getElementsByTagName('a') и кликнуть по ссылке с индексом [1]

Браузер вам честно отвечает -- "я пока вообще ни одной ссылки в документе ещё не встретил", коллекция ссылок поэтому пустая и кликнуть по конкретному элементу пустоты я не могу"
вам надо дождаться, когда окно полностью загрузится и только потом требовать от браузера что-то искать в документе, загруженном в окно

изучите событие window.onload


учебный пример
1
1 / 1 / 0
Регистрация: 05.01.2014
Сообщений: 35
17.10.2016, 16:45  [ТС] 3
Спасибо, но я написал - "Если запустить сразу после загрузки страницы". То есть страница уже загружена полностью, но скрипт не работает до тех пор пока указателем из консоли не указать на нужный элемент, после чего скрипт успешно запускается n раз, до перезагрузки (обновления) страницы.
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,625
18.10.2016, 02:43 4
illustrated man, какие-то сказки рассказываете


сделайте страницу с одной единственной ссылкой <a href="http://yandex.ru">link</a>
пропишите на ней в начале её скриптовой блок <script></script> с кодом
Javascript
1
2
3
4
onload = function ()
    {
    document.getElementsByTagName('a')[0].click ();
    }
в окне вы должны будете увидеть стартовую страницу Яндекса:
а) без каких-либо ошибок исполнения
и
б) вне зависимости от того -- в каком именно месте вашей страницы эта ссылка находится и что именно ещё на странице у вас имеется

все эти ваши "консольные извращения" - не более чем мазохизм
1
the hardway first
Эксперт JS
2461 / 1836 / 906
Регистрация: 05.06.2015
Сообщений: 3,603
18.10.2016, 10:22 5
illustrated man, юзерсприпт, расширение для браузера делаете? Может пункты меню загружаются асинхронно? Да может быть что угодно (╯°□°)╯︵ ┻━┻
Дайте ссылку, где вы там кликаете.
1
1 / 1 / 0
Регистрация: 05.01.2014
Сообщений: 35
18.10.2016, 13:44  [ТС] 6
j2FunOnly, kalabuni, Да, я вроде нашел причину проблемы, нужная мне часть сайта лежит в

HTML5
1
2
3
4
5
6
7
8
9
10
<html>
<head>...</head>
<body>
......
<iframe class="FRAME".......>
#document
</iframe>
......
</body>
</html>
К сожалению не заметил этого сразу Как я могу обратиться к тому что находится внутри этого фрейма?

Добавлено через 11 минут
Я так понял данные внутри #document скрыты от моих скриптов даже после полной загрузки страницы
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,625
18.10.2016, 17:51 7
Лучший ответ Сообщение было отмечено illustrated man как решение

Решение

вы даже предствить себе не можете, насколько мне надоело давать здесь одну и ту же ссылку на правило ограничения домена -- не разрешён клиентский программный доступ к чужой странице
да, через консоль браузера вы можете ручками полазить по чужой странице, но программно -- никак

в свою собственную страницу вы можете внедрить скрипт, который может программно делать с этой вашей страницей всё, что угодно -- кликать по любым кнопкам/ссылкам, вставлять, удалять или изменять любые фрагменты текста/кода
а вот хоть что-либо делать с чужой страницей нельзя (от слова совсем)


что ж вас всех так тянет попортить чужое?
делайте своё и изгаляйтесь над своим, как хотите

по опыту знаю, что сейчас сюда набежит куча советчиков и они будут рассказывать про greasemonkey и про node.js, с помощью которых можно влезть на чужую страницу
да , это тоже javascript, но внедрённый не в страницу, а в другие среды (первый внедряется в браузер конкретного (вашего) компьютера, второй - вообще на сервер)
1
18.10.2016, 17:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.10.2016, 17:51
Помогаю со студенческими работами здесь

Нужен совет новичку
Здравствуйте. Во первых спасибо всем кто оказывал помощь, благодаря ей моя первая база неплохо...

Нужен совет новИчку по оптимизации.
В связи с кризисом (пол года тому) пришлось отказаться от услуг ВЭБ компании и заниматься сайтом...

Нужен совет новичку в программировании
Всем привет. Я уже примерно 7 месяцев собираюсь прочитать книгу по C++, но всё время находятся дела...

Новичку нужен совет опытных в yii
Привет всем только что закончит уроки по yii...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru