Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2015, 12:05   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
Вопрос Нажать кнопку в TChromium

Доброго времени суток!
Помогите пожалуйста нажать на кнопку в Delphi XE7, которая имеет код

PHP код:
<class="pam uiBoxLightblue fbFeedbackPagerLink uiMorePagerPrimary" href="#" rel="async" role="button">Просмотреть еще 134<class="mhs mts arrow img sp_Ss0nf7RU1fT sx_24510d"></i></a
Тут нет ни onclick, ни submit.

Код:
JSCode := 'document.getElementById или getElementsByClassName("name").click();';
Не работает.

Последний раз редактировалось Shouldercannon; 04.04.2015 в 13:34.
Shouldercannon вне форума Ответить с цитированием
Старый 04.04.2015, 15:36   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Код:
function fireEvent(element,event) {
    var evt = document.createEvent("HTMLEvents");
    evt.initEvent(event, true, false ); // event type,bubbling,cancelable
    element.dispatchEvent(evt);                                 
}
fireEvent(document.getElementById("id"), "click");
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 04.04.2015, 16:32   #3
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Извиняюсь за вопрос. Как сие передать средствами Delphi? Это я так понимаю для встраивания в HTML-страничку?
Shouldercannon вне форума Ответить с цитированием
Старый 05.04.2015, 10:20   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

JS это. Да как угодно вызовите эти 3 строки кода. Ну и если все просто скопипастить и выполнить, то тоже должно работать.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 05.04.2015, 12:32   #5
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Там нет id, только class
Код:
var
  JSCode: string;
begin
  JSCode := 'function fireEvent(element,event) {' +
              'var evt = document.createEvent("HTMLEvents");' +
              'evt.initEvent(event, true, false); // event type, bubbling, cancelable' +
              'element.dispatchEvent(evt);' +
            '}' +
            'fireEvent(document.getElementsByClassName("pam uiBoxLightblue fbFeedbackPagerLink uiMorePagerPrimary"), "click");';

  Chromium1.Browser.MainFrame.ExecuteJavaScript(JSCode, '', 0);
Не помогло. Посмотрел внимательнее и оказалось, что это ссылка, а не кнопка.
Shouldercannon вне форума Ответить с цитированием
Старый 05.04.2015, 13:14   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Там нет id, только class
Да как угодно выбирайте, хоть class, хоть tag.
Хоть XPath:
Код:
document.evaluate("//a[contains(@href, \"something\")]", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue
Вы посмотрите что вам ваш
Код:
document.getElementsByClassName("pam uiBoxLightblue fbFeedbackPagerLink uiMorePagerPrimary")
возвращает. Это массив элементов, так что надо выбрать один элемент как-нибудь так:
Код:
document.getElementsByClassName("...")[0]
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 05.04.2015 в 13:16.
Alex11223 вне форума Ответить с цитированием
Старый 06.04.2015, 15:06   #7
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Код:
document.getElementsByClassName("pam uiBoxLightblue fbFeedbackPagerLink uiMorePagerPrimary")
Вернул
PHP код:
<class="pam uiBoxLightblue fbFeedbackPagerLink uiMorePagerPrimary" href="#" rel="async" target="_blank" role="button">Просмотреть еще 134<class="mhs mts arrow img sp_comments sx_comments_arrowb"></i></a
и
Код:
document.getElementsByClassName("pam uiBoxLightblue fbFeedbackPagerLink uiMorePagerPrimary")[0]
вернул тоже самое
PHP код:
<class="pam uiBoxLightblue fbFeedbackPagerLink uiMorePagerPrimary" href="#" rel="async" target="_blank" role="button">Просмотреть еще 134<class="mhs mts arrow img sp_comments sx_comments_arrowb"></i></a
Код:
document.evaluate("//a[contains(@href, \"#\")]", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue
вернул
PHP код:
<class="uiHeaderActions rfloat _ohf" href="#" id="u_0_2" target="_blank" role="button">Комментарий</a

Последний раз редактировалось Shouldercannon; 06.04.2015 в 15:29.
Shouldercannon вне форума Ответить с цитированием
Старый 06.04.2015, 15:15   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Не знаю что вы сказать хотели этим сообщением, но getElementsByClassName всегда возвращает массив (ну или что-то типа массива). Хоть 0 элементов он нашел, хоть 1, хоть 100500.

Чтобы получить элемент массива надо указать его индекс в квадратных скобках. Первый элемент соответственно [0], как указано в примере выше.
Цитата:
Код:
//a[contains(@href, \"#\")]
Ну он первый вернул потому что singleNodeValue
Да по # безполезно искать, таких элементов 100500 на каждой странице. Лучше уж по классу.
Или по тексту.
Код:
//a[contains(text(), \"Просмотреть еще\")]
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 06.04.2015 в 15:41.
Alex11223 вне форума Ответить с цитированием
Старый 06.04.2015, 15:47   #9
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

автору вообще не нужно все это, хватит инди и парсинг респонза
lomastr_ вне форума Ответить с цитированием
Старый 06.04.2015, 15:50   #10
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Решено
Код:
document.getElementsByClassName("pam uiBoxLightblue fbFeedbackPagerLink uiMorePagerPrimary")[0].click();

Последний раз редактировалось Shouldercannon; 06.04.2015 в 17:11.
Shouldercannon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нажать кнопку scroyler Работа с сетью в Delphi 6 24.03.2013 19:05
нажать на кнопку megostudent Работа с сетью в Delphi 12 29.01.2013 13:48
Нажать кнопку scroyler Работа с сетью в Delphi 0 05.11.2012 11:40
Нажать на кнопку в WB kroŧ Работа с сетью в Delphi 8 18.09.2010 15:05
Нажать кнопку Teen4jump Работа с сетью в Delphi 11 29.02.2008 08:33