使用 Indy Clients (IdHTTP) 我可以下载 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”。好,易于。
但是看看这个来自 Stackoverflow 的非 Delphi 示例,示例在这里,网站在这里,如果我按下导出按钮,我可以手动下载 csv 文件,但是要以编程方式下载文件,我如何获取整个 url实际的csv文件?我在任何地方都找不到它。
所以我想我的问题是:有没有办法获取在 TWebBrowser 中手动下载的任何 csv 文件的整个 url?
更新
我希望做的是以编程方式下载 csv 文件。但我不知道 csv 文件的 url 是什么。如果我单击 TWebBrowser 中的下载按钮来下载 csv 文件,则会出现一个弹出窗口。然后我必须在弹出窗口中手动按“保存”。我希望以编程方式做到这一点。如果我知道 url,我可以使用 Indy,但是因为我不知道 csv 文件的 url,所以我必须使用 TWebBrowser。
update(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;
Sam M 的回答帮助我理解了很多,它适用于许多网页,但不是全部。我不知道如何使它适用于上面的示例 2。在上面的示例中,我可以在以编程方式单击“导出”按钮后手动下载 csv 文件。但要在本例中以编程方式下载 csv 文件,我仍然需要 csv 文件的 url。在这种情况下如何获取 csv 文件的 url 的任何想法。