利用Indy客户端(IdHTTP)我可以下载CSV文件,如果我用下面的代码,它完美的作品(original code)知道该文件的实际网址:下载CSV文件
procedure TForm1.Button1Click(Sender: TObject);
var
Url, LocalFile: String;
Strm: TFileStream;
begin
Url := 'http://www.cvrda.org/boats/cvrda_handicap/cvrda_ratings_2009.csv';
LocalFile := 'C:\cvrda_ratings_2009.csv';
Strm := TFileStream.Create(LocalFile, fmCreate);
try
try
IdHTTP1.Get(Url, Strm);
finally
Strm.Free;
end;
except
DeleteFile(LocalFile);
raise;
end;
end;
http://www.cvrda.org/boats/cvrda_handicap/cvrda_handicap.htm是网站,如果我看看页面源,我会得到href:“cvrda_ratings_2009.csv”。好,易于。
但 看着从#1,example here这种非德尔福例如,该网站是here,如果我按导出按钮,我可以手动下载csv文件,但programaticaly下载文件,我怎么得到实际的CSV文件的整个网址?我无法在任何地方找到它。
所以我想我的问题是: 有没有办法获得在TWebBrowser中手动下载的任何csv文件的整个网址?
更新
什么我希望做的就是下载一个CSV文件编程。但我不知道csv文件的网址是什么。如果我点击下载按钮,在TWebBrowser中,下载csv文件,会弹出一个对话框。然后我必须在弹出窗口中手动按'保存'。我希望以编程方式做到这一点。如果我知道url,我可以使用Indy,但是因为我不知道csv文件的url,我必须使用TWebBrowser。
更新(12Nov2012) 例2 (这个例子需要一个TButton和窗体上的TWebBrowser)
procedure TForm1.Button1Click(Sender: TObject);
var
ovLinks: OleVariant;
x:integer;
begin
WebBrowser1.navigate('http://financials.morningstar.com/income-statement/is.html?t=AAPL&ops=clear');
//wait for page to load
ovLinks := WebBrowser1.OleObject.Document.all.tags('A');
if ovLinks.Length > 0 then
begin
for x := 0 to ovLinks.Length-1 do
begin
if Pos('javascript:SRT_stocFund.Export()', ovLinks.Item(x).href) > 0 then
begin
ovLinks.Item(x).click;
Break;
end;
end;
end;
end;
山姆M的回答让我明白了很多,和它的作品为许多网页, 但不是所有的。我不知道如何使它适用于上面的示例2.在上面的示例中,我可以通过编程方式单击'Export'按钮后手动下载csv文件。但是在这个例子中以编程方式下载csv文件,我仍然需要csv文件的url。在这种情况下,如何获取csv文件的URL的任何想法。
我删除了Indy标签,因为你的问题并不是关于Indy的,并且添加了'TWebBrowser'标签,因为这是你的问题实际要求使用的。 (对于其他读者,实际问题在最后一段:我如何检索''链接到一个带有'TWebBrowswer'的网页中的'.csv'文件的目标? –
嗨,Ken,感谢您的纠正,我想你可以告诉我是一个新手程序员,是否有一些基本的东西我在这里失踪? –
只是你的问题是关于TWebBrowser,而不是关于Indy的(TWebBrowser直接检索HTML;它不使用Indy它是一个围绕Internet Explorer的ActiveX包装器,所以它使用IE的代码来处理下载HTML和其他文件。)或者你的问题真的是关于使用Indy的问题,在这种情况下,最后一段中对“TWebBrowser”的引用会产生误导? –