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

Shouldercannon

Well-Known Member
25.05.2010
128
0
#1
Доброго времени суток!
Помогите пожалуйста нажать на кнопку в Delphi XE7, которая имеет код
HTML:
<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.
Код:
JSCode := 'document.getElementById или getElementsByClassName("name").click();';
Не работает.
 

sinkopa

Well-Known Member
17.06.2009
344
9
#2
Помогите пожалуйста нажать на кнопку в Delphi XE7, которая имеет код
HTML:
<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.
А что значит нажать на кнопку? :)
Кнопки у Вас никакой и нету. У Вас есть тэг "<a>" (элемент-ссылка)
Чтобы видеть этот контент необходимо: Войти или зарегистрироваться

естественно у него нету ни onclick, ни submit. Ведь у него есть атрибут href.
Кстати href="#" означает что по клику будет произведен релоад URL той самой страницы где Вы сейчас находитесь...

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

Shouldercannon

Well-Known Member
25.05.2010
128
0
#3
В данном случае нет. С widget comments VK это работает, да и там хоть по человечески сделано
HTML:
<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>
Код:
JSCode := 'document.getElementById("wcomments_more_link").click();';
Chromium1.Browser.MainFrame.ExecuteJavaScript(JSCode, '', 0);
Chromium1.Browser.MainFrame.GetSourceProc(CallbackGetSource);
Как теперь проблему решить, из-за неё всё остановилось.
Пробовал так
Код:
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 у ссылки нет и способ бестолковый.
 
Последнее редактирование модератором:

-master-

Well-Known Member
14.01.2012
616
20
#4
естественно у него нету ни onclick
onclick. я даже и не знаю, есть ли теги у которых его нет, исключая конечно всякие доп параметры обжектов и т.п.
 
Кстати href="#" означает что по клику будет произведен релоад URL той самой страницы где Вы сейчас находитесь...
это вы выдумали, никакого релоада не происходит, это просто заглушка, правда отскролит в топ
 
@Shouldercannon, откуда ссылка? надо смотреть что она делает в натуре
 

-master-

Well-Known Member
14.01.2012
616
20
#6
ну если я правильно понял то там клик идет по диву который кнопку изображает
 

Shouldercannon

Well-Known Member
25.05.2010
128
0
#7
То есть сие
HTML:
<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>
Как то запутано всё
 

-master-

Well-Known Member
14.01.2012
616
20
#8
при чем тут запутано или нет? так сделали так им захотелось
я вижу что фигурирует объект именно дива когда отсылается запрос
 

Shouldercannon

Well-Known Member
25.05.2010
128
0
#9
Как теперь в таком случае добраться до этого элемента и сделать по нему клик?
 

-master-

Well-Known Member
14.01.2012
616
20
#10
точно также, только зачем вам браузер? это все можно сделать без него
 

-master-

Well-Known Member
14.01.2012
616
20
#12
это вы что-то придумываете, TWebBrawser использует ИЕ, а в ие всё видно
а зачем вам все? там мусора 70%
 

sinkopa

Well-Known Member
17.06.2009
344
9
#13
Как теперь в таком случае добраться до этого элемента и сделать по нему клик?
ну... добраться всегда как нибудь можно...
например можно попробовать собрать лист элементов по имени тэга.
Чтобы видеть этот контент необходимо: Войти или зарегистрироваться

Потом пробежаться по нему и отыскать нужный (к примеру читать/проверять атрибут class у самого элемента и его парента).
А вот с кликом...
Вот я лично подозреваю что обработчик клика приклеивается к элементу только в момент когда мышь над элементом появляется...
(см. страшный код добавляемых через ServerJSQueue.add идущих вслед за контентом)
 

sinkopa

Well-Known Member
17.06.2009
344
9
#14
sinkopa сказал(а): ↑

Кстати href="#" означает что по клику будет произведен релоад URL той самой страницы где Вы сейчас находитесь...

это вы выдумали, никакого релоада не происходит, это просто заглушка, правда отскролит в топ
угу, согласен... почти... если "href-заглушка" в мэйновом фрейме и отсутствует атрибут target... тогда да... скаконём к шапке... :)
 

Shouldercannon

Well-Known Member
25.05.2010
128
0
#15
это вы что-то придумываете, TWebBrawser использует ИЕ, а в ие всё видно
а зачем вам все? там мусора 70%
Уже пробовал потому и говорю. Из IE можно получить исходники того, что было загружено в первый раз, то что загружается дальше (нажатие на ссылку Показать ещё) не отображается в исходном коде. Даже если все фреймы из IE сохранить, то всё равно части исходного кода нет. Так бы я никогда TChromium бы не использовал.
 

-master-

Well-Known Member
14.01.2012
616
20
#16
что вы пробовали не знаю, я говорю то что есть на самом деле
откройте ие, загрузите страницу, нажмите F12 все есть, нажмите подгрузить, опять все есть

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

Shouldercannon

Well-Known Member
25.05.2010
128
0
#17
Решено
Код:
document.getElementsByClassName("pam uiBoxLightblue fbFeedbackPagerLink uiMorePagerPrimary")[0].click();
 
Последнее редактирование модератором: