DelphiFAQ Home Search:

Extract the HTML from a page loaded in TWebBrowser


comments10 comments. Current rating: 5 stars (1 votes). Leave comments and/ or rate it.

How can I get the HTML from a web page that I loaded in TWebBrowser? I want to clip some web contents?


You can use the Document property - it has a lot of interesting properties:

  • Document.All
  • Document.bgColor
  • Document.Body.innerHTML
  • Document.Body.Style.overflowX
  • Document.Body.Style.overflowY
  • Document.Body.Style.zoom
  • Document.cookie
  • Document.documentElement.innerHTML
  • Document.documentElement.innerText
  • Document.FileSize
  • Document.Frames
  • Document.Images
  • Document.LastModified
  • Document.Links
  • Document.Location.Protocol
  • Document.ParentWindow
  • Document.ParentWindow.ScrollBy(iX: Integer; iY: Integer)
  • Document.Selection
  • Document.Title
  • Document.URL

of which the Body.innerText will serve our purpose. The only limitation of this solution is that it is giving us the HTML as the web browser displays it - which may be different from what 'View Source' in Internet Explorer would show. If the original HTML file included javascript dynamically generating content like this:

<script language='JavaScript'>
document.write('Hello Visitor');

then the above function will show the output 'Hello Visitor' but not the original javascript. You need to take a look at the browser cache to get to the original file or use something other than TWebBrowser.

// tested with Delphi 6, should work in Delphi 5 as well

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
  document : IHTMLDocument2;
  s : string;
  // extract the day's total earnings etc
  Document := Webbrowser1.Document as IHTMLDocument2;
  s := Document.Body.innerHTML;

  // process this string to extract contents

Content-type: text/html


2006-01-24, 10:59:02
[hidden] from United Kingdom  
Piotr Borowski
2006-04-14, 01:16:36
anonymous from Vietnam  
function GetBrowserHtml(const webBrowser: TWebBrowser): String;
strStream: TStringStream;
adapter: IStream;
browserStream: IPersistStreamInit;
strStream := TStringStream.Create('');
browserStream := webBrowser.Document as IPersistStreamInit;
adapter := TStreamAdapter.Create(strStream,soReference);
result := strStream.DataString;

2006-04-14, 01:17:44
anonymous from Vietnam  
<p>Trần quốc Trung</P
2007-02-08, 05:08:25
anonymous from Austria  
Only body element exists in documents which has body element, so that first script is full shit.
2007-02-08, 05:14:07
anonymous from Austria  
Result: WideString;
Doc: IHTMLDocument3;
Browser: TWebBrowser;
Doc := Browser.Document as IHTMLDocument3;
Result := Doc.documentElement.innerHTML;
... and this is all folks, guys! And no full code from C++ programmer - simply like as Delphi

2013-08-02, 02:57:58
anonymous from India  
TWebBrowser.Document loads html documnet.But i am using TIWURLWindow in place of TWebBrowser.Can any tell which property i can use in place of Document coz it doesnot work with TIWURLWindow?

2013-08-02, 16:18:41
anonymous from Canada  
'Neyow ow far-frederick on pinger'
This image was also posted here:
Extract the HTML from a page loaded in TWebBrowser

2013-08-02, 16:18:48
anonymous from Canada  
'Neyow ow far-frederick on pinger'
This image was also posted here:
Extract the HTML from a page loaded in TWebBrowser

2013-11-29, 08:13:01

2015-01-30, 01:26:23
anonymous from Netherlands  
Если интересует вот исходники описанной проги://Преобразование ключаDux:=Gx;Duy:=Gy;for i:=tmp+1 to 16 do begin k1:=(3*Dux*Dux + a)/(2*Duy); k:=round(k1); x:=(k*k-2*Dux)mod p; y:=(k*(Dux-x)-Duy) mod p; Dux:=x; Duy:=y; if n[i] = 1 then begin k1:=(Gy-Duy)/(Gx-Dux); k:=round(k1); x:=(k*k-Gx-Dux)mod p; y:=(k*(Gx-Dux)-Gy)mod p; Dux:=x; Duy:=y; end; end; Dux:=abs(Dux);Duy:=abs(Duy);//Дополнительноое числоtemps:=Inputbox( Введите любое число от 1 до 32089 , , );m:=strtoint(temps);tempCu:=tempCu+m;If (m<1) or (m>32088) then begin label1.Caption := label1.Caption + Введенный ключ не соответствует интервалу'; exit; end;//Преобразование дополнительного числа согласно алгоритмуRx:=Gx;Ry:=Gy;for i:=tmp+1 to 16 do begin k1:=(3*Rx*Rx + a)/(2*Ry); k:=round(k1); x:=(k*k-2*Rx)mod p; y:=(k*(Rx-x)-Ry) mod p; Rx:=x; Ry:=y; if n[i] = 1 then begin k1:=(Gy-Ry)/(Gx-Rx); k:=round(k1); x:=(k*k-Gx-Rx)mod p; y:=(k*(Gx-Rx)-Gy)mod p; Rx:=x; Ry:=y; end; end;Rx:=abs(Rx);Ry:=abs(Ry);//Преобразование координат точки для шифрованияPx:=Dux;Py:=Duy;for i:=tmp+1 to 16 do begin k1:=(3*Px*Px + a)/(2*Py); k:=round(k1); x:=(k*k-2*Px)mod p; y:=(k*(Px-x)-Py) mod p; Px:=x; Py:=y; if n[i] = 1 then begin k1:=(Duy-Py)/(Dux-Px); k:=round(k1); x:=(k*k-Dux-Px)mod p; y:=(k*(Dux-Px)-Duy)mod p; Px:=x; Py:=y; end; end;Px:=abs(Px);Py:=abs(Py);label1.Caption :=label1.Caption +chr(10);//Операция шифрованияlabel1.Caption :='Сообщение успешно зашифровано.' + chr(10)+ Теперь данное сообщение можно расшифровать. Нажмите на кнопочку Расшифровать ;for i:=1 to t do begin e[i]:=s[i]*Px; label8.Caption :=label8.Caption + floattostr(e[i])+' ; end;k:=0;x:=0;y:=0;//Получение выражения для расшифрованияQx:=Rx;Qy:=Ry;for i:=tmp+1 to 16 do begin k1:=(2*Rx*Rx + a)/(2*Ry); k:=round(k1); x:=(k*k-2*Rx)mod p; Qx:=x; y:=(k*(Rx-Qx)-Ry)mod p; Qy:=y; if cb[i] = 1 then begin k1:=(Qy-Ry)/(Qx-Rx); k:=round(k1); x:=(k*k-Rx-Qx)mod p; y:=(k*(Rx-Qx)-Ry)mod p; Qx:=x; Qy:=y; end; end;Qx:=abs(Px);Qy:=abs(Py);//Расшифровка сообщенияlabel1.Caption :=label1.Caption + chr(10);for i:=1 to t do m[i]:=(e[i]/Qx);for i:=1 to t do if m[i] = 32+150 then str[i]:=chr(32);for i:=1 to t do for j:=224 to 255 do if m[i] = j then str[i]:=chr(j);//Вывод сообщения на экран for i:=1 to t do edit2.Text := edit2.Text + str[i];label1.Caption :=label1.Caption + chr(10)+'Сообщение успешно расшифровано.'+chr(10)+'Вы можете продолжить работу с программой или выйти из нее. Для выхода нажмите кнопочку Выход .';end;Модуль проверки и задания параметров эллиптической кривой.//Задание параметров эллиптической кривой//Задание модуляp:=31991; //Простое число//Задание числа точек на прямойq:=32089;//Задание коэффициентов кривойb:=1000;a:=31988;// Проверка a mod p 0 и b mod p 0if a mod p = 0 then begin label1.Caption := Chr(10) + Неверный параметр a или p .'; exit; enldese Label1.Caption := Chr(10) + Параметр а задан верно.';if b mod p = 0 then begin label1.Caption := label1.Caption + Chr(10) + Неверный параметр b или p .'; exit; enldese Label1.Caption :=label1.Caption + Chr(10) + Параметр b задан верно.';//Проверка 4*a^3 + 27*b^2 0if 4*a*a*a + 27*b*b mod p = 0 then begin Label1.Caption := Label1.Caption +Chr(10)+ Дескрименант равен нулю'; exit; end;//Выбор точки кривой G(x,y)Gx:=0;Gy:=5585;Cu:=5103;tempCu:=Cu;Модуль перевода числа в двоичную форму.temp:=32768;for j:=1 to 16 do if m-temp<0 then begin n[j]:=0; temp:=temp/2; end else begin n[j]:=1; m:=m-temp; temp:=temp/2; end;for i:=1 to 16 do if n[i] = 1 then begin tmp:=i; break; end;Модуль преобразования входного текста.m:=edit1.Text; //Получение текста сообщенияt:=length(m); //Вычисление длины текста сообщения в символахfor i:=1 to t do //Нет ASCII кодировки буквы ё if m[i] = ё' then m[i]:='е';for i:=1 to t do //Нахождение пробелов в тексте if m[i] = chr(32) then s[i]:=32+150;for i:=1 to t do //Получение текста сообщения в ASCII кодировке for j:=224 to 255 do if m[i] = Chr(j) then s[i]:=j;label1.Caption :=label1.Caption + Chr(10) + Сообщение успешно записано.' + chr(10) + Теперь это сообщение можно зашифровать. Нажмите на кнопочку Зашифровать ;Button3.Enabled :=true;



NEW: Optional: Register   Login
Email address (not necessary):

Rate as
Hide my email when showing my comment.
Please notify me once a day about new comments on this topic.
Please provide a valid email address if you select this option, or post under a registered account.

Show city and country
Show country only
Hide my location
You can mark text as 'quoted' by putting [quote] .. [/quote] around it.
Please type in the code:

Please do not post inappropriate pictures. Inappropriate pictures include pictures of minors and nudity.
The owner of this web site reserves the right to delete such material.

photo Add a picture: