【问题标题】:automate downloading a file using c# programmatically以编程方式使用 c# 自动下载文件
【发布时间】:2014-08-05 19:26:20
【问题描述】:

我有一个项目,我需要从公共网站自动下载和处理一个 Excel 文件。

网站如下:

http://apps.ahca.myflorida.com/dm_web/(S(rhlzd0ac2qwvvccbyp3lx2or))/doc_results_fo.aspx

您可以看到一个名为“导出结果”的链接,用于下载 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);
        }

这应该获取视图状态和其他字段的值并发出 POST ,但是当我运行它时,下载的文件是页面本身而不是 excel 文件。

我不确定这是否可以使用 WebClient,或者我应该使用 WebBrowser 控件(或类似控件),或者我可以记录一系列步骤并每 x 天运行一次的原子浏览工具。

任何帮助将不胜感激。

谢谢

【问题讨论】:

  • 你可能需要cookies。

标签: c# download automation webbrowser-control webclient


【解决方案1】:

我使用 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();

【讨论】:

    猜你喜欢
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    • 2010-12-15
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多