采集一个网页 需采集网页框架里面的内容,现在问题来了,我遍历iFrame出来的个数,是三个,我只采集第一 个和 第二个。现在问题来了。
下标开始,应该是 0 1 2 对吧,我采集的是,前面两个。但是奇怪的问题出来了。
有时候是这样。GetFrame(Document,0,web);就可以成功采集第一个框架的内容,但是有时候这个框架是空的,就必须
GetFrame(Document,1,web); 就是,第一个位置变成了 1, 反正一会0可以,一会1 可以。我就觉得奇怪了啊,有框架,GetFrame(Document,0,web); 失败,返回不了,必须是1. 函数在下面
function GetFrame(Document: IDispatch; FrameNo: Integer;var IDoc3:IWebBrowser2):Boolean;
var
OleContainer: IOleContainer;
enum: ActiveX.IEnumUnknown;
unk: IUnknown;
Fetched: PLongint;
begin
Result:=False;
try
if Assigned(Document) then
begin
Fetched := nil;
OleContainer := Document as IOleContainer;
if OleContainer.EnumObjects(OLECONTF_EMBEDDINGS, Enum) = S_OK then
begin
Enum.Skip(FrameNo);
Enum.Next(1, Unk, Fetched);
IDoc3 := Unk as IWebBrowser2;
Result:=True;
end
else
IDoc3 := nil;
end
else
IDoc3 := nil;
except
Result:=False;
end;
下标开始,应该是 0 1 2 对吧,我采集的是,前面两个。但是奇怪的问题出来了。
有时候是这样。GetFrame(Document,0,web);就可以成功采集第一个框架的内容,但是有时候这个框架是空的,就必须
GetFrame(Document,1,web); 就是,第一个位置变成了 1, 反正一会0可以,一会1 可以。我就觉得奇怪了啊,有框架,GetFrame(Document,0,web); 失败,返回不了,必须是1. 函数在下面
function GetFrame(Document: IDispatch; FrameNo: Integer;var IDoc3:IWebBrowser2):Boolean;
var
OleContainer: IOleContainer;
enum: ActiveX.IEnumUnknown;
unk: IUnknown;
Fetched: PLongint;
begin
Result:=False;
try
if Assigned(Document) then
begin
Fetched := nil;
OleContainer := Document as IOleContainer;
if OleContainer.EnumObjects(OLECONTF_EMBEDDINGS, Enum) = S_OK then
begin
Enum.Skip(FrameNo);
Enum.Next(1, Unk, Fetched);
IDoc3 := Unk as IWebBrowser2;
Result:=True;
end
else
IDoc3 := nil;
end
else
IDoc3 := nil;
except
Result:=False;
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货