Форум программистов, компьютерный форум, киберфорум
jQuery
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 30.12.2015
Сообщений: 7
1

Отследить клик по элементу (PhantomJS)

16.08.2016, 16:16. Показов 2634. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, уважаемые!
Горит проект! Нужна помощь по JQuery.
Пытаюсь использовать PhantomJS для имитации клика по ссылке. Результатом должно быть отображение скрытой части контента.

Javascript
1
2
3
page.evaluate(function() {
        $('#phdivz_1>a').trigger('click');
});
По идее, вот эта часть должна кликнуть на нужную ссылку, а как потом проверить был ли клик? В фантоме есть возможность сделать скрин страницы. Делаю его до этой части и после нее. На выходе два абсолютно одинаковых скрина. То ли ничего не происходит, то ли всплывающее окно не успевает загрузиться, а второй скрин уже сделан.
По теме ожидания результата нашел только такую вот функцию
Javascript
1
2
3
4
5
6
7
8
9
10
11
waitFor(
  function() {
    return page.evaluate(function() {
      // Кликаем на кнопку
      $('.button').trigger('click');
      // Ждём, пока элемент не станет скрытым
      return $('.button').is(':hidden');
    });
  }, function() {
    // Выполняем действия после того, как необходимый элемент появился на экране
  });
Но она почему-то не работает когда я подставляю в нее свои параметры. При живом клике на нужную ссылку отрабатывает javascript

HTML5
1
<a href="javascript:;" onclick="_show_phone(1,false,event);" class="a9a">Показать номер</a>
Судя по всему, где-то туплю, поскольку с JQuery знаком плохо. Второй день мозг ломаю((
Прошу помощи! Если нужна дополнительная информация, говорите что именно еще нужно. Просто не хочется делать километровый пост из ненужных букв.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.08.2016, 16:16
Ответы с готовыми решениями:

Отследить клик по созданному элементу
Добрый вечер, проблема такая: http://jsfiddle.net/vxgyLzjy/26/ При нажатие на &quot;PS&quot; или &quot;PC&quot;...

Отследить клик
Здравствуйте, подскажите как отследить по какому элементу страницы кликнули? Есть окно, которое...

Как отследить клик на фрейме?
Здравствуйте! Возникла необходимость вызывать java-функцию при клике на фрейме. Сам код фрейма...

Клик по элементу
Возможно ли совершить клик по элементу на странице зная только что тег элемента &lt;a&gt; и он имеет...

7
890 / 725 / 447
Регистрация: 13.07.2015
Сообщений: 2,277
16.08.2016, 16:27 2
проверить был ли клик можно
Javascript
1
$('#phdivz_1>a').click(function(){console.log('i am clicked');});
кстати разве в айдишниках можно треугольную скобку использовать, если ты хотел выбрать элемент а внутри блого рндиз, надо писать через пробел '#phdivx a'
0
0 / 0 / 0
Регистрация: 30.12.2015
Сообщений: 7
16.08.2016, 16:38  [ТС] 3
Треугольная скобка - это от phpQuery. Подумалось, что здесь синтаксис вложенности аналогичный будет.
Вообще там ссылка вложена в span c id="phdivz_1"

HTML5
1
2
3
<span id="phdivz_1" style="display: inline-block;">
  <a href="javascript:;" onclick="_show_phone(1,false,event);" class="a9a">Показать номер</a>
</span>
Вот мне до нее нужно добраться, кликнуть по ней и получить результат обработки
0
890 / 725 / 447
Регистрация: 13.07.2015
Сообщений: 2,277
16.08.2016, 16:46 4
вобщем в дквери вложеность это пробел
0
2232 / 1278 / 611
Регистрация: 23.08.2015
Сообщений: 3,228
16.08.2016, 17:25 5
Уф, Можно же использовать треугольную скобку, если нужно выбрать сугубо дочерний элемент, тот же синтаксис что и в css.
0
890 / 725 / 447
Регистрация: 13.07.2015
Сообщений: 2,277
16.08.2016, 17:27 6
ок. буду знать. просто ни разу так не писал.
0
0 / 0 / 0
Регистрация: 30.12.2015
Сообщений: 7
17.08.2016, 21:46  [ТС] 7
Что-то ни со скобкой, ни без ничего не срабатывает. Сам фантом запускаю из-под php через shell_exec() чтобы потом нужный результат запихнуть в php-переменную. Код на js выглядит так:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var page = require('webpage').create(),
    system = require('system'),
    url = system.args[1];
 
page.open(url, function(status) {
  console.log("Status: " + status);
  if(status === "success") {
    console.log(page.injectJs("jquery.js") ? "... done injecting itself!<br>" : "... fail! Check the $PWD?!");
    var productName = page.evaluate(function() {
        return $('#phone_td_1').text();
    });
    console.log(productName);
    page.render('img/example.png');
 
page.evaluate(function() {
     $('#phdivz_1 a').click(function(){console.log('i am clicked');});
     $('#phdivz_1 a').trigger('click');
});
     page.render('img/example2.png');
Всё отрабатывает и выводится до функции с триггером и проверкой клика. Тут без малейшей реакции. Второй пэйдж.рендер схлопывает идентичный первому скрин. Следовательно, клик не прошел. Может где-то я туплю в самой логике скрипта или работы вебкита? Насколько я понял, то фантом имитирует работу браузера и динамика должна как-то автоматически срабатывать. Отправил клик и фантом уже подгрузит страницу с измененным результатом. Это же не cURL.

Добавлено через 5 часов 34 минуты
Неужели никто плотно не работал с фантомом?

Добавлено через 22 часа 5 минут
Задача решена с помощью createEvent.
0
0 / 0 / 0
Регистрация: 11.12.2014
Сообщений: 14
29.08.2016, 04:57 8
А код с решением можно?
0
29.08.2016, 04:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.08.2016, 04:57
Помогаю со студенческими работами здесь

Клик по элементу
Подскажите пожалуйста почему не работает клик по элементу? Т.е. алерт не появляется &lt;!DOCTYPE...

Клик по элементу
Подскажите как сделать клик по элементу имеющему определенные атрибуты, например: тип элемента...

Двойной клик по элементу
Хочу написать функцию. которая меняет цвет и background у пункта меню, если на него нажали. То есть...

Клик по нижнему элементу
Как можно кликнуть по элементу, который закрыт другими?


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

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