全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1938
推到 Plurk!
推到 Facebook!

取Webbrowser的网页源码有几种方法?

缺席
Delhpi
一般會員


發表:9
回覆:14
積分:4
註冊:2008-07-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2014-07-12 14:34:42 IP:58.219.xxx.xxx 訂閱
方法1和2,取得的网页源码是符合我要求的,但是,有时候会弹出 未指定错误的 提示。
出现这个问题很奇怪,同一个软件,在同一个电脑上,访问同一个网站,打开A页面,取源码,就提示上述错误。打开B页面,正常。

少数用户电脑上有这个问题。
大家还有其他的方法,让我试试吗?

//方法1
Memo1.Text := (WebBrowser1.Document as ihtmldocument2).body.outerHTML;


procedure TForm1.Button3Click(Sender: TObject);
var
iElement: IHTMLElement;
begin
//方法2
if Assigned(WebBrowser1.Document) then
begin
iElement := (WebBrowser1.Document as IHTMLDocument2).body;
while iElement.parentElement = nil do
begin
iElement := iElement.parentElement;
end;
memo1.Text := iElement.outerHTML;
end;
end;

方法3,取得的网页源码,不符合我的要求,主要是网页中 部分脚本运行的结果,这个函数没法取得。举例,某段脚本,会从服务器取得一段文字,显示在网页,这个函数只取得脚本代码,不能取得从服务器返回的那个文字。

function GetHtml(const WebBrowser: TWebBrowser): string;
const
BufSize = $10000;
var
Size: Int64;
Stream: IStream;
hHTMLText: HGLOBAL;
psi: IPersistStreamInit;
begin
if not Assigned(WebBrowser.Document) then
Exit;
OleCheck(WebBrowser.Document.QueryInterface
(IPersistStreamInit, psi));
try
//OleCheck(psi.GetSizeMax(Size));
hHTMLText := GlobalAlloc(GPTR, BufSize);
if 0 = hHTMLText then
RaiseLastWin32Error;
OleCheck(CreateStreamOnHGlobal(hHTMLText,
True, Stream));
try
OleCheck(psi.Save(Stream, False));
Size := StrLen(PChar(hHTMLText));
SetLength(Result, Size);
CopyMemory(PChar(Result), Pointer(hHTMLText),
Size);
finally
Stream := nil;
end;
finally
psi := nil;
end;
end;
zhouying82
高階會員


發表:150
回覆:272
積分:189
註冊:2004-03-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2014-12-24 09:04:14 IP:114.231.xxx.xxx 訂閱
用idhttp.get
------
断断续续的学了几年,还是一个初学者,永远支持Delphi !
Delhpi
一般會員


發表:9
回覆:14
積分:4
註冊:2008-07-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2014-12-25 18:10:21 IP:180.113.xxx.xxx 訂閱
我的情况是 需要用这个Web控件啊,一定要从这个控件中取。
系統時間:2017-10-23 9:01:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!