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

Ваш аккаунт

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

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

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

HTML из WebBrowser как лучше дернуть

3.6K
02 января 2010 года
CrazyTimon
125 / / 13.02.2006
Доброго времени суток. Мб кто то уже сталкивался с такой проблемой.
Суть вопроса:
Есть страница(допустим ya.ru), нужно, чтобы можно было выдерать хтмл код страницы, и анализировать(ну с анализом сам справлюсь).Самое главное каким образом выдернуть код?При чем код должен быть полностью, и проверка на законченость страницы в этом не помогает, чем руководствоваться уже не знаю. Пробовал качать дополнительные компоненты....особо не помогло...
-----------------------------------------
1.Как выдернуть ХТМЛ код с любой страницы?(взятой с интернета, а не с локального источника)
2.Как узнать что загрузка страницы(именно страницы а не фрейма) закончилась?

-------------------------------------------------
З.Ы. Юзаю Borland Delphi 7
399
03 января 2010 года
KIV
432 / / 20.01.2009
Можно так:
 
Код:
IHTMLDocument2(WebBrowser1.Document).body.innerHTML

Только он вернёт только body страницы, без заголовка (head).
3.6K
03 января 2010 года
CrazyTimon
125 / / 13.02.2006
Оно конечно работает....только опять же не всегда корректно, например если данную операцию применить на главную страницу сайта то выдернется не все, что в body.
Хотя и на этом большое спасибо=)
Осталась решить как узнать что страница загрузилась.
246
03 января 2010 года
GIZMO
1.8K / / 30.07.2004
Цитата: CrazyTimon
Осталась решить как узнать что страница загрузилась.


Обрабатывать OnDocumentComplete, пример есть в справке и тут (правда на С++).

3.6K
03 января 2010 года
CrazyTimon
125 / / 13.02.2006
Пробовал.....он скорее всего реагирует не на весь документ а на фрейм
257
03 января 2010 года
kosfiz
1.6K / / 18.09.2005
Я так понял, что нужно через WebBrowser, но все же.
Собственно, если вам нужно код получить, то почему бы не получить его через TcpClient?
 
Код:
// коннектимся
TcpClient1.RemoteHost:='ya.ru';
TcpClient1.RemotePort:= '80';
TcpClient1.Connect;

// OnConnect
s:='GET / HTTP/1.0'+#13#10+#13#10;
TcpClient1.Sendln(s, '');
s:=TcpClient1.Receiveln(''); // в s будет html-код

Понятно, конечно, что будет присутствовать заголовок ответа сервера, но его можно отделить.
399
03 января 2010 года
KIV
432 / / 20.01.2009
Цитата:
Я так понял, что нужно через WebBrowser, но все же.
Собственно, если вам нужно код получить, то почему бы не получить его через TcpClient?

Код:
// коннектимся
TcpClient1.RemoteHost:='ya.ru';
TcpClient1.RemotePort:= '80';
TcpClient1.Connect;

// OnConnect
s:='GET / HTTP/1.0'+#13#10+#13#10;
TcpClient1.Sendln(s, '');
s:=TcpClient1.Receiveln(''); // в s будет html-кодПонятно, конечно, что будет присутствовать заголовок ответа сервера, но его можно отделить.


Максимальная длина строки в Delphi - 255 символов. Длина большинства веб-страниц намного больше. А ReceiveLn возвращает именно String. В этом случае надо пользоваться ReceiveBuf.

257
03 января 2010 года
kosfiz
1.6K / / 18.09.2005
Цитата: KIV
Максимальная длина строки в Delphi - 255 символов. Длина большинства веб-страниц намного больше. А ReceiveLn возвращает именно String. В этом случае надо пользоваться ReceiveBuf.


хех, если нет директивы компилятора {$H-}, то в Delphi string - это AnsiString и, соответвенно, может содержать ~2^31 символов, а это до 2Гб

6
03 января 2010 года
George
4.1K / / 05.01.2007
TIdHTTP.Get вернет в строку весь хтмл код вроде.
257
03 января 2010 года
kosfiz
1.6K / / 18.09.2005
именно, причем все будет намного компактнее, чем в случае с TcpClient

P.S. можно и Post'ом
3.6K
03 января 2010 года
CrazyTimon
125 / / 13.02.2006
Спс попробую завтра, надеюсь что способ предложенный kosfiz'ом поможет, и решит проблему с проверкой загруженности страницы(что страница загрузилась полностью, либо что сервер закочнил отвечать). По поводу TIdHTTP.Get не совсем понял к какому объекту это применяется в webbrowser'у или к TcpClient'у?
257
04 января 2010 года
kosfiz
1.6K / / 18.09.2005
Цитата: CrazyTimon
По поводу TIdHTTP.Get не совсем понял к какому объекту это применяется в webbrowser'у или к TcpClient'у?


Ни к тому ни к другому не относится.
Будет как-то вот так:

Код:
uses
  ...,
  IdHTTP,
  ...;
var
  http_client: TIdHTTP;
  source_code: string;
{ много может быть всего}
  http_client:= TIdHTTP.Create(nil);
  source_code:= http_client.Get('http://ya.ru'); //в source_code html-код страницы
{опять же много всего}
6
04 января 2010 года
George
4.1K / / 05.01.2007
да, TIdHTTP - это отдельный компонент. Искать на вкладке Indy (вроде там он живет). Хотя не уверен что инди входят во все версии дельфей.
246
04 января 2010 года
GIZMO
1.8K / / 30.07.2004
Цитата: CrazyTimon
Пробовал.....он скорее всего реагирует не на весь документ а на фрейм


Значит не правильно пробовал:) Там как раз отлавливается "полная" загрузка страницы.

14
11 января 2010 года
Phodopus
3.3K / / 19.06.2008
Цитата: Washington
Хотя не уверен что инди входят во все версии дельфей.


а если не входит (но в широкораспространенную ;) 7-ку конечно же входит) то можно (и даже нужно, и даже если входит :)) скачать новый билд 10й версии и поставить вместо 9.

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