8、直接從TWebBrowser得到網頁源碼及Html
下面先介紹一種極其簡單的得到TWebBrowser正在訪問的網頁源碼的方法。一般方法是利用TWebBrowser控件中的Document對象提供的IPersistStreamInit接口來實現,具體就是:先檢查WebBrowser.Document對象是否有效,無效則退出;然後取得IPersistStreamInit接口,接著取得HTML源碼的大小,分配全局堆內存塊,建立流,再將Html文本寫到流中。程序雖然不算復雜,但是有更簡單的方法,所以實現代碼不再給出。其實基本上所有IE的功能TWebBrowser都應該有較為簡單的方法來實現,獲取網頁源碼也是一樣。下面的代碼將網頁源碼顯示在Memo1中。
Memo1.Lines.Add(IHtmlDocument2(WebBrowser1.Document).Body.OuterHtml);
同時,在用TWebBrowser浏覽Html文件的時候要將其保存為文本文件就很簡單了,不需要任何的語法解析工具,因為TWebBrowser也完成了,如下:
Memo1.Lines.Add(IHtmlDocument2(WebBrowser1.Document).Body.OuterText);
9、“查找”功能
查找對話框可以在文檔獲得焦點的時候通過按鍵Ctrl-F來調出,程序中則調用IOleCommandTarget對象的成員函數Exec執行OLECMDID_FIND操作來調用,下面給出的方法是如何在程序中用代碼來做出文字選擇,即你可以自己設計查找對話框。
var
Doc: IHtmlDocument2;
TxtRange: IHtmlTxtRange;
begin
Doc :=WebBrowser1.Document as IHtmlDocument2;
Doc.SelectAll; //此處為簡寫,選擇全部文檔的方法請參見第三條命令操作
//這句話尤為重要,因為IHtmlTxtRange對象的方法能夠操作的前提是
//Document已經有一個文字選擇區域。由於接著執行下面的語句,所以不會
//看到文檔全選的過程。
TxtRange :=Doc.Selection.CreateRange as IHtmlTxtRange;
TxtRange.FindText('Text to be searched',0.0);
TxtRange.Select;
end;
還有,從Txt.Get_text可以得到當前選中的文字內容,某些時候是有用的。
10、提取網頁中所有鏈接
這個方法來自大富翁論壇hopfIEld朋友的對一個問題的回答,我本想自己試驗,但總是沒成功。
var
doc:IHtmlDocument2;
all:IHtmlElementCollection;
len,i:integer;
item:OleVariant;
begin
doc:=WebBrowser1 .Document as IHtmlDocument2;
all:=doc.Get_links; //doc.Links亦可
len:=all.length;
for i:=0 to len-1 do begin
item:=all.item(i,varempty); //EmpryParam亦可
memo1.lines.add(item.href);
end;
end;
11、設置TWebBrowser的編碼
為什麼我總是錯過很多機會?其實早就該想到的,但是一念之差,便即天壤之別。當時我要是肯再多考慮一下,多試驗一下,這就不會排到第11條了。下面給出一個函數,搞定,難以想象的簡單。
procedure SetCharSet(AWebBrowser: TWebBrowser; ACharSet:
String);
var
RefreshLevel: OleVariant;
Begin
IHtmlDocument2(AWebBrowser.Document).Set_CharSet(ACharSet);
RefreshLevel :=7; //這個7應該從注冊表來,幫助有Bug。
AWebBrowser.Refresh2(RefreshLevel);
End;