得到WebBrowser1中有框架的源码 500分求答案 ( 积分: 200 )

  • 主题发起人 主题发起人 abencat
  • 开始时间 开始时间
A

abencat

Unregistered / Unconfirmed
GUEST, unregistred user!
如何取得WebBrowser所打开的网页的源码,如下方法都达不到效果,还请高手指点一下
比如得到这个页面中的内容(包含图片和文字)
带多框架的网站页面 http://www.s1188.com/

我使用的方法
procedure TForm1.Button3Click(Sender: TObject);
var
IDoc: IHTMLDocument2; //IHTMLDocument2 是MSHTML里面定义的
Text1: string;
begin
WebBrowser1.document.QueryInterface(IHTMLDocument2,IDOC);
if IDOC = nil then exit;
memo1.Lines.Text := IDOC.Body.innerHtml; //WebBrowser1当前的HTML源码
end;
procedure TForm1.Button4Click(Sender: TObject);
var
IDoc: IHTMLDocument2; //IHTMLDocument2 是MSHTML里面定义的
Text1: string;
begin
WebBrowser1.document.QueryInterface(IHTMLDocument2,IDOC);
if IDOC = nil then exit;
memo1.Lines.Text := IDOC.Body.innerText; //WebBrowser1当前的HTML源码
end;
//Memo1.Lines.Add(IHtmlDocument2(WebBrowser1.Document).Body.OuterHtml);
procedure TForm1.Button5Click(Sender: TObject);
procedure SetHtml(const WebBrowser:
TWebBrowser; const Html: string);
var
Stream: IStream;
hHTMLText: HGLOBAL;
psi: IPersistStreamInit;
begin
if not Assigned(WebBrowser.Document) then Exit;

hHTMLText := GlobalAlloc(GPTR, Length(Html) + 1);
if 0 = hHTMLText then RaiseLastWin32Error;

CopyMemory(Pointer(hHTMLText),
PChar(Html), Length(Html));

OleCheck(CreateStreamOnHGlobal
(hHTMLText, True, Stream));
try
OleCheck(WebBrowser.Document.
QueryInterface(IPersistStreamInit, psi));
try
OleCheck(psi.InitNew);
OleCheck(psi.Load(Stream));
finally
psi := nil;
end;
finally
Stream := nil;
end;
end;

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;

begin

Memo1.Lines.Add(GetHtml(WebBrowser1));
end;

procedure TForm1.Button6Click(Sender: TObject);
var
all:IHTMLElementcollection;
doc:IHTMLDocument2;
item:OleVariant;
begin
doc := WebBrowser1.document as ihtmldocument2;
all:=doc.all;
item:=all.item(0,varEmpty);

//item.innerhtml是源文件的<title>到</body>
//item.outerhtml是全文

Memo1.Lines.Add(item.innerhtml );
end;

这些都不可以得到实际的内容只能得到如下
<html>
<head>
<title>
Welcome 888crown</title>

<meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html;
charset=big5&quot;>
</head>

<frameset rows=&quot;*,0&quot; frameborder=&quot;NO&quot; border=&quot;0&quot;
framespacing=&quot;0&quot;>

<frame name=&quot;SI2_mem_index&quot; src=&quot;app/member/&quot;>

<frame name=&quot;SI2_func&quot; scrolling=&quot;NO&quot; noresize src=&quot;./ok.html&quot;>

<noscript><frame src=*></noscript>
</frameset>

<noframes>

<body bgcolor=&quot;#FFFFFF&quot; text=&quot;#000000&quot;>

</body>
</noframes>
</html>


而不能同时得到框架中的图片和文字内容,还请指点
 
//投注网站自动登录
//UserName : 用户名
//Password : 密码
//TxtCode : 验证码
procedure TFormMain.Logon(UserName, Password,TxtCode: String);
var
i,j : Integer;
FormItem : Variant;
str : String;
FindCount : Integer;

tmpDoc:IHTMLDocument2;

oneframe:Ihtmlwindow2;
vi,VJ: OleVariant;
OleWin: idispatch;

begin
If Assigned( Webbrowser1) Then
Begin
while Webbrowser1.ReadyState <READYSTATE_INTERACTIVE do
begin
// Sleep(1);
Application.ProcessMessages;
end;

tmpDoc:=WebBrowser1.Document as IHTMLDocument2;
if tmpDoc=nil then Exit;
if (tmpDoc.frames<>nil)and(tmpDoc.frames.length>0) then
begin
vi:=0;
OleWin:=tmpDoc.frames.item(vi);
if Succeeded(OleWin.QueryInterface(IID_IHTMLWindow2,oneframe)) then
begin
if oneframe<>nil then
begin
tmpDoc:=oneframe.document;

if tmpDoc=nil then exit;

begin
FindCount:=0;
for I := 0 to WebBrowser1.OleObject.Document.Frames.item(0).document.forms.Length - 1 do
begin
FormItem := WebBrowser1.OleObject.Document.Frames.item(0).document.forms.Item(I);
for j := 0 to FormItem.Length - 1 do
begin
try
str:=FormItem.item(j).name;
str:=LowerCase(str);
if Str = 'username' then //用户名
begin
FormItem.Item(j).value:=UserName;
Inc(FindCount);
end;
if Str = 'passwd' then //密码
begin
FormItem.Item(j).value:=password;
Inc(FindCount);
end;
if Str = 'number' then //验证码
begin
FormItem.Item(j).value:=TxtCode;
Inc(FindCount);
end;

except
Exit;
end;
end;
End;
if FindCount=3 then //填充完毕
begin
for i :=0 to WebBrowser1.OleObject.Document.Frames.item(0).document.forms.Length - 1 do
begin
FormItem := WebBrowser1.OleObject.Document.Frames.item(0).document.forms.Item(I);
for j := 0 to FormItem.Length - 1 do
begin
try
str:=FormItem.item(j).name;
str:=LowerCase(str);
if str = 'submit2' then
begin
FormItem.Item(j).click;
end;
except
Exit;
end;
end;
end;
end;

end;
end;
end;
end;

End;
end;
哈哈,我作过这个,不过没有最后成功,你是不是找我的那个人?
 
这个页面在一个框架中,还有变量判断是不是正常登陆的。
所以如何采用 post一个命令给WebBrowser1让它和手工的操作完全一样的执行,而让网站后台判断是这本站框架中运行。
 
现在我用WebBrowser1打开也个页面,为了提高显示速度,我想不让图片和动画flash显示,如何让WebBrowser1不显示图片和flash?
 
后退
顶部