Конференция "Основная" » Работа с Web-платформой Olymp Trade
 
  • TraderProg © (13.02.18 16:36) [9]
    Спасибо за ответы Redmond и Дмитрий Белькевич!
    1. API сайта не нашел
    2. Пытался через сниффер отследить запросы, но так и не понял ничего. Я новичок в этом деле.
    3. Код страницы в браузере я уже видел через кнопку F12 и нашел нужные участки с кодом. Только вот применить их в самом Delphi пока не пойму как.
    4. В TWebBrowser и так уже гружу. А по DOM можно поподробнее?

    По ответу Дмитрия Белькевича: попробую извлечь HTML из TWebBrowser без применения TIdHTTP, о результатах напишу.  Только вот это пол дела - для чтения текущей цены сгодится, но как мне по кнопкам на Веб-странице нажать? Как уже писал по id нашел кнопку, кликаю как в распростарненных примерах, но ошибка вылазит. Возможно не пот тому элементу кликаю. По кликам на других элементах вылазит даже более грубая ошибка.
  • TraderProg © (13.02.18 16:36) [9]
    Спасибо за ответы Redmond и Дмитрий Белькевич!
    1. API сайта не нашел
    2. Пытался через сниффер отследить запросы, но так и не понял ничего. Я новичок в этом деле.
    3. Код страницы в браузере я уже видел через кнопку F12 и нашел нужные участки с кодом. Только вот применить их в самом Delphi пока не пойму как.
    4. В TWebBrowser и так уже гружу. А по DOM можно поподробнее?

    По ответу Дмитрия Белькевича: попробую извлечь HTML из TWebBrowser без применения TIdHTTP, о результатах напишу.  Только вот это пол дела - для чтения текущей цены сгодится, но как мне по кнопкам на Веб-странице нажать? Как уже писал по id нашел кнопку, кликаю как в распростарненных примерах, но ошибка вылазит. Возможно не пот тому элементу кликаю. По кликам на других элементах вылазит даже более грубая ошибка.
  • TraderProg © (13.02.18 18:21) [10]
    Проблему №1 по парсингу цены частично решил. Удалось вывести код страницы в Memo аж двумя разными способами:
    1-й:
    function GetWebBrowserHTML(const WebBrowser: TWebBrowser): String;
    var
     LStream: TStringStream;
     Stream : IStream;
     LPersistStreamInit : IPersistStreamInit;
    begin
     if not Assigned(WebBrowser.Document) then exit;
     LStream := TStringStream.Create('');
     try
       LPersistStreamInit := WebBrowser.Document as IPersistStreamInit;
       Stream := TStreamAdapter.Create(LStream,soReference);
       LPersistStreamInit.Save(Stream,true);
       result := LStream.DataString;
     finally
       LStream.Free();
     end;
    end;

    2-й:
    function GetHTML(w: TWebBrowser): String;
    Var
     e: IHTMLElement;
    begin
     Result := '';
     if Assigned(w.Document) then
     begin
        e := (w.Document as IHTMLDocument2).body;

        while e.parentElement <> nil do
        begin
          e := e.parentElement;
        end;

        Result := e.outerHTML;
     end;
    end;

    Первый способ работает довольно шустро, но выдает всего 12 кб текста, а второй - несколько секунд думает (даже на моем мощном игровом компе) и выдает 500 кб текста. Первый способ не подходит так как поиск текста не находит нужные элементы в коде. А второй слишком медленный - цена меняется по несколько раз за секунду, а вывод кода в Memo - несколько секунд !!!

    В связи с этим вопрос - возможно ли как-то быстро считывать цену из этого куска текста в 500 кб - чтобы поспевать за ценой?
  • TraderProg © (13.02.18 18:21) [10]
    Проблему №1 по парсингу цены частично решил. Удалось вывести код страницы в Memo аж двумя разными способами:
    1-й:
    function GetWebBrowserHTML(const WebBrowser: TWebBrowser): String;
    var
     LStream: TStringStream;
     Stream : IStream;
     LPersistStreamInit : IPersistStreamInit;
    begin
     if not Assigned(WebBrowser.Document) then exit;
     LStream := TStringStream.Create('');
     try
       LPersistStreamInit := WebBrowser.Document as IPersistStreamInit;
       Stream := TStreamAdapter.Create(LStream,soReference);
       LPersistStreamInit.Save(Stream,true);
       result := LStream.DataString;
     finally
       LStream.Free();
     end;
    end;

    2-й:
    function GetHTML(w: TWebBrowser): String;
    Var
     e: IHTMLElement;
    begin
     Result := '';
     if Assigned(w.Document) then
     begin
        e := (w.Document as IHTMLDocument2).body;

        while e.parentElement <> nil do
        begin
          e := e.parentElement;
        end;

        Result := e.outerHTML;
     end;
    end;

    Первый способ работает довольно шустро, но выдает всего 12 кб текста, а второй - несколько секунд думает (даже на моем мощном игровом компе) и выдает 500 кб текста. Первый способ не подходит так как поиск текста не находит нужные элементы в коде. А второй слишком медленный - цена меняется по несколько раз за секунду, а вывод кода в Memo - несколько секунд !!!

    В связи с этим вопрос - возможно ли как-то быстро считывать цену из этого куска текста в 500 кб - чтобы поспевать за ценой?
  • TraderProg © (13.02.18 18:21) [10]
    Проблему №1 по парсингу цены частично решил. Удалось вывести код страницы в Memo аж двумя разными способами:
    1-й:
    function GetWebBrowserHTML(const WebBrowser: TWebBrowser): String;
    var
     LStream: TStringStream;
     Stream : IStream;
     LPersistStreamInit : IPersistStreamInit;
    begin
     if not Assigned(WebBrowser.Document) then exit;
     LStream := TStringStream.Create('');
     try
       LPersistStreamInit := WebBrowser.Document as IPersistStreamInit;
       Stream := TStreamAdapter.Create(LStream,soReference);
       LPersistStreamInit.Save(Stream,true);
       result := LStream.DataString;
     finally
       LStream.Free();
     end;
    end;

    2-й:
    function GetHTML(w: TWebBrowser): String;
    Var
     e: IHTMLElement;
    begin
     Result := '';
     if Assigned(w.Document) then
     begin
        e := (w.Document as IHTMLDocument2).body;

        while e.parentElement <> nil do
        begin
          e := e.parentElement;
        end;

        Result := e.outerHTML;
     end;
    end;

    Первый способ работает довольно шустро, но выдает всего 12 кб текста, а второй - несколько секунд думает (даже на моем мощном игровом компе) и выдает 500 кб текста. Первый способ не подходит так как поиск текста не находит нужные элементы в коде. А второй слишком медленный - цена меняется по несколько раз за секунду, а вывод кода в Memo - несколько секунд !!!

    В связи с этим вопрос - возможно ли как-то быстро считывать цену из этого куска текста в 500 кб - чтобы поспевать за ценой?
  • TraderProg © (13.02.18 18:21) [10]
    Проблему №1 по парсингу цены частично решил. Удалось вывести код страницы в Memo аж двумя разными способами:
    1-й:
    function GetWebBrowserHTML(const WebBrowser: TWebBrowser): String;
    var
     LStream: TStringStream;
     Stream : IStream;
     LPersistStreamInit : IPersistStreamInit;
    begin
     if not Assigned(WebBrowser.Document) then exit;
     LStream := TStringStream.Create('');
     try
       LPersistStreamInit := WebBrowser.Document as IPersistStreamInit;
       Stream := TStreamAdapter.Create(LStream,soReference);
       LPersistStreamInit.Save(Stream,true);
       result := LStream.DataString;
     finally
       LStream.Free();
     end;
    end;

    2-й:
    function GetHTML(w: TWebBrowser): String;
    Var
     e: IHTMLElement;
    begin
     Result := '';
     if Assigned(w.Document) then
     begin
        e := (w.Document as IHTMLDocument2).body;

        while e.parentElement <> nil do
        begin
          e := e.parentElement;
        end;

        Result := e.outerHTML;
     end;
    end;

    Первый способ работает довольно шустро, но выдает всего 12 кб текста, а второй - несколько секунд думает (даже на моем мощном игровом компе) и выдает 500 кб текста. Первый способ не подходит так как поиск текста не находит нужные элементы в коде. А второй слишком медленный - цена меняется по несколько раз за секунду, а вывод кода в Memo - несколько секунд !!!

    В связи с этим вопрос - возможно ли как-то быстро считывать цену из этого куска текста в 500 кб - чтобы поспевать за ценой?
  • TraderProg © (13.02.18 18:21) [10]
    Проблему №1 по парсингу цены частично решил. Удалось вывести код страницы в Memo аж двумя разными способами:
    1-й:
    function GetWebBrowserHTML(const WebBrowser: TWebBrowser): String;
    var
     LStream: TStringStream;
     Stream : IStream;
     LPersistStreamInit : IPersistStreamInit;
    begin
     if not Assigned(WebBrowser.Document) then exit;
     LStream := TStringStream.Create('');
     try
       LPersistStreamInit := WebBrowser.Document as IPersistStreamInit;
       Stream := TStreamAdapter.Create(LStream,soReference);
       LPersistStreamInit.Save(Stream,true);
       result := LStream.DataString;
     finally
       LStream.Free();
     end;
    end;

    2-й:
    function GetHTML(w: TWebBrowser): String;
    Var
     e: IHTMLElement;
    begin
     Result := '';
     if Assigned(w.Document) then
     begin
        e := (w.Document as IHTMLDocument2).body;

        while e.parentElement <> nil do
        begin
          e := e.parentElement;
        end;

        Result := e.outerHTML;
     end;
    end;

    Первый способ работает довольно шустро, но выдает всего 12 кб текста, а второй - несколько секунд думает (даже на моем мощном игровом компе) и выдает 500 кб текста. Первый способ не подходит так как поиск текста не находит нужные элементы в коде. А второй слишком медленный - цена меняется по несколько раз за секунду, а вывод кода в Memo - несколько секунд !!!

    В связи с этим вопрос - возможно ли как-то быстро считывать цену из этого куска текста в 500 кб - чтобы поспевать за ценой?
  • TraderProg © (13.02.18 18:21) [10]
    Проблему №1 по парсингу цены частично решил. Удалось вывести код страницы в Memo аж двумя разными способами:
    1-й:
    function GetWebBrowserHTML(const WebBrowser: TWebBrowser): String;
    var
     LStream: TStringStream;
     Stream : IStream;
     LPersistStreamInit : IPersistStreamInit;
    begin
     if not Assigned(WebBrowser.Document) then exit;
     LStream := TStringStream.Create('');
     try
       LPersistStreamInit := WebBrowser.Document as IPersistStreamInit;
       Stream := TStreamAdapter.Create(LStream,soReference);
       LPersistStreamInit.Save(Stream,true);
       result := LStream.DataString;
     finally
       LStream.Free();
     end;
    end;

    2-й:
    function GetHTML(w: TWebBrowser): String;
    Var
     e: IHTMLElement;
    begin
     Result := '';
     if Assigned(w.Document) then
     begin
        e := (w.Document as IHTMLDocument2).body;

        while e.parentElement <> nil do
        begin
          e := e.parentElement;
        end;

        Result := e.outerHTML;
     end;
    end;

    Первый способ работает довольно шустро, но выдает всего 12 кб текста, а второй - несколько секунд думает (даже на моем мощном игровом компе) и выдает 500 кб текста. Первый способ не подходит так как поиск текста не находит нужные элементы в коде. А второй слишком медленный - цена меняется по несколько раз за секунду, а вывод кода в Memo - несколько секунд !!!

    В связи с этим вопрос - возможно ли как-то быстро считывать цену из этого куска текста в 500 кб - чтобы поспевать за ценой?
  • TraderProg © (13.02.18 18:54) [11]
    Может как-то можно из TWebBrowser выгружать нужный участок кода, для экономии времени?
  • TraderProg © (13.02.18 18:54) [11]
    Может как-то можно из TWebBrowser выгружать нужный участок кода, для экономии времени?
  • TraderProg © (13.02.18 18:54) [11]
    Может как-то можно из TWebBrowser выгружать нужный участок кода, для экономии времени?
  • TraderProg © (13.02.18 18:54) [11]
    Может как-то можно из TWebBrowser выгружать нужный участок кода, для экономии времени?
  • TraderProg © (13.02.18 18:54) [11]
    Может как-то можно из TWebBrowser выгружать нужный участок кода, для экономии времени?
  • TraderProg © (13.02.18 18:54) [11]
    Может как-то можно из TWebBrowser выгружать нужный участок кода, для экономии времени?
  • TraderProg © (13.02.18 18:59) [12]
    По второй проблеме (как программно нажать на кнопку) по совету Redmond я через Copy selector получил в буфере обмена следующий текст:

    #deal_controls > div > div.deal-form > div.state-block.js_tu_deal_buttons.deal-form__item.deal-form__risk-free > div > div > div.container.-down > button > span.text

    Что с этим делать? Как этот "DOM" работает?
  • TraderProg © (13.02.18 18:59) [12]
    По второй проблеме (как программно нажать на кнопку) по совету Redmond я через Copy selector получил в буфере обмена следующий текст:

    #deal_controls > div > div.deal-form > div.state-block.js_tu_deal_buttons.deal-form__item.deal-form__risk-free > div > div > div.container.-down > button > span.text

    Что с этим делать? Как этот "DOM" работает?
  • TraderProg © (13.02.18 18:59) [12]
    По второй проблеме (как программно нажать на кнопку) по совету Redmond я через Copy selector получил в буфере обмена следующий текст:

    #deal_controls > div > div.deal-form > div.state-block.js_tu_deal_buttons.deal-form__item.deal-form__risk-free > div > div > div.container.-down > button > span.text

    Что с этим делать? Как этот "DOM" работает?
  • TraderProg © (13.02.18 18:59) [12]
    По второй проблеме (как программно нажать на кнопку) по совету Redmond я через Copy selector получил в буфере обмена следующий текст:

    #deal_controls > div > div.deal-form > div.state-block.js_tu_deal_buttons.deal-form__item.deal-form__risk-free > div > div > div.container.-down > button > span.text

    Что с этим делать? Как этот "DOM" работает?
  • TraderProg © (13.02.18 18:59) [12]
    По второй проблеме (как программно нажать на кнопку) по совету Redmond я через Copy selector получил в буфере обмена следующий текст:

    #deal_controls > div > div.deal-form > div.state-block.js_tu_deal_buttons.deal-form__item.deal-form__risk-free > div > div > div.container.-down > button > span.text

    Что с этим делать? Как этот "DOM" работает?
  • TraderProg © (13.02.18 18:59) [12]
    По второй проблеме (как программно нажать на кнопку) по совету Redmond я через Copy selector получил в буфере обмена следующий текст:

    #deal_controls > div > div.deal-form > div.state-block.js_tu_deal_buttons.deal-form__item.deal-form__risk-free > div > div > div.container.-down > button > span.text

    Что с этим делать? Как этот "DOM" работает?
 
Конференция "Основная" » Работа с Web-платформой Olymp Trade
Есть новые Нет новых   [118622   +8][b:0.001][p:0.001]