Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник
Коллекция курьезных вопросов из форумов
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Веб-платформа Альпари с TWebBrowser или с TChromium для опционов


TraderProg ©   (18.12.18 17:38

Здравствуйте! Примерно до сентября этого года торговый бот для Веб-платформы Альпари работал, но потом что-то поменяли в ней и старый код больше не работает. Может у кого появится идея как теперь работать с ней?
Итак. Код перестал работать и на версии платформы для реального счета и для демоверсии. В первом случае для доступа потребуется регистрация, во втором случае – ничего не требуется, платформа открывается сразу же по ссылке:
https://alpari.com/ru/platforms/binary_trader_new/
То есть пробовать можно на демо и не «париться» с регистрацией. Доступ к элементам DOM осуществлялся посредством селекторов. Теперь же по селекторам не находится ничего.
1. Рассмотрим основные моменты кода работы с компонентом TWebBrowser.
Чтение цены шло так:
var
ListPrice, NodePrice: OleVariant;
PriceOpt: double;
begin
//Читаем цену опциона:
 try
   ListPrice:=Doc.querySelectorAll(SelectorPrice);
   NodePrice:=ListPrice.item(0);
   Edit4.text:=NodePrice.innerHTML;
   PriceOpt:=strtofloat(Edit4.text);
 except
   PriceOpt:=0;
 end;

Пример нажатия на кнопку покупки:
var
ListUp, NodeUp: OleVariant;
begin    
try
       ListUp:=Doc.querySelectorAll(SelectorUp);
       NodeUp:=ListUp.item(0);
       NodeUp.click;
     except
       Memo2.Lines.Add('Попытка покупки не удалась. Потеряна кнопка');
     end;

SelectorPrice и SelectorUp – строковые переменные с селекторами считываеме из файла настроек.
Селектор цены:
#root > div > div > div > section > div > div.app__left-sidebar.app__left-sidebar_market-watch > div > div > div:nth-child(1) > div > div.asset-group-row > div.bali-asset-row.asset-item-row.asset-item-row_active.asset-item-row_borderless > div:nth-child(2) > span > span

Селектор кнопки «Выше»:
#root > div > div > div > section > div > div.border-container.border-container_side_left.app__right-sidebar > div.border-container.border-container_side_bottom.app__option-form > form > div.option-form__content-line.option-form__content-line_first > div.option-form__button-selector > div > div.direction-selector.direction-selector_vertical > button.button.call-btn.call-btn_vertical.direction-selector__button

Со временем в платформу могут вноситься изменения и селекторы могу устареть – актуальные значения (если кто не в курсе) смотреть щелкнув по нужному элементу в окне Хрома правой кнопкой и выбрав «Просмотреть код», затем по выделенному участку кода HTML еще раз щелкнуть и выбрать Copy -> Copy Selector и вставить текст из буфера обмена.

2. Теперь рассмотрим на примере TChromium
Работало через запрос посредством встроенного javascript и получением ответа в консоли. Чтение цены:
//Делаем запрос для получения цены опциона и баланса через консоль:
  if Assigned(Chromium1.Browser) and Assigned(Chromium1.Browser.Mainframe) then
  begin
     CodeStr := 'console.log("PRICE: "+document.querySelectorAll("'+SelectorPrice+'").item(0).innerHTML+"abc");';
     Chromium1.Browser.MainFrame.ExecuteJavaScript(CodeStr, 'about:blank', 0);
   end;

Чтение ответа в консоли:
procedure TForm1.Chromium1ConsoleMessage(Sender: TObject; const browser: ICefBrowser; const message, source: ustring; line: Integer; out Result: Boolean);
var
 st: string;
begin
st:= message;
///Получение цены из консоли:
if (Pos('PRICE',st)>0) then
 begin
   Edit4.text:=Copy(st,8,Pos('abc',st)-8);
   try
     PriceOpt:=strtofloat(Edit4.text);
   except
     PriceOpt:=LastOpt;
   end;
 end;

Пример нажатия на кнопку покупки:
     if Assigned(Chromium1.Browser) and Assigned(Chromium1.Browser.Mainframe) then
       begin
         CodeStr := 'document.querySelectorAll("'+SelectorUp+'").item(0).click();';
         Chromium1.Browser.MainFrame.ExecuteJavaScript(CodeStr, 'about:blank', 0);
       end;

Вот в принципе и все. Также пробовал на C# через компонент WebBrowser, но проблема та же. Уж не знаю что они там в Альпари поменяли у платформы, что все сразу перестало работать.


ухты ©   (18.12.18 23:04[1]

Так вопрос в чем?
У вас же написано -

> Со временем в платформу могут вноситься изменения и селекторы
> могу устареть – актуальные значения (если кто не в курсе)
> смотреть щелкнув по нужному элементу в окне Хрома правой
> кнопкой и выбрав «Просмотреть код», затем по выделенному
> участку кода HTML еще раз щелкнуть и выбрать Copy -> Copy
> Selector и вставить текст из буфера обмена.
что не получается?

Но вообще конечно этот подход не айс, Где вы нашли это... проще и качественнее делать скриптами. Это если вообще без браузера никак.


TraderProg ©   (19.12.18 13:33[2]

Не видит теперь объекты, которые раньше находились по селекторам, вот что не получается. Как со скриптами предлагаете? У сайта уже есть свои JavaScript - их как то использовать можно?


ухты ©   (19.12.18 18:02[3]

Ну так вам написали - меняйте селекторы, ищите новые и меняйте. Как искать тоже и тамже написано.


TraderProg ©   (19.12.18 18:08[4]

Ну естественно первое что было сделано - испробованы новые селекторы. Если бы это помогло я бы пост не создавал.


ухты ©   (19.12.18 18:28[5]

Тут несколько вариантов, либо неправильно нашли, либо неправильно поменяли (не там/не то/не тем). либо там совсем все уже иначе.
Вам что больше нравится?


TraderProg ©   (19.12.18 19:46[6]

Более того я пробовал селекторы брать и выше по дереву (чтобы взять несколько элементов) и ниже. Не помогает. Ощущение что сменили полностью технологию. Даже пробовал получить доступ через GetElementbyClass - не помогло. ID у нужных элементов нет. Помнится Вы (ты, как лучше?) участвовали в ветке про Олимптрейд и предлагали мне создать учетку чтобы желающие могли поковыряться в коде сайта. В данном случае даже регаться не надо - сразу демка открывается. Так что попробуйте сам может у Вас что получится, так как взгляд по другим углом может решить проблему. Если что, то я в долгу не останусь и скину по почте исправленного торгового робота, приносившего раньше мне реальную прибыль.


ухты ©   (19.12.18 21:27[7]

Так не понятно что сделать надо, из вашего описания мне не понятнно, какойто прайс, кеакой, где, откуда, когда ... что делает кнопка, и кстати какая?
это вы там в курсе, а тут, к примеру мне, как центральногалактическая черная ыра, .. ндето в центре галактики.. ищи свищи )


TraderProg ©   (19.12.18 21:44[8]

Там на сайте (в веб-платформе)   https://alpari.com/ru/platforms/binary_trader_new/
есть таблица с валютными парами EURUSD, GBPUSD, USDJPY и тд - у них у каждой есть свой курс (это цена) и есть возможность либо купить (кнопка BUY) либо продать (кнопка SELL) опцион (контракт с определенным сроком действия). То есть если ты нажал на кнопку BUY и цена (курс) скажем у EURUSD (евро против доллара США) пошла вверх то получаем прибыль. Все это конечно можно делать руками, но требуется торговый робот, который будет без устали делать это за пользователя по определенному алгоритму, что собственно до этой осени прекрасно работало. Также конечно требуется считывать текущий баланс и процент доходности опциона, но это менее важно.


ухты ©   (19.12.18 22:06[9]

кнопка BUY вот так
document.querySelector(".option-form button.button.call-btn")
вы бросте работать с DOM страниц в коде программы, это все утарело лет 10 назад
все скриптами, код только посылает команды и получает данные
короче говоря сделать то что вам надо не сложно, даже можно без браузера ))


TraderProg ©   (20.12.18 05:19[10]

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


ухты ©   (20.12.18 11:17[11]

Пишите специальный клвчик для ваимодействия кода и страницы, регистрируете его в странице. Пишите скрипт и внедряете его в страницу. Дальше все просто. этот класик видит и скрипт и код. Собственно все.

А чтобы не юзать браузер то надо изучать сам сайт. Там, например, данные идут в веб-секете. Подписаться на его - плевое дело, будете иметь все данные сразу, далее просто обработать их и пару методов по взаимодействию с сервером (те самые кнопки - купить продать).


ухты ©   (20.12.18 11:18[12]

клвчик - класик


ухты ©   (20.12.18 11:50[13]

ну это просто, воевали летом, зимой пироги пекли и на печи грелись


TraderProg ©   (20.12.18 12:15[14]

А поконкретнее по каждому шагу можно? Мне нужны примеры, хотя бы от других сайтов, с примерно той же сутью.
Например:
1. Как должно осуществляться взаимодействие кода и страницы?
2. Как регистрировать этот спец. класс на странице?
3. Как внедрить этот скрипт в страницу?
4. Как работать с веб-сокетом и как подписаться на него?

Пока для меня все образно и туманно. Я в этом далеко не спец а чайник, по роду своей деятельности не программист, мало-мальски умею на уровне того что в школе научили 15 лет назад и все, а проблему как-то надо решить.

Или хотя бы подскажите что конкретно искать в инете по каждому шагу, а то технологий, названий всяких море, и в каждом языке прог-ия полно своих методов. Получается пока что ищу иголку в стоге сена и даже не знаю как иголка выглядит


FreeAndNil ©   (20.12.18 13:07[15]

в отладчике хрома весь обмен виден как на ладони

искать "chrome debug websocket"


ухты ©   (20.12.18 13:44[16]

Для начала у вас все есть. Конкретнее это только сделать.


TraderProg ©   (20.12.18 14:13[17]

Извините, что так сильно туплю. Но не пойму даже на каком языке программирования это все писать? Есть какой-нибудь простенький пример взаимодействия с вебсокетом, пускай и для другого сайта, чтобы я наконец понял суть?


FreeAndNil ©   (20.12.18 18:14[18]

https://github.com/websocket-client/websocket-client


Сапёр   (11.01.19 08:50[19]

Зачастую проще тыкать в TWebBrowser или расширение Хрома наваять, чем мыкаться с отдельно самими запросами websocket...
Сделайте какой-нибудь файл настроек с (или в TMemo храните) path'ы к нужным элементам. В чём затык-то?)
А при изменениях целевого чужого сайта любой вариант поломается.


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо