如何自动用ie自动下载网页的文件?
网址:http://www.downbank.cn/soft/5/53/2008/2008122013676.htm实现自动下载这个文件?有一个"立即下载"的按钮,点它之后,会弹出一个网页,让你选择服务器,就选最后一个"普通下载(厦门网通)",然后就开始弹出ie下载窗口,模拟点下"保存",然后再模拟点下"保存".再然后,会弹出一个文件已存在是否覆盖,再模拟点下"是",就行了这些如何能自动实现?
网址:http://www.downbank.cn/soft/5/53/2008/2008122013676.htm实现自动下载这个文件?有一个"立即下载"的按钮,点它之后,会弹出一个网页,让你选择服务器,就选最后一个"普通下载(厦门网通)",然后就开始弹出ie下载窗口,模拟点下"保存",然后再模拟点下"保存".再然后,会弹出一个文件已存在是否覆盖,再模拟点下"是",就行了这些如何能自动实现?
解决方案 »
- 用adoquery查出一个数据库中的所有表,怎么获取这些表的表名,表名不确定哦!SELECT name From sysobjects WHERE xtype ='U'
- 做类似QQ这样的网络即时通讯软件,该用什么样的网络架构
- oracle 中如何在储发器中调用存储过程的问题
- pascal的自定久函数中,有的函数参数需要用VAR来定义,有的则不用,请问什么时候用,什么时候不用呢?
- 如何把记录横向显示为字段?
- Excel和delphi的算法高手,請進來幫一下忙,是Excel和數據庫的高級結合,很有挑戰性
- 哈,终于升上双星了,散一下分
- 急急急!!!100分重谢,关于控件拖动的问题
- SOCKET ERROR , HELP ME!
- XE5 无法生成APK 是什么问题
- 五子棋小游戏
- 如何查询ACCESS表中的信息:字段名称,数据类型,说明.
就是这个网址,不变动的.只要控制点击"普通下载(厦门网通)",用ie默认下载就行
?
哪位高手帮帮忙?
就是这个网址,不变动的.只要控制点击"普通下载(厦门网通)",用ie默认下载就行
?
我再打一狠折,如果觉得用ie默认下载麻烦的话,用api或d自带的控件实现也行
我提供的固定网址有你说的哪些超级困难吗?
用SHELLEXECUTE打开IE,然后用模拟点击的方式点那个连接按钮,那个连接的位置看能不能用SPY++弄到
获取到要点击的button的话,用webbrowser也是能够实现的期待高手来
解答了。。
固定网址直接打开“普通下载(厦门网通)”页面就调出对话框了,1行代码就可以了。如果是固定网址,那么你的问题重点就是操控下载对话框。这样的话100分真不少。就是用SendMessage操控按扭即可。如果你要求必须用鼠标点击,那么用mouse_event函数点击坐标,也就是18楼所说的代码,这样的话200分可以给你写代码。如果你要求程序窗口被其它软件挡住了仍然可以发送点击消息。800分是最少的了,都是用人民币求的。你所说的“你不点击“普通下载(厦门网通)”它,怎么出现下载文件对话框?”。当然可以实现。直接转向网址就可以了,根本不需要点击。也就是上面所说的三种情况的第一种。你在贴子提问时说了那么多关于操控系统下载对话框的要求,但对“下载对话框”的打开方式没有说必须要求点击实现。请表明你的重点?
1.重点是向网页发点击消息。2.重点控制下载对话框。
1,你给出的url是固定的吗?包括下载地址,如果是的话就简单了,如果不是的话,还需要判断页面中的各个url是否是文件下载地址。
2,必须要用ie弹出的下载窗口吗?如果是的话发送消息也可以解决的。还有就是你说的“我是多次下载,即,每隔10分下载一次覆盖前面,不想打开ie界面,这个版主真好!”这个不想打开ie界面是什么意思?我觉得你这个问题不难解决,就是下载文件嘛,但是,你的需求我有点搞不明白。
好的,我详细说一下
我给出固定的网址:http://www.downbank.cn/soft/softdown.asp?softid=13676 ,这个只是下载页面,进入这个下载页面后,你要手动点一下“普通下载(厦门网通)”这个,才能下载,默认是ie下载,当然你电脑中,如果安装有下载工具如迅雷的话,也会自动跳出来.用什么下载都可以,我需要在后台静默下载,这需要用到一些控件或api之类的完成.但我不想把用ie打开哪个下载页面,然后这个页面一直在前台,哪样的话,我电脑什么也不能做了,就看它下载了!!所以这个代码是在不打开ie即不打开下载页面的情况下,完成多次下载的,因为第一次下载了,第二次下载要覆盖前面的文件,要没有提示的情况下覆盖不打开ie完成下载能实现吧,因为,我已给出网址了
对,是下载文件,但下载的方法不同.我需要后台下载.其实,也就是想学学如何操作ie内的元素.
var
id: TIdHTTP;
fs: TFileStream;
begin
id := TIdHTTP.Create(self);
fs := TFileStream.Create('c:\1.rar', fmCreate);
id.Request.Referer := 'http://www.downbank.cn/soft/softdown.asp?softid=13676'; //注意这里,这个链接,也就是来源页。
id.HandleRedirects:=True;
id.Get('http://www.downbank.cn/soft/download.asp?softid=13676&downid=16&id=21396', fs); // 下载文件url。
fs.Free;
id.Free;
end;
如果非要满足模拟点击之类的,那用如下代码,但是我觉得没有太大意义,有一点小错误。unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtrls, SHDocVw, MSHTML, IdHTTP, StrUtils;type
TForm1 = class(TForm)
WebBrowser1: TWebBrowser;
Button1: TButton;
WebBrowser2: TWebBrowser;
procedure Button1Click(Sender: TObject);
procedure WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
procedure WebBrowser1NewWindow2(Sender: TObject; var ppDisp: IDispatch;
var Cancel: WordBool);
procedure WebBrowser2DownloadBegin(Sender: TObject);
private
{ Private declarations }
procedure StartDownLoad;
// procedure WBBeforeNavigate2(Sender: TObject;
// const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
// Headers: OleVariant; var Cancel: WordBool);
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
webbrowser1.Navigate('http://www.downbank.cn/soft/softdown.asp?softid=13676');
end;procedure TForm1.StartDownLoad;
var
doc: IHTMLDocument2;
Hrefs: IHTMLElementCollection;
Element: IHTMLElement;
i: Integer;
begin
doc := webbrowser1.document as IHTMLdocument2;
Hrefs := doc.all.tags('A') as IHTMLElementCollection;
for i := 0 to Hrefs.length - 1 do
begin
Element := hrefs.item(i, 2) as IHTMLElement;
if Trim(Element.innerText) = '普通下载(厦门网通)' then
begin
Element.click;
end;
end;
end;procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
if WebBrowser1.LocationURL = URL then
begin
StartDownLoad;
end;
end;procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;
var ppDisp: IDispatch; var Cancel: WordBool);
begin
ppDisp := WebBrowser2.DefaultDispatch;
end;procedure TForm1.WebBrowser2DownloadBegin(Sender: TObject);
var
id: TIdHTTP;
fs: TFileStream;
begin
if WebBrowser2.LocationURL = 'about:blank' then
Exit;
if AnsiRightStr(WebBrowser2.LocationURL, 3) = 'rar' then
begin
id := TIdHTTP.Create(self);
fs := TFileStream.Create('c:\1.rar', fmCreate);
id.Request.Referer := (WebBrowser2.document as IHTMLdocument2).referrer;
id.Get(WebBrowser2.LocationURL, fs);
fs.Free;
id.Free;
WebBrowser2.Navigate('about:blank');
end;
end;end.
他在40楼的代码虽然针对你这个问题没有什么意义(因为你是固定的,以结果角度考虑),但很值得学习,因为可以扩展为动态的。只不过换网址就不行了。因为有些网页中嵌入在iframe中的。需要对网页进行遍历。但楼主说过是固定网址,所以他的代码完全合要求,可以结贴了。呵呵。
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtrls, SHDocVw, MSHTML, IdHTTP, StrUtils;type
TForm1 = class(TForm)
WebBrowser1: TWebBrowser;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
private
{ Private declarations }
procedure StartDownLoad;
// procedure WBBeforeNavigate2(Sender: TObject;
// const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
// Headers: OleVariant; var Cancel: WordBool);
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
webbrowser1.Navigate('http://www.downbank.cn/soft/softdown.asp?softid=13676');
end;procedure TForm1.StartDownLoad;
var
doc: IHTMLDocument2;
Hrefs: IHTMLElementCollection;
Element: IHTMLElement;
i: Integer;
id: TIdHTTP;
fs: TFileStream;
begin
doc := webbrowser1.document as IHTMLdocument2;
Hrefs := doc.all.tags('A') as IHTMLElementCollection;
for i := 0 to Hrefs.length - 1 do
begin
Element := hrefs.item(i, 2) as IHTMLElement;
if Trim(Element.innerText) = '普通下载(厦门网通)' then
begin
id := TIdHTTP.Create(self);
fs := TFileStream.Create('c:\1.rar', fmCreate);
id.Request.Referer := 'http://www.downbank.cn/soft/softdown.asp?softid=13676';
id.HandleRedirects := True;
id.Get(Element.tostring, fs);
fs.Free;
id.Free;
showmessage('下载完成');
exit;
end; end;
end;procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
if WebBrowser1.LocationURL = URL then
begin
StartDownLoad;
end;
end;
end.