Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не получается программно нажать ссылку, проблема с ссылкой 
:(
    Опции темы
Seganapa
Дата 23.2.2013, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 10.8.2012

Репутация: нет
Всего: нет



Вот фрагмент кода:
Код

<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="</span>">
                    <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="">
                    <<span style='color:blue'>/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">или подключить к&nbsp;
                                <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">
, но я не знаю ЧТО...

Это сообщение отредактировал(а) Aliance - 25.2.2013, 10:18
PM MAIL   Вверх
Arantir
Дата 23.2.2013, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 14
Всего: 55



Цитата(Seganapa @  23.2.2013,  10:29 Найти цитируемый пост)
Перепробовал onclick(), click(), submit(), ничего не срабатывает...
Вы просто не совсем неправильно понимаете работу того, что пробуете сделать.
В JS click - это ивент (событие), и onclick - это функция этого события, которая вызывается после нажатия. Соответственно сама такая функция никаким нажатием не является. При обработке нажатия на ссылку браузер сначала вызовет onclick, а потом выполнит стандартное действие клика (например, переход по ссылке). Если onclick был вызван напрямую, то стандартного действия не произойдет.

submit тоже подпадает под описание выше. Но submit не является прямом действием от пользователя. Пользователь инициирует click на кнопке, после которого вызывается стандартное действие - submit формы. Поэтому submit на форме, в отличии от click на ссылке, все же форму отправит. Таким образом отправку формы можно инициировать через JS.

А теперь подумайте про разницу между отправкой формы и переходом по ссылке. Переход по ссылке - это одно простое действие - смена текущего url-адреса. Поэтому для него отдельной функции, вроде submit, не выделяли.
Чтобы перейти на другую страницу, достаточно изменить location.href на нужный адрес. Чтобы перейти на адрес конкретной ссылки, то надо просто взять адрес этой ссылки:
Код

location.href = document.getElementById('myLinkId').href;

Цитата(Seganapa @  23.2.2013,  10:29 Найти цитируемый пост)
Походу что-то нужно делать с 
А что вы хотите получить после этого своего некого действия? Следует заметить, что submit работает только для тега формы, а не для input'a или чего-то еще
Код
document.getElementsByTagName('form')[0].submit();


Это сообщение отредактировал(а) Arantir - 23.2.2013, 12:52


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
Seganapa
Дата 23.2.2013, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 10.8.2012

Репутация: нет
Всего: нет



Спасибо за информацию... Но до конца не допонимаю... 
С JavaScript сталкивался очень коссвенно, пишу в основном на C#...

Покажите как это можно использовать в моем коде, пожалуйста...

Если я делаю так:
Код

document.getElementById('loginform').submit()

Срабатывает, но не та ссылка которая мне нужна... Открывается 
Код

<a>другие миры</a>


Как же мне кликнуть на 
Код

<a>Альфа</a>

PM MAIL   Вверх
Arantir
Дата 23.2.2013, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 14
Всего: 55



Какого результата вы пытаетесь достичь? Между структурой формы и вашими словами связь весьма туманна.
Судя из формы, эти две ссылки либо должны быть "выберите одно из двух", либо должны инициировать отправку формы. В первом случае их следует переделать в input с type="radio" или в select. Во втором случае можно создать несколько input с type="submit", но разным value; подобное допускается. И в обоих случаях на стороне сервера у вас будут данные о выбранном варианте.
В ином случае потребность наличия этих ссылок в форме сомнительна.

Если по каким-либо причинам вам требуется отправить форму на одну из двух разных ссылок, в зависимости от нажатой пользователем ссылки, то вам нужно изменить атрибут action формы на нужный адрес и после этого вызывать submit формы.
Это тоже можно сделать несколькими путями. Если варианты выбора представлены через select или input[type='radio'], то вы можете добавить событие submit на форму и изменить action на тот, что будет в value у input/select. Другой вариант - оставить ссылки (с заданным им href) и по событию click изменять action формы на href нажатой ссылки, после чего вызывать submit формы.

Это сообщение отредактировал(а) Arantir - 23.2.2013, 15:52


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
Seganapa
Дата 23.2.2013, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 10.8.2012

Репутация: нет
Всего: нет



Arantir, Мы видимо о разных вещах разговариваем...

Я пишу небольшой бот для авторизации на сайте (на C#). 
Там использую webkit... 
Чтобы заполнять данные и нажимать кнопки мне нужен JavaScript. 
Программно заполнять логин и пароль у меня получилось, нажимать на кнопки тоже... А вот перейти по этой злополучной ссылке никак.

Соответственно код HTML поменять не могу, так как он лежит на сервере... Могу только влиять на него извне...


Это сообщение отредактировал(а) Seganapa - 23.2.2013, 16:00
PM MAIL   Вверх
diadiavova
Дата 23.2.2013, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5806
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 11
Всего: 139



Seganapa, для того, чтобы программно вызвать клик по элементу, достаточно у этого элемента вызвать метод click (в вебките он точно поддерживается). Здесь проблема в том, что вполне возможно, что в данном случае для перехода на другую страницу обрабатывается не клик по ссылке, что-то другое. Ссылка здесь - пустышка по сути, в ней нет атрибута href, значит там какие-то фортели выполняются программно. Тут придется детально изучать страницу, возможно с использованием вспомогательных инструментов. От людей, сталкивавшихся с подобными проблемами знаю, что иногда их можно решить, если использовать мобильную версию сайта(если она существует ессно).
Цитата(Seganapa @  23.2.2013,  16:59 Найти цитируемый пост)
Там использую webkit... 
Чтобы заполнять данные и нажимать кнопки мне нужен JavaScript. 

С вебкитом в нете не работал, но с тридентом точно к яваскрипту можно не прибегать, достаточно освоиться с библиотекой mshtml.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Arantir
Дата 23.2.2013, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 14
Всего: 55



Seganapa, с таких вещей и надо было начинать. Тут не экстрасенсы сидят. Десятки раз в день все выкладывают свои коды и задают по ним вопросы. Догадаться, что приведенный код вообще не ваш и вы не можете его изменить - это уже из раздела работы с хрустальным шаром.
Раз код не ваш и он рабочий, значит на этих пустышках висят скрипты. Значит вся их работы внутри onclick. Значит достаточно правильно выбрать эту ссылку и вызвать onclick.
Код
document.getElementById('worlds').getElementsByTagName('a')[0].click();


Тем не менее, это не является "нажатием на ссылку", о чем вы в первом посте спрашивали. Это вызов функции (ивента), созданной верстальщиком того кода.

Это сообщение отредактировал(а) Arantir - 23.2.2013, 17:05


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
Seganapa
Дата 23.2.2013, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 10.8.2012

Репутация: нет
Всего: нет



Код

var target = document.querySelector('#worlds a'); 
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); 

Вот только это сработало! Помог хороший человек!
PM MAIL   Вверх
Google
  Дата 22.11.2019, 00:56 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0775 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.