Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: 6453
Последний выпуск: 19.06.2015

Получить данные с сайта в текстовом формате

87K
18 марта 2014 года
olegdenega
5 / / 18.03.2014
Есть сайт http://widgets2.fxpro.com/Home/ClientPositions
Никак не могу получить данные в текстовом формате. Пробовал и WebBrowser и IdHttp. Сам исходник получаю, но в нем нет именно нужных мне чисел, притом в браузере они отображаются.
456
20 марта 2014 года
QWERYTY
595 / / 25.03.2012
Вы напомнили мне меня года 4 назад, когда я не понимая как конкретно делать ковырялся в этом дубовом браузере. Сначала лес очень густой, какие то не понятные типы данных, структуры, интерфейсы. Но если долго и упорно читать доки и эксперементировать то лес редеет.


Попробуйте вот так(наверняка понравится):
Код:
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;
Код работает как ваш за исключением выделения в браузере.
Как видите всё очень просто. Через интерфейс IHtmlDocument2 получаем доступ к HTML документу, а следовательно к текстам в тегах.

На миллионе сайтов не проверял, если что то не работает на интересующем вас сайте, пишите, попробуем разобраться
350
19 марта 2014 года
P*t*
474 / / 15.02.2007
В данном случае в самой странице есть только скрипты на JavaScript.
После загрузки страницы браузер запускает эти скрипты и они загружают нужные данные.
Сначала происходит обращение к адресу http://widgets2.fxpro.com/signalr/negotiate для получения параметров, затем скрипт обращается к странице http://widgets2.fxpro.com/signalr/connect для установки соединения WebSocket. И уже через WebSocket загружаются нужные вам числа.
Чтобы получить эти числа в программе вам нужно будет изучить используемые страницей скрипты и найти там протокол обмена. Я не вижу способа сделать это легко.
87K
20 марта 2014 года
olegdenega
5 / / 18.03.2014
Спасибо, работает, и код лаконичнее :)
456
20 марта 2014 года
QWERYTY
595 / / 25.03.2012
В том коде лишь пример работы. Нужно проверять перед вызовом на готовность документа. Иначе будут баги.

Код:
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;
А вообще странно, например у меня когда документ загружен это отображается в статусбаре, а веббраузер ничего не отображает еще около 0.5 секунды(это при переходе на - http://widgets2.fxpro.com/Home/ClientPositions).
В это время текст не копируется, ну и можно предположить что в это время могут возникать ошибки.
87K
20 марта 2014 года
olegdenega
5 / / 18.03.2014
Цитата: QWERYTY
В том коде лишь пример работы. Нужно проверять перед вызовом на готовность документа. Иначе будут баги.



это я проверил :) не знал, что можно получить текст без выделения, теперь знаю)

456
20 марта 2014 года
QWERYTY
595 / / 25.03.2012
Цитата: P*t*
.................
Я не вижу способа сделать это легко.



А я вижу )))))

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог