自动下载文件使用c#编程
本文关键字:编程 文件 下载 | 更新日期: 2023-09-27 18:16:26
我有一个项目,我需要从一个公共网站自动下载和处理一个excel文件。
网址如下:
http://apps.ahca.myflorida.com/dm_web/(S (rhlzd0ac2qwvvccbyp3lx2or))/doc_results_fo.aspx
你可以看到一个名为Export Results的链接,它可以下载excel文件。这个链接有回发功能,我一直在寻找一种方法来自动化它,但没有成功。
这是我最后尝试的代码:
try
{
byte[] b = webClient.DownloadData("http://apps.ahca.myflorida.com/dm_web/(S(eha2oijpqo5mro1aywok4lly))/doc_results_fo.aspx");
string s = System.Text.Encoding.UTF8.GetString(b);
var __EVENTVALIDATION = ExtractVariable(s, "__EVENTVALIDATION");
var forms = new NameValueCollection();
forms["__EVENTTARGET"] = "lbtSpreadsheet";
forms["__EVENTARGUMENT"] = "";
forms["__VIEWSTATE"] = ExtractVariable(s, "__VIEWSTATE");
forms["mTbdate"] = "11%2F15%2F2011";
forms["__EVENTVALIDATION"] = __EVENTVALIDATION;
webClient.Headers.Set(HttpRequestHeader.ContentType, "application/x-www-form-urlencoded");
var responseData = webClient.UploadValues(@"http://apps.ahca.myflorida.com/dm_web/(S(eha2oijpqo5mro1aywok4lly))/doc_results_fo.aspx", "POST", forms);
System.IO.File.WriteAllBytes(@"c:'tmp'FLORIDA.xls", responseData);
}
catch (Exception ex)
{
Console.Write(ex.StackTrace);
}
}
private static string ExtractVariable(string s, string valueName)
{
string tokenStart = valueName + "'" value='"";
string tokenEnd = "'" />";
int start = s.IndexOf(tokenStart) + tokenStart.Length;
int length = s.IndexOf(tokenEnd, start) - start;
return s.Substring(start, length);
}
这应该得到viewstate和其他字段的值并发出POST,但是当我运行它时,下载的文件是页面本身,而不是excel文件。
我不确定这是否可能使用WebClient,或者我应该使用WebBrowser控件(或类似的控件),或者可能是一个自动浏览工具,我可以记录一系列步骤并每x天运行一次。
任何帮助都将非常感激。
Thank you
我用Selenium .NET解决了这个问题
FirefoxProfile firefoxProfile = new FirefoxProfile();
firefoxProfile.SetPreference("browser.download.folderList", 2);
firefoxProfile.SetPreference("browser.download.dir", strFullpath);
firefoxProfile.SetPreference("browser.helperApps.neverAsk.openFile", "application/vnd.ms-Excel");
firefoxProfile.SetPreference("browser.helperApps.neverAsk.saveToDisk", "application/vnd.ms-Excel");
IWebDriver driver = new FirefoxDriver(firefoxProfile);
driver.Navigate().GoToUrl(link);
driver.FindElement(By.Id(lookup)).Click();
driver.Quit();