Конференция "Сети" » Веб-платформа Альпари с TWebBrowser или с TChromium для опционов
 
  • TraderProg © (18.12.18 17:38) [0]
    Здравствуйте! Примерно до сентября этого года торговый бот для Веб-платформы Альпари работал, но потом что-то поменяли в ней и старый код больше не работает. Может у кого появится идея как теперь работать с ней?
    Итак. Код перестал работать и на версии платформы для реального счета и для демоверсии. В первом случае для доступа потребуется регистрация, во втором случае – ничего не требуется, платформа открывается сразу же по ссылке:
    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]
  • Сапёр (11.01.19 08:50) [19]
    Зачастую проще тыкать в TWebBrowser или расширение Хрома наваять, чем мыкаться с отдельно самими запросами websocket...
    Сделайте какой-нибудь файл настроек с (или в TMemo храните) path'ы к нужным элементам. В чём затык-то?)
    А при изменениях целевого чужого сайта любой вариант поломается.
 
Конференция "Сети" » Веб-платформа Альпари с TWebBrowser или с TChromium для опционов
Есть новые Нет новых   [134427   +26][b:0][p:0.001]