Нажать кнопку в tchromium

Тема в разделе "Delphi - Сети", создана пользователем Shouldercannon, 4 апр 2015.

  1. Shouldercannon

    Shouldercannon Well-Known Member

    Регистрация:
    25 май 2010
    Сообщения:
    125
    Симпатии:
    0
    Доброго времени суток!
    Помогите пожалуйста нажать на кнопку в Delphi XE7, которая имеет код
    Код (HTML5):
    <a class="pam uiBoxLightblue fbFeedbackPagerLink uiMorePagerPrimary" href="#" rel="async" role="button">Просмотреть еще 134<i class="mhs mts arrow img sp_Ss0nf7RU1fT sx_24510d"></i></a>  
    Тут нет ни onclick, ни submit.
    Код (Delphi):
    JSCode := 'document.getElementById или getElementsByClassName("name").click();';
    Не работает.
     
  2. sinkopa

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    А что значит нажать на кнопку? :)
    Кнопки у Вас никакой и нету. У Вас есть тэг "<a>" (элемент-ссылка) http://htmlbook.ru/html/a
    естественно у него нету ни onclick, ни submit. Ведь у него есть атрибут href.
    Кстати href="#" означает что по клику будет произведен релоад URL той самой страницы где Вы сейчас находитесь...

    А должно? :)
     
  3. Shouldercannon

    Shouldercannon Well-Known Member

    Регистрация:
    25 май 2010
    Сообщения:
    125
    Симпатии:
    0
    В данном случае нет. С widget comments VK это работает, да и там хоть по человечески сделано
    Код (HTML5):
    <a href="" onclick="WComments.showMore(); return false;" id="wcomments_more_link" style="">
          <div class="progress" id="wcomments_more_progress"></div>
          <div id="wcomments_more">к предыдущим записям ↓</div>
        </a>
    Код (Delphi):
    JSCode := 'document.getElementById("wcomments_more_link").click();';
    Chromium1.Browser.MainFrame.ExecuteJavaScript(JSCode, '', 0);
    Chromium1.Browser.MainFrame.GetSourceProc(CallbackGetSource);
    Как теперь проблему решить, из-за неё всё остановилось.
    Пробовал так
    Код (Delphi):
    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.getElementById("pam uiBoxLightblue fbFeedbackPagerLink uiMorePagerPrimary"), "click");';
     
      Chromium1.Browser.MainFrame.ExecuteJavaScript(JSCode, '', 0);
    А id у ссылки нет и способ бестолковый.
     
    #3 Shouldercannon, 4 апр 2015
    Последнее редактирование модератором: 5 апр 2015
  4. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    18
    onclick. я даже и не знаю, есть ли теги у которых его нет, исключая конечно всякие доп параметры обжектов и т.п.
    [DOUBLEPOST=1428246567,1428246500][/DOUBLEPOST]
    это вы выдумали, никакого релоада не происходит, это просто заглушка, правда отскролит в топ
    [DOUBLEPOST=1428246833][/DOUBLEPOST]@Shouldercannon, откуда ссылка? надо смотреть что она делает в натуре
     
  5. Shouldercannon

    Shouldercannon Well-Known Member

    Регистрация:
    25 май 2010
    Сообщения:
    125
    Симпатии:
    0
    #5 Shouldercannon, 5 апр 2015
    Последнее редактирование модератором: 5 апр 2015
  6. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    18
    ну если я правильно понял то там клик идет по диву который кнопку изображает
     
  7. Shouldercannon

    Shouldercannon Well-Known Member

    Регистрация:
    25 май 2010
    Сообщения:
    125
    Симпатии:
    0
    То есть сие
    Код (HTML5):
    <div class="clearfix mts mlm uiMorePager stat_elem fbFeedbackPager fbFeedbackTopLevelPager _52jv" id="pager5521628cc35164724602434"><div><a class="pam uiBoxLightblue fbFeedbackPagerLink uiMorePagerPrimary" href="#" rel="async" target="_blank" role="button">Просмотреть еще 134<i class="mhs mts arrow img sp_comments sx_comments_arrowb"></i></a><span class="uiMorePagerLoader pam uiBoxLightblue fbFeedbackPagerLink"><img class="img" src="https://fbstatic-a.akamaihd.net/rsrc.php/v2/yb/r/GsNJNwuI-UM.gif" alt="" width="16" height="11"></span></div></div>
    Как то запутано всё
     
  8. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    18
    при чем тут запутано или нет? так сделали так им захотелось
    я вижу что фигурирует объект именно дива когда отсылается запрос
     
  9. Shouldercannon

    Shouldercannon Well-Known Member

    Регистрация:
    25 май 2010
    Сообщения:
    125
    Симпатии:
    0
    Как теперь в таком случае добраться до этого элемента и сделать по нему клик?
     
  10. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    18
    точно также, только зачем вам браузер? это все можно сделать без него
     
  11. Shouldercannon

    Shouldercannon Well-Known Member

    Регистрация:
    25 май 2010
    Сообщения:
    125
    Симпатии:
    0
    Из браузера забираю исходный код страницы, причём весь код может вывести только TCromium.
     
  12. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    18
    это вы что-то придумываете, TWebBrawser использует ИЕ, а в ие всё видно
    а зачем вам все? там мусора 70%
     
  13. sinkopa

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    ну... добраться всегда как нибудь можно...
    например можно попробовать собрать лист элементов по имени тэга.
    http://www.w3schools.com/jsref/met_element_getelementsbytagname.asp
    Потом пробежаться по нему и отыскать нужный (к примеру читать/проверять атрибут class у самого элемента и его парента).
    А вот с кликом...
    Вот я лично подозреваю что обработчик клика приклеивается к элементу только в момент когда мышь над элементом появляется...
    (см. страшный код добавляемых через ServerJSQueue.add идущих вслед за контентом)
     
  14. sinkopa

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    угу, согласен... почти... если "href-заглушка" в мэйновом фрейме и отсутствует атрибут target... тогда да... скаконём к шапке... :)
     
  15. Shouldercannon

    Shouldercannon Well-Known Member

    Регистрация:
    25 май 2010
    Сообщения:
    125
    Симпатии:
    0
    Уже пробовал потому и говорю. Из IE можно получить исходники того, что было загружено в первый раз, то что загружается дальше (нажатие на ссылку Показать ещё) не отображается в исходном коде. Даже если все фреймы из IE сохранить, то всё равно части исходного кода нет. Так бы я никогда TChromium бы не использовал.
     
  16. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    18
    что вы пробовали не знаю, я говорю то что есть на самом деле
    откройте ие, загрузите страницу, нажмите F12 все есть, нажмите подгрузить, опять все есть

    никаких исходных кодов не надо, надо смотреть в ДОМ
     
  17. Shouldercannon

    Shouldercannon Well-Known Member

    Регистрация:
    25 май 2010
    Сообщения:
    125
    Симпатии:
    0
    Решено
    Код (Delphi):
    document.getElementsByClassName("pam uiBoxLightblue fbFeedbackPagerLink uiMorePagerPrimary")[0].click();
     
    #17 Shouldercannon, 6 апр 2015
    Последнее редактирование модератором: 6 апр 2015
Загрузка...

Поделиться этой страницей