取Webbrowser的网页源码有几种方法? |
缺席
|
Delhpi
一般會員 發表:9 回覆:14 積分:4 註冊:2008-07-05 發送簡訊給我 |
方法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 發送簡訊給我 |
|
Delhpi
一般會員 發表:9 回覆:14 積分:4 註冊:2008-07-05 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |