Форум: "Начинающим";
Текущий архив: 2008.05.11;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.006 c