如何下载该网页中得所有flash(200分)

  • 主题发起人 千中元
  • 开始时间

千中元

Unregistered / Unconfirmed
GUEST, unregistred user!
如何解出网页内object中的东西,如flash。
分析采用IHTMLDocument2
 
你是说解析这段文本还是其它?
 
要将网页中得所有图片等都存到本地
现在感到分析flash的链接地址比较麻烦
 
怎么麻烦?就是自已分析也不会太难吧?
看看下面这个贴子
http://www.delphibbs.com/delphibbs/dispq.asp?lid=946182

不好意思,用IHTMLDocument2怎么分析呢?
 
恐怕自己分析是一个可行的办法,或者看看下面的代码,也许改一下可以用。
var
doc:IHTMLDocument2;
all:IHTMLElementCollection;
len,i:integer;
item:OleVariant;
itemname:string;
begin
doc:=Wb.Document as IHTMLDocument2;
all:=doc.Get_links;//doc.Links亦可
[red]//就是这里了,这里的getlingks是得到所有的链接,也许有一个方法是得到
所有的object,我不知道,你恐怕要自己查一下msdn才行。[/red]
len:=all.length;
for i:=0 to len-1 do begin
item:=all.item(i,varempty);//EmpryParam亦可
itemname:=item.innerText;//title
if (trim(itemname))<>'' then
begin
sourcelist.Items.Add(itemname);
hreflist.savehref(trim(itemname),trim(item.href));//href
end;
end;
 
thanks 小猪。
我试试你的方法。
 
小猪,
我原来用这些方法(get_links,images等)都不能得到object.
 
应该有一个方法是返回所有的页面元素,我以前看文档有点印象。你到微软站点上
查一下那个鬼玩意儿的文档。
 
to 千中元,为什么不试试我的方法呢?自已分析我想总是可以的。
 
怎么不学学 蚂蚁或快车的方法:
用DLL+VBSCRIPT(JAVASCRIPT)取出页面所有链接
然后分出flash的链接。
 
最多是再考虑一下分多frame的情况嘛,老千怎么会分析不出来?
这是我用embeddedwb时写的一段代码,不过如果是多Frame的话,好象有时候会出错。
搞得我只好取消了这个多frame的支持。
procedure Tfrmhtmlbrowser.N2Click(Sender: TObject);
var
OpenAllLinkForm: TOpenAllLinkForm;
Result: Integer;
doc: IHTMLDocument2;
all: IHTMLElementCollection;
len, i: integer;
item: OleVariant;
wb: tembeddedwb;
listitem: TListItem;
// j:Integer;
//iw: IWebBrowser2;
begin
WB := GetVisibleWebBrowser;
OpenAllLinkForm := TOpenAllLinkForm.Create(Self);
try
{判断是否多frame ,有时会出错,取消这功能
if wb.FrameCount > 0 then
for j := 0 to wb.framecount - 1 do
begin
iw := wb.GetFrame(j);
doc := iw.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亦可
if EnableIgnoreList then
if IgnoreList.IndexOf(item.href) = -1 then
begin
listitem := OpenAllLinkForm.ListView_link.Items.Add;
listitem.Caption := item.href;
listitem.SubItems.Add(item.innertext);
end;
end;
end
else
}
begin
doc := wb.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亦可
if EnableIgnoreList then
if IgnoreList.IndexOf(item.href) = -1 then
begin
listitem := OpenAllLinkForm.ListView_link.Items.Add;
listitem.Caption := item.href;
listitem.SubItems.Add(item.innertext);
end;
end
//end for

//open openalllinkform
Result := OpenAllLinkForm.Showmodal;
if Result = mrOk then //打开链接
for i := 0 to OpenAllLinkForm.ListView_link.Items.Count - 1 do
begin
application.ProcessMessages;
if OpenAllLinkForm.ListView_link.Items.Checked then
if BackList.IndexOf(OpenAllLinkForm.Listview_link.Items.Caption) = -1 then
newpages(OpenAllLinkForm.Listview_link.Items.Caption);
end;
end;
finally
OpenAllLinkForm.Free;
end;
end;
 
hongs,
不知道你试这段代码了没有。get_links是不能得到swf的。
下面这段代码供大家测试,
因为这个功能不是特别紧要,没有做更多的优化。
有些重复的url也取出来了。
html为传入的网页源代码

procedure TForm1.getSWF(html: String);
var
i,j,len:integer;
begin
len:=length(html);
i:=pos('.swf',html);
if i>0 then
for j:=i downto 1 do
begin
if (LowerCase(html[j]+html[j+1]+html[j+2]+html[j+3])='http') and (pos('>',copy(html,j,i-j))=0) and (pos(';',copy(html,j,i-j))=0) then
begin
showMessage(copy(html,j,i-j)+'.swf');
html:=copy(html,1,j-1)+copy(html,i+4,len-(i+4));
getSWF(html)
//递归
end;
end;
end;

 
sorry,上面那段代码是真的取不出swf的,而且netants的也取不出swf的。
看来只能用分析源文件的方法了。不过我觉得老千至少要加个多frame的判断嘛
 
得到的html是按照每Frame传入的,所以暂时不必考虑多frame的问题
 
哥们,是要down XDF的东东吧,我费了一个月的时间呢。
sunruichao@21cn.com
 
可以到myminer.com的网站看一下,有个软件叫flash miner,能下载一个网站上所有的
flash.
 
顶部