Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 JavaScript Button  [new]
Двоичник
Member

Откуда: Бобруйск
Сообщений: 275
Коллеги, помогите, пожалуйста
Пишу программу, которая будет полуавтоматизированно на сайте нажимать кнопки.
Использую TChromium

Парсинг кода страницы показал фрагмент кода кнопки, которую нужно нажать.

                        <button class="c-button c-button--solid c-button--gray" data-action="loginform.show" onclick="yaCounter.reachGoal('login_from_top_by_email'); return true;">Войти</button>
                            <form class="u-inline-form" action="https://www.website.ru/reception/?.AMRU=https:%2F%2Fwww.website.ru%2F" method="post">
                                </button>


Не могу сообразить, как программно нажать кнопку?

var
JSCode:String;
begin
JSCode := 'yaCounter.reachGoal(''login_from_top_by_email'')' ;
Chromium1.Browser.MainFrame.ExecuteJavaScript(JSCode,'about:blank',0);
end;


Научите, пожалуйста
5 окт 17, 16:53    [20845982]     Ответить | Цитировать Сообщить модератору
 Re: JavaScript Button  [new]
BlackEric
Member

Откуда:
Сообщений: 699
Двоичник,

Использовать Селениум?
5 окт 17, 17:07    [20846058]     Ответить | Цитировать Сообщить модератору
 Re: JavaScript Button  [new]
Двоичник
Member

Откуда: Бобруйск
Сообщений: 275
BlackEric
Двоичник,

Использовать Селениум?


Чего использовать?
5 окт 17, 17:10    [20846068]     Ответить | Цитировать Сообщить модератору
 Re: JavaScript Button  [new]
BlackEric
Member

Откуда:
Сообщений: 699
Двоичник,

Selenium automates browsers.
5 окт 17, 17:17    [20846090]     Ответить | Цитировать Сообщить модератору
 Re: JavaScript Button  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3207
Для всяких фреймворков, может и в голом браузере заработает:
element.triggerHandler('click');


Для jquery:
$("id_element").click();


Для голого браузера:
document.getElementById("id_element").click();


Пример:
var cards = document.getElementsByTagName('article');
for (var i = 0; i < cards.length; i++) {
  var card = cards[i];
  var d = card.getElementsByTagName('div');  
  if(d.length > 0){  
    obj = d[0];
	angular.element(obj).triggerHandler('click');
  }  
}
5 окт 17, 17:21    [20846103]     Ответить | Цитировать Сообщить модератору
 Re: JavaScript Button  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3207
Для проверки можно открыть страницу в браузере (по крайней мере в фаерфоксе), открытьмониторинг http-запросов и в строке адреса вписывать туда свой код вида: javascript: xxx

Если всё ок после нажатия enter, то должен будет отправиться запрос. Только после этого надо выполнять точно такой же код через делфи.
5 окт 17, 17:24    [20846112]     Ответить | Цитировать Сообщить модератору
 Re: JavaScript Button  [new]
Двоичник
Member

Откуда: Бобруйск
Сообщений: 275
JaDi
Для проверки можно открыть страницу в браузере (по крайней мере в фаерфоксе), открыть мониторинг http-запросов и в строке адреса вписывать туда свой код вида: javascript: xxx

Если всё ок после нажатия enter, то должен будет отправиться запрос. Только после этого надо выполнять точно такой же код через делфи.


Это конечно заняло какое-то время на исследования. Но я ничего не понял.
А так же скачал мониторинг HTTP запросов - и тоже не осилил....

Други, покажите, пожалуйста, фрагмент кода как это сделать на дельфи, да я пойду...
5 окт 17, 18:44    [20846293]     Ответить | Цитировать Сообщить модератору
 Re: JavaScript Button  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3207
Сначала пишем код для браузера (как запускать и смотреть есть выше -- строка адреса в браузере и вкладка http-запросов на F12).

Сам код можно изучить вот тут: http://xahlee.info/js/js_get_elements.html и тут http://xahlee.info/js/css_selector_syntax.html

document.querySelectorAll("button[data-action*="loginform.show"]")[0].click();
5 окт 17, 18:54    [20846311]     Ответить | Цитировать Сообщить модератору
 Re: JavaScript Button  [new]
Двоичник
Member

Откуда: Бобруйск
Сообщений: 275
procedure TmainForm.Button1Click(Sender: TObject);
var
JSCode:String;
begin
JSCode := 'document.querySelectorAll("button[data-action*="loginform.show"]")[0].click()' ;
Chromium1.Browser.MainFrame.ExecuteJavaScript(JSCode,'about:blank',0);
end;


не работает
5 окт 17, 19:02    [20846322]     Ответить | Цитировать Сообщить модератору
 Re: JavaScript Button  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3207
Двоичник,

Если не работает -- пиши, в каком месте не работает и какая ошибка вылазит.
5 окт 17, 20:15    [20846425]     Ответить | Цитировать Сообщить модератору
 Re: JavaScript Button  [new]
Двоичник
Member

Откуда: Бобруйск
Сообщений: 275
JaDi
Двоичник,

Если не работает -- пиши, в каком месте не работает и какая ошибка вылазит.


Ошибки то нет. Просто при нажатии кнопку, должна появляться форма, с полями ввода. А она не появляется
Если просто мышкой кликаю в браузере, то норм. А если программно исполнить скрипт, то нет. В этом то и вопрос: Как исполнить джава скрипт, чтобы окно вызвалось
6 окт 17, 11:26    [20847510]     Ответить | Цитировать Сообщить модератору
 Re: JavaScript Button  [new]
под ван
Guest
Двоичник — от слова "двоичный" (код)?
6 окт 17, 11:42    [20847564]     Ответить | Цитировать Сообщить модератору
 Re: JavaScript Button  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3207
Двоичник
Если просто мышкой кликаю в браузере, то норм. А если программно исполнить скрипт, то нет. В этом то и вопрос: Как исполнить джава скрипт, чтобы окно вызвалось

Забудь про делфи. В первую очередь надо написать готовый скрипт для браузера, чтобы при вводе в строке поиска этот код выполнялся и происходил клик по кнопке.

Т.е. надо вот эту строчку модифицировать (как выбирать элементы на странице -- ссылки давал выше). Вот вариант, если на странице нужная кнопка идет самой первой:
document.getElementsByTagName("button")[0].click();
6 окт 17, 11:49    [20847611]     Ответить | Цитировать Сообщить модератору
 Re: JavaScript Button  [new]
stanilar
Member

Откуда: Спб
Сообщений: 559
Почему всем так нравится TChromium? Ведь TWebBrowser - это обертка над IE Еmbeded, а ембед документирован гораздо лучше чем исходники Хромиума. Да и предназначен именно для встраивания в программы, со всеми вытекающими, в отличии от.

Двоичник
Как исполнить джава скрипт, чтобы окно вызвалось

А ты уверен, что интегрировал свой скрипт именно туда куда надо? А то слово MainFrame меня наводит на сомнения, ведь в веб страницах один фрейм можно вставить в другой...


P.S. Ну GreaseMonkey же!
9 окт 17, 10:39    [20853661]     Ответить | Цитировать Сообщить модератору
 Re: JavaScript Button  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 2100
С IE нет никакой гарантии, что у пользователя всё будет работать так же, как у тебя. С Хромиумом надёжнее.
9 окт 17, 12:46    [20854180]     Ответить | Цитировать Сообщить модератору
 Re: JavaScript Button  [new]
stanilar
Member

Откуда: Спб
Сообщений: 559
makhaon
С Хромиумом надёжнее


Не больше, чем с embeded. Хром и хромиум - разные проекты.
9 окт 17, 13:25    [20854341]     Ответить | Цитировать Сообщить модератору
 Re: JavaScript Button  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 2100
stanilar,

Намного больше. Так как хромиум ты таскаешь с собой, а IE - встроенный. Как повезет. То настроят так, что половина фич отсохнет, то версия/dllка не та, то звери побегали или висят.

автор
Хром и хромиум - разные проекты.


Я в курсе.
9 окт 17, 18:21    [20855587]     Ответить | Цитировать Сообщить модератору
 Re: JavaScript Button  [new]
stanilar
Member

Откуда: Спб
Сообщений: 559
machaon

Ну у Хромиума тоже свои приколы. Насколько мне помнится, TChomium из коробки вроде как 2-3 летней давности? Вероятность отсохнуть должна быть больше, чем у TWebBrowser. Да и проблема правильных версий длл-ок это не проблема ембедед, как раз наоборот.

У ембедед есть разумное апи + документация. А ведь это и есть почти прямая гарантия возможности решить проблему. У того, что ТС таскает с проектом в размере сотни мегабайт, есть исходники и форум, а от апи только краткое описание. Вот замени ТС хромиум на ембедед - вопрос бы уже решился через через стак-оверфло.
9 окт 17, 19:16    [20855715]     Ответить | Цитировать Сообщить модератору
 Re: JavaScript Button  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 2100
stanilar,

автор
Ну у Хромиума тоже свои приколы


Приколы можно контролировать и купировать. В отличие от неуправляемого внешнего окружения в виде IE.

Дело хозяйское, в общем :) Каждый должен по своим граблям пройти сам.
9 окт 17, 23:54    [20856218]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить