2012-11-09 158 views
1

利用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的任何想法。

回答