Получить данные с сайта в текстовом формате
Никак не могу получить данные в текстовом формате. Пробовал и WebBrowser и IdHttp. Сам исходник получаю, но в нем нет именно нужных мне чисел, притом в браузере они отображаются.
Попробуйте вот так(наверняка понравится):
Код:
function GetBrowserText(WB: TWebBrowser): WideString;
var
HtmlDocument: IHtmlDocument2;
begin
if WB.Document <> nil then
begin
HtmlDocument := WB.Document as IHtmlDocument2;
Result := HtmlDocument.Body.Innertext;
end else
Result := '';
end;
procedure TForm1.Button1Click(Sender: TObject);
var
vaIn, vaOut: OleVariant;
s: string;
begin
{
((WebBrowser1.Document as IHTMLDocument2).body as IHTMLElement2).focus();
WebBrowser1.ExecWB(OLECMDID_SELECTALL, OLECMDEXECOPT_PROMPTUSER, vaIn, vaOut);
}
s := GetBrowserText(WebBrowser1);
Memo1.Text := s;
end;
var
HtmlDocument: IHtmlDocument2;
begin
if WB.Document <> nil then
begin
HtmlDocument := WB.Document as IHtmlDocument2;
Result := HtmlDocument.Body.Innertext;
end else
Result := '';
end;
procedure TForm1.Button1Click(Sender: TObject);
var
vaIn, vaOut: OleVariant;
s: string;
begin
{
((WebBrowser1.Document as IHTMLDocument2).body as IHTMLElement2).focus();
WebBrowser1.ExecWB(OLECMDID_SELECTALL, OLECMDEXECOPT_PROMPTUSER, vaIn, vaOut);
}
s := GetBrowserText(WebBrowser1);
Memo1.Text := s;
end;
Как видите всё очень просто. Через интерфейс IHtmlDocument2 получаем доступ к HTML документу, а следовательно к текстам в тегах.
На миллионе сайтов не проверял, если что то не работает на интересующем вас сайте, пишите, попробуем разобраться
После загрузки страницы браузер запускает эти скрипты и они загружают нужные данные.
Сначала происходит обращение к адресу http://widgets2.fxpro.com/signalr/negotiate для получения параметров, затем скрипт обращается к странице http://widgets2.fxpro.com/signalr/connect для установки соединения WebSocket. И уже через WebSocket загружаются нужные вам числа.
Чтобы получить эти числа в программе вам нужно будет изучить используемые страницей скрипты и найти там протокол обмена. Я не вижу способа сделать это легко.
Спасибо, работает, и код лаконичнее :)
Код:
function GetBrowserText(WB: TWebBrowser): WideString;
var
HtmlDocument: IHtmlDocument2;
begin
if Assigned(WB.Document) and (WB.Busy = FALSE) then
begin
HtmlDocument := WB.Document as IHtmlDocument2;
Result := HtmlDocument.Body.Innertext;
HtmlDocument.Close;
end else
Result := '';
end;
var
HtmlDocument: IHtmlDocument2;
begin
if Assigned(WB.Document) and (WB.Busy = FALSE) then
begin
HtmlDocument := WB.Document as IHtmlDocument2;
Result := HtmlDocument.Body.Innertext;
HtmlDocument.Close;
end else
Result := '';
end;
В это время текст не копируется, ну и можно предположить что в это время могут возникать ошибки.
Цитата: QWERYTY
В том коде лишь пример работы. Нужно проверять перед вызовом на готовность документа. Иначе будут баги.
это я проверил :) не знал, что можно получить текст без выделения, теперь знаю)
Цитата: P*t*
.................
Я не вижу способа сделать это легко.
Я не вижу способа сделать это легко.
А я вижу )))))