Не получается программно нажать ссылку
Вот фрагмент кода:
<div class="login_box_content"> <div style="position:relative;z-index:50;"> <form action="/start?action=login_to_game_world" method="post" id="loginform"> <div class="loginform-inner" style="display: none; "> <div> <input type="hidden" id="world" name="world" value=""> <input type="hidden" id="facebook_session" name="facebook_session" value=""> <input type="hidden" id="facebook_login" name="facebook_login" value=""> <input type="hidden" name="portal_sid" value=""> </div> <div id="login_form_inner"> <div class="loginform-inner-wrap" style="position: relative; height: 24px;"> <label for="name" class="login_text">Игровое имя:</label> <input id="name" name="name" type="text" value="" class="login_fields"> </div> <div class="loginform-inner-wrap" style="position: relative; height: 24px;"> <label for="password" class="login_text">Пароль:</label> <input id="password" name="password" type="password" class="login_fields"> </div> <div id="lost_pw" class="small"> <a href="/start/change_password?action=index">Забыли пароль?</a> </div> <div id="remember"> <label> <input type="checkbox" id="autologin" name="autologin"> Оставаться в системе </label> </div> </div> <div class="loginform-inner-wrap loginform-inner-wrapsubmit" id="login_button"> <a class="button " href="#" onclick="return submit_form_light('loginform')"> <span class="left"><span class="right"> <span class="middle">Вход</span> </span></span> <span style="clear:both;"></span> </a> <div class="facebook-login">или подключить к <img src="/images/game/fb_connect.png" alt="" style="width:14px; cursor: pointer" onclick="GrepoFacebook.master.facebook_login_register('login');"></div> </div> </div> <div id="worlds" style="overflow-x: hidden; overflow-y: hidden; display: block; height: 37.0864px; margin-top: 0px; margin-bottom: 11.277000000000001px; padding-top: 0px; padding-bottom: 0px; "><span><b>Выберите мир:</b></span><div><ul><li><a>Альфа</a></li><li><a>другие миры</a></li><li><a class="settings_button" href="/start/index?action=show_settings">Настройки</a><a class="logout_button" href="#">Выход</a></li></ul></div></div></form> </div> </div> <div class="bottom_left"> <div class="bottom_right"> <div class="bottom_center"> </div> </div> </div> </div> </div> </div> </div> </div> Там есть ссылка <a>Альфа</a> Мне нужно программно на не нажать. Вот так нахожу эту ссылку в коде: document.getElementById('worlds').getElementsByTagName('a')[0] Перепробовал onclick(), click(), submit(), ничего не срабатывает... Помогите, пожалуйста, разобраться... Походу что-то нужно делать с <form action="/start?action=login_to_game_world" method="post" id="loginform">, но я не знаю ЧТО... |
А что сообщает косноль браузера?
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru" dir="ltr"> <head> </head> <body> <div class="login_box_content"> <div style="position:relative;z-index:50;"> <form action="/start?action=login_to_game_world" method="post" id="loginform"> <div class="loginform-inner" style="display: none; "> <div> <input type="hidden" id="world" name="world" value=""> <input type="hidden" id="facebook_session" name="facebook_session" value=""> <input type="hidden" id="facebook_login" name="facebook_login" value=""> <input type="hidden" name="portal_sid" value=""> </div> <div id="login_form_inner"> <div class="loginform-inner-wrap" style="position: relative; height: 24px;"> <label for="name" class="login_text">Игровое имя:</label> <input id="name" name="name" type="text" value="" class="login_fields"> </div> <div class="loginform-inner-wrap" style="position: relative; height: 24px;"> <label for="password" class="login_text">Пароль:</label> <input id="password" name="password" type="password" class="login_fields"> </div> <div id="lost_pw" class="small"> <a href="http://javascript.ru/forum/">Забыли пароль?</a> </div> <div id="remember"> <label> <input type="checkbox" id="autologin" name="autologin"> Оставаться в системе </label> </div> </div> <div class="loginform-inner-wrap loginform-inner-wrapsubmit" id="login_button"> <a class="button " href="#" onclick="return submit_form_light('loginform')"> <span class="left"><span class="right"> <span class="middle">Вход</span> </span></span> <span style="clear:both;"></span> </a> <div class="facebook-login">или подключить к <img src="/images/game/fb_connect.png" alt="" style="width:14px; cursor: pointer" onclick="GrepoFacebook.master.facebook_login_register('login');"></div> </div> </div> <div id="worlds" style="overflow-x: hidden; overflow-y: hidden; display: block; height: 37.0864px; margin-top: 0px; margin-bottom: 11.277000000000001px; padding-top: 0px; padding-bottom: 0px; "><span><b>Выберите мир:</b></span><div><ul><li><a>Альфа</a></li><li><a>другие миры</a></li><li><a class="settings_button" href="/start/index?action=show_settings">Настройки</a><a class="logout_button" href="#">Выход</a></li></ul></div></div></form> </div> </div> <div class="bottom_left"> <div class="bottom_right"> <div class="bottom_center"> </div> </div> </div> </div> </div> </div> </div> </div> <button id="but00" onclick="Onclk()" style="position:absolute;-z-index:-100;">Автоклик</button> <script> function Onclk() { document.getElementById('loginform').getElementsByTagName('a')[0].click(); } alert("Сейчас нажмём программно!") setTimeout("document.getElementById('but00').click();") </script> </body> </html> |
Цитата:
|
Цитата:
Есть и другие причины почему это не срабатывает. |
ArtemKrass,
Какой браузер ? |
<a>Альфа</a> Тут нет ни идентификатора, ни onclick атрибута - ничего. Как же тогда идет привязка обработчика на той странице? |
В общем я пишу приложение на C#.
В приложении использую awesomium (библиотекf для интеграции браузера в приложение). По-моему движок Chrome. Для заполнения форм и нажатия кнопок использую JavaScript. Все было хорошо... Но вот на этой ссылке застрял, два дня уже мучаюсь... |
Цитата:
|
Цитата:
|
ArtemKrass,
А мой пример у Вас не работает при "Посмотреть" И браузер не указали |
Я пишу на C#, сейчас в нем же понадобилось использовать немного JavaScript. До этого с JavaScript практически не сталкивался. Пожалуйста помогите на моем примере... Заглянул по ссылке о dispatchEvent... Темный лес...
|
Цитата:
|
Цитата:
У меня работает в Chrome - ось ХP (Там в примере переход на текущий форум http://javascript.ru/forum/ (в окошке |
Цитата:
Цитата:
<button onclick="alert('Клик!')">Целевой элемент</button> <script> var target = document.querySelector('button'); var event = document.createEvent('MouseEvents'); event.initMouseEvent('click', true, true, window, 1, 0, 0, 0, 0, false, false, false, false, 1, null); var counter = 3; var message = document.body.appendChild(document.createElement('div')); (function(){ message.textContent = 'Автоклик через ' + counter; if (counter == 0) { target.dispatchEvent(event); } else { counter--; setTimeout(arguments.callee, 1000); } })(); </script> http://www.w3.org/TR/DOM-Level-2-Eve...nts-MouseEvent |
Не могу разобраться... Как это можно применить к моему коду?
|
Изменить селектор в 3й строчке и вместо 7-17 строчек оставить только 12ю
|
Мы видимо о разных вещах разговариваем...
Я пишу небольшой бот для авторизации на сайте (на C#). Чтобы заполнять данные и нажимать кнопки мне нужен JavaScript. Программно заполнять логин и пароль у меня получилось, нажимать на кнопки тоже... А вот перейти по этой злополучной ссылке никак. Соответственно код HTML поменять не могу, так как он лежит на сервере... Могу только влиять на него извне... |
Цитата:
Короче, вот код: var target = document.querySelector('#worlds a'); // это и есть селектор в 3й строчке var event = document.createEvent('MouseEvents'); event.initMouseEvent('click', true, true, window, 1, 0, 0, 0, 0, false, false, false, false, 1, null); target.dispatchEvent(event); // это и есть 12я строка, вместо 7-17й Мда.. |
А вобще, нужно изучать проблемную страницу и искать проблему.
В этом может помочь Chrome Developer Tools. На вкладке Sources есть справа Event Listener Breakpoints, нужно поставить галку напротив Mouse -> click |
danik.js,
ООООгромное Вам спасибо!!! Каким то чудом (для меня) сработало! УРРРА! |
А вы бы не могли простым языком объяснить как это работает? Что такое
'#worlds a'... |
Это css-селектор.
|
Да я посмотрел через firebug, но он указывает на две ссылки... Почему же выбирается нужная?
Простыми словами поясните код, пожалуйста. |
*.querySelectorAll - выборка всех подходящих под селектор элементов
*.querySelector - выборка только первого элемента. |
Часовой пояс GMT +3, время: 23:00. |