Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.05.11;
Скачать: CL | DM;

Вниз

TWebBrowser- получение HTML   Найти похожие ветки 

 
Alral ©   (2008-04-11 16:15) [0]

Здравствуйте.
У меня вопрос: как с помощью компонента WebBrowser получить только HTML-код страницы, не загружая ничего иного, и прочитать его?
Заранее спасибо.
С уважением, Александр.


 
clickmaker ©   (2008-04-11 16:20) [1]

для этого не нужен брофзер
TIdHttp или InternetOpenUrl()


 
Alral ©   (2008-04-11 16:23) [2]

Проблема в том, что Indy-компонентов у меня нет (т.к. Turbo Delphi 2006).


 
Reindeer Moss Eater ©   (2008-04-11 16:26) [3]

С этим любой тсп клиент справится


 
clickmaker ©   (2008-04-11 16:41) [4]


> [2] Alral ©   (11.04.08 16:23)

через WinInet Api тогда
там нескольки вызовов всего достаточно:
InternetOpen
InternetOpenUrl
InternetReadFile


 
Alral ©   (2008-04-11 18:57) [5]


> Reindeer Moss Eater ©   (11.04.08 16:26) [3]
>
> С этим любой тсп клиент справится

Простите, не могли бы вы пояснить как это сделать, например, через TCPClient?


 
AIK ©   (2008-04-11 19:08) [6]

Вобшета для этого подходит и Memo, типа Memo1.Lines.LoadFromFile("C:\Мастера DELPHI.htm"), а вот если вам надо через www загружать то не подойдет


 
Alral ©   (2008-04-11 22:00) [7]


> AIK ©   (11.04.08 19:08) [6]
>
> Вобшета для этого подходит и Memo, типа Memo1.Lines.LoadFromFile("C:
> \Мастера DELPHI.htm"), а вот если вам надо через www загружать
> то не подойдет


Мне именно надо загружать HTML-код страницы с WWW. При этом другая "нагрузка" сайта (картинки, и т.п.) мне не нужна.


 
palva ©   (2008-04-11 22:35) [8]

> Мне именно надо загружать HTML-код страницы
А почему обязательно через WebBrowser? Он, кстати, исказит код страницы, выбросит пустые строки, сделает отступы и т. д. Вам же этого не нужно.
По-моему, надо прислушаться к [4] или есть такая функция URLDownloadToFile из модуля UrlMon (Delphi 7)


 
easy ©   (2008-04-11 22:38) [9]

http://dfc.com.ru/?sid=2&id=9&itemid=25


 
Reindeer Moss Eater ©   (2008-04-11 23:34) [10]

например, через TCPClient?

выставляем адрес + порт;
соединяемся;
райтэлн "GET /index.htm HTTP/1.0";
райтэлн;

рипит
текст страницы := текст страницы + ридэлэн;
антил прочтиаем пустую_строку;

смотрим на строку content-length и если там ....

... а еще лучше смотрим прямо в рфц.


 
Alral ©   (2008-04-12 01:33) [11]


> palva ©   (11.04.08 22:35) [8]
>
> > Мне именно надо загружать HTML-код страницы
> А почему обязательно через WebBrowser? Он, кстати, исказит
> код страницы, выбросит пустые строки, сделает отступы и
> т. д. Вам же этого не нужно.

Оформление кода мне в данный момент не важно. Важно только получить содержание для обработки самой программой.

> По-моему, надо прислушаться к [4] или есть такая функция
> URLDownloadToFile из модуля UrlMon (Delphi 7)

У меня Turbo Delphi 2006.


> Reindeer Moss Eater ©   (11.04.08 23:34) [10]

Но ведь для TCPClient необходимо знать IP, а у меня только URL


 
Alral ©   (2008-04-13 11:49) [12]


> А почему обязательно через WebBrowser? Он, кстати, исказит
> код страницы, выбросит пустые строки, сделает отступы и
> т. д. Вам же этого не нужно.

А всё-таки как это осуществить?


 
Palladin ©   (2008-04-13 12:07) [13]


>Alral ©(13.04.08 11:49) [12]


ну ведь сказали уже, используй WinInet. Он гораздо проще чем кажется.


 
palva ©   (2008-04-13 13:13) [14]

> А всё-таки как это осуществить?

То что вы просите, вряд ли возможно осуществить. Страничка уже разобрана и разложена по внутренним полочкам браузера. Браузер может  собрать страничку обратно, но это уже не будет оригиналом. Если хотите, можете попробовать такой код:

procedure TForm1.FormCreate(Sender: TObject);
begin
 WebBrowser1.Navigate("http://,,,,);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 document: IHTMLDocument2;
 docAll: IHTMLElementCollection;
 firstElement: IHTMLElement;
begin
 document := WebBrowser1.Document as IHTMLDocument2;
 if Assigned(document) then
 begin
   docAll := document.all;
   firstElement := docAll.Item(0,"") as IHTMLElement;
   Memo1.Text := firstElement.OuterHTML;
 end
end;


 
ЦУП ©   (2008-04-13 17:27) [15]

Не надо WebBrowser.

////////////////////////////////////////////////////////////////////////////////
//
//  Демо получения HTML кода страницы
//  Автор: Александр (Rouse_) Багель
//  c Fangorn Wizards Lab 1998 - 2003
//  19 января 2003

unit GetUrl;

interface

uses
 Windows, Wininet;

const
 HTTP_PORT = 80;
 CRLF = #13#10;
 Header = "Content-Type: application/x-www-form-urlencoded" + CRLF;

function GetPage(const URL: String): String;

implementation

function DelHttp(URL: String): String;
begin
 if Pos("http://", URL) > 0 then Delete(Url, 1, 7);
 Result := Copy(Url, 1, Pos("/", Url) - 1);
 if Result = "" then Result := URL + #0;
end;

function GetPage(const URL: String): String;
var
 FSession, FConnect, FRequest: HINTERNET;
 FHost, FScript, SRequest: String;
 Ansi: PAnsiChar;
 Buff: array [0..1023000] of Char;
 BytesRead: Cardinal;
 Res, Len: DWORD;
begin
 Result := "";
 // Небольшой парсинг
 // вытаскиваем имя хоста и параметры обращения к скрипту
 FHost := DelHttp(Url);
 FScript := Url;
 Delete(FScript, 1, Pos(FHost, FScript) + Length(FHost));
 //FScript := FHost + "/" +FScript;

 // Инициализируем WinInet
 FSession := InternetOpen("DMFR", INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
 if not Assigned(FSession) then Exit;
 try
   // Попытка соединения с сервером
   FConnect := InternetConnect(FSession, PChar(FHost), HTTP_PORT, nil,
                               "HTTP/1.0", INTERNET_SERVICE_HTTP, 0, 0);
   if not Assigned(FConnect) then Exit;
   try
     // Подготавливаем запрос страницы
     Ansi := "text/*";
     FRequest := HttpOpenRequest(FConnect, "GET", PChar(FScript), "HTTP/1.1",
                                 nil, @Ansi, INTERNET_FLAG_RELOAD, 0);
     if not Assigned(FConnect) then Exit;
     try
       // Добавляем заголовки
       if not (HttpAddRequestHeaders(FRequest, Header, Length(Header),
                                     HTTP_ADDREQ_FLAG_REPLACE or
                                     HTTP_ADDREQ_FLAG_ADD or
                                     HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA)) then Exit;

       // Проверяем запрос:
       Len := 0;
       Res := 0;
       SRequest := " ";
       HttpQueryInfo(FRequest, HTTP_QUERY_RAW_HEADERS_CRLF or
         HTTP_QUERY_FLAG_REQUEST_HEADERS, @SRequest[1], Len, Res);
       if Len > 0 then
       begin
         SetLength(SRequest, Len);
         HttpQueryInfo(FRequest, HTTP_QUERY_RAW_HEADERS_CRLF or
           HTTP_QUERY_FLAG_REQUEST_HEADERS, @SRequest[1], Len, Res);
       end;
       // Отправляем запрос
       if not (HttpSendRequest(FRequest, nil, 0, nil, 0)) then Exit;
       // Получаем ответ
       FillChar(Buff, SizeOf(Buff), 0);
       repeat
         Result := Result + Buff;
         FillChar(Buff, SizeOf(Buff), 0);
         InternetReadFile(FRequest, @Buff, SizeOf(Buff), BytesRead);
       until BytesRead = 0;
     finally
       InternetCloseHandle(FRequest);
     end;
   finally
     InternetCloseHandle(FConnect);
   end;
 finally
   InternetCloseHandle(FSession);
 end;
end;

end.



Страницы: 1 вся ветка

Текущий архив: 2008.05.11;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.023 c
15-1206933934
TPL
2008-03-31 07:25
2008.05.11
Если нету Com-порта


6-1186225773
Rav
2007-08-04 15:09
2008.05.11
CharSet для операвки E-Mail


2-1208026785
deadteachers
2008-04-12 22:59
2008.05.11
WebBrowser


2-1207744253
Zloi_Funtik
2008-04-09 16:30
2008.05.11
удаление ранее созданных динамических объектов


15-1206646481
aizon
2008-03-27 22:34
2008.05.11
Помощь