TWebBrowser i przyjaciele

tomksoft

Czarna strona WebBrowsera - OleObject i te sprawy.
Przedstawię wam najpotrzebniejsze funkcje WebBrowser-a. Oto one:

Aby pobrać kod HTML wystarczy jedna linika kodu:

function GetHtml(WebBrowser : TWebBrowser) : String;
begin
Result:=WebBrowser.OleObject.Document.documentElement.innerHTML;
end;

Możemy również pobrać sam tekst, bez znaczników HTML:

function GetText(WebBrowser : TWebBrowser) : String;
begin
Result:=WebBrowser.OleObject.Document.documentElement.innerText;
end;

Pobranie wszystkich adresów obrazków ze strony:

function  GetImages(WebBrowser : TWebBrowser) : String;
var  a : Integer;
       s : String;
begin
for a := 0 to WebBrowser.OleObject.Document.Images.Length-1 do
s:=s+(WebBrowser.OleObject.Document.Images.Item(a).Src)+#13;
Result:=s;
end;

Aby pobrać wielkość strony w bajtach:

function  GetSize(WebBrowser : TWebBrowser) : Integer;
begin
Result:=StrToInt((WebBrowser.Document as IHTMLDocument2).FileSize);
end;

Aby pobrać wszystkie linki ze strony:

function  GetLinks(WebBrowser : TWebBrowser) : String;
var s : String;
     a : Integer;
begin
for a := 0 to WebBrowser.OleObject.Document.Links.Length-1 do
s:=s+(WebBrowser.OleObject.Document.Links.Item(a).href)+#13;
Result:=s;
end;

Funkcja do pobrania protokołu:

function GetProtocol(WebBrowser : TWebBrowser) : String;
begin
result:=WebBrowser.OleObject.Document.Location.Protocol;
end;

Funkcja do pobierania jakie cookies wysyła nam strona:

function GetCookies(WebBrowser : TWebBrowser) : String;
var
  documentt: IHTMLDocument2;
  cookies: String;
begin
 documentt := WebBrowser.Document as IHTMLDocument2;
  if Assigned(documentt) then
    cookies := documentt.cookie;
    Result:=cookies;
end;

Funkcja do pobierania adresów wszystkich ramek:

function  GetFrames(WebBrowser : TWebBrowser) : String;
var s : String;
    a : Integer;
begin
for a := 0 to WebBrowser.OleObject.Document.Frames.Length-1 do
s:=s+(WebBrowser.OleObject.Document.Frames.Item(a).Document.URL)+#13;
Result:=s;
end;

Funkcja, która zwraca nam adres aktualnej strony:

Edit1.Text:= WebBrowser1.LocationURL;

Aby powyższe funkcje działały strona musi być całkowicie załadowana !!(OnDocumentComplete)
Do działania niektórych funkcji wymagany jest moduł MSHTML!!

Życzę miłej i bezproblemowej współpracy z WebBrowser-em ;)

30 komentarzy

Blokowanie pop-up: Znajdź zdarzenie onNewWindow2, kliknij dwa razy w pustym polu obok, i w nowej procedurze (np. WebBrowser1NewWindow2) wpisz cancel:=true;

To (chyba) zablokuje tworzenie wszystkich nowych okien, wiec jak na stronie bedzie np. <A HREF="someadres" TARGET="_top" ... > (już wyjaśniam jak ktoś HTML nie zna: TARGET="_top" oznacza żeby dokument w nowym oknie ladowac) to to też chyba zablokuje...

Weź dodaj kod na modyfikacje span w wyświetlonej stronie

sasser.64, może podaj gdzie da się ściągnąć Mozilla Controle?

Tommalla - jak chcesz alternatywy to proponuje Mozilla Control. mam i nie narzekam, a nawet sie ciesze ze z dziurawego ie nie korzystam.

migajek: target="_top" otwiera w obecnym oknie - do nowego okna służy target="_blank" (ale zdaje się to była tylko pomyłka) ;]

Tomalla: lol :D i myslisz ze jeszcze ktos by ci dal za darmo? :) w sumie jest jeden taki http://pbear.com/htmlviewers.html, komercyjna wersja obsluguje nawet wiekszosc CSSow, ale brak w nim JS (co mozna stosunkowo latwo nadrobic integrujac go z SpiderMonkey :D )

Jakby ktos zrobil engine wlasny(cos innego niz spakowane badzIEwIE), to bylbym wdzieczny, gdyz sam na VCL, mimo prob, zadnego komponentu napisac nie potrafie ;(

a przepraszam ja was bardzo ale jak ustawić żeby toto kożystało ze StatusBar?
I jak wyłapywać te teksty bo chciałbym to w logu (co się ściąga jak odwiedzam strony i wogóle wszystkie te teksty)

Świetny artykuł!!!!
Tego potrzebowałem!!!!

zamiast tego blokokowania nowych okien przez cancel proponuję
procedure TMDIChild.WebBrowser1NewWindow2(Sender:TObject; var ppDisp: IDispatch; var Cancel: WordBool)
var
NewWindow:TMDIChild;
begin
NewWindow:=TMDIChild.Create(self);
NewWindow.Show;
ppDisp:=NewWindow.WebBrowser1.DefaultDispatch;
end;
a następnie sprawdzić, czy podczas OnBeforeNavigate lub OnDocumentComplete następuje NewWindow2, i wtedy dać Cancel:=True ;)

Wszystko pięknie ładnie, tylko że jest jedno ale.. :)
ten WebBrowser to nic innego jak opakowana kontrolka Internet Explorera :P A wszyscy wiedzą jaka z niego gówniana przeglądarka jest ;) Ta kontrolka da tylko takie możliwości, jakie może dać IE, i będzie tak samo podatna na wirusy, hacking, dialery i inne śmieci. Jak już ktoś chce pisać przeglądarkę, to raczej chyba lepiej całkiem od zera.

a jak zablokowac kominikaty o informujące o błędach w skryptach i jak zablokowac popupy

A jak pobrać datę modyfikacji strony ?

Thx za pomoc:)

np. edit1.text := GetCookies(Nazwa_WebBrowsera);

Jestem baardzo początkujący i chciałbym się dowiedzieć, jak wywołać funkcję GetCookies??

Thx, ciekawe, daje 5. Calkiem przydatne, rozwiazalo mi to jeden powazny problem

hmmm. no co zrobić, narazie tylko Delphi sie zajmuje, ale jak masz coś ala WebBrowser w innym języku to też powinno działać.

tomksoft fajny art tylko szkoda ze w Delphi:-(

hehhe...podoba mi się....5

mi jednak jest łatwiej na string-u, bo raz musze wciepnąć TStringList, a raz do TStrings,a tak tylko przypisuję zmienną Text.

haha nazwy obrazkow w stringu:P stringlist wez w result

hmm... Ciekawe skąd można dorwać wszystkie??

Przepraszam bardzo, ale zapomniałem o najważniejszym - cookies, ale już zmodyfikowałem.

bardzo dobrze, dostatecznie ;-) Stawiam 6 :-D

ja dałem 6 :D

wiem, ale normalnie to strasznie ciężko znaleźć...

No z czymś takim to można przeglądarkę z prawdziwego zderzenia, zrobić!

Oceniajcie! to mój pierwszy art ;)