-
Спасибо за ответы Redmond и Дмитрий Белькевич!
1. API сайта не нашел
2. Пытался через сниффер отследить запросы, но так и не понял ничего. Я новичок в этом деле.
3. Код страницы в браузере я уже видел через кнопку F12 и нашел нужные участки с кодом. Только вот применить их в самом Delphi пока не пойму как.
4. В TWebBrowser и так уже гружу. А по DOM можно поподробнее?
По ответу Дмитрия Белькевича: попробую извлечь HTML из TWebBrowser без применения TIdHTTP, о результатах напишу. Только вот это пол дела - для чтения текущей цены сгодится, но как мне по кнопкам на Веб-странице нажать? Как уже писал по id нашел кнопку, кликаю как в распростарненных примерах, но ошибка вылазит. Возможно не пот тому элементу кликаю. По кликам на других элементах вылазит даже более грубая ошибка.
-
Спасибо за ответы Redmond и Дмитрий Белькевич!
1. API сайта не нашел
2. Пытался через сниффер отследить запросы, но так и не понял ничего. Я новичок в этом деле.
3. Код страницы в браузере я уже видел через кнопку F12 и нашел нужные участки с кодом. Только вот применить их в самом Delphi пока не пойму как.
4. В TWebBrowser и так уже гружу. А по DOM можно поподробнее?
По ответу Дмитрия Белькевича: попробую извлечь HTML из TWebBrowser без применения TIdHTTP, о результатах напишу. Только вот это пол дела - для чтения текущей цены сгодится, но как мне по кнопкам на Веб-странице нажать? Как уже писал по id нашел кнопку, кликаю как в распростарненных примерах, но ошибка вылазит. Возможно не пот тому элементу кликаю. По кликам на других элементах вылазит даже более грубая ошибка.
-
Проблему №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 кб - чтобы поспевать за ценой?
-
Проблему №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 кб - чтобы поспевать за ценой?
-
Проблему №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 кб - чтобы поспевать за ценой?
-
Проблему №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 кб - чтобы поспевать за ценой?
-
Проблему №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 кб - чтобы поспевать за ценой?
-
Проблему №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 кб - чтобы поспевать за ценой?
-
Может как-то можно из TWebBrowser выгружать нужный участок кода, для экономии времени?
-
Может как-то можно из TWebBrowser выгружать нужный участок кода, для экономии времени?
-
Может как-то можно из TWebBrowser выгружать нужный участок кода, для экономии времени?
-
Может как-то можно из TWebBrowser выгружать нужный участок кода, для экономии времени?
-
Может как-то можно из TWebBrowser выгружать нужный участок кода, для экономии времени?
-
Может как-то можно из TWebBrowser выгружать нужный участок кода, для экономии времени?
-
По второй проблеме (как программно нажать на кнопку) по совету 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" работает?
-
По второй проблеме (как программно нажать на кнопку) по совету 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" работает?
-
По второй проблеме (как программно нажать на кнопку) по совету 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" работает?
-
По второй проблеме (как программно нажать на кнопку) по совету 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" работает?
-
По второй проблеме (как программно нажать на кнопку) по совету 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" работает?
-
По второй проблеме (как программно нажать на кнопку) по совету 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" работает?