6

我想知道以下是否有 ac# 或 selenium 解决方案:

在此处输入图像描述

我正在使用 selenium 从网络服务器下载文件。

不幸的是,在 IE9 中没有办法禁用此弹出屏幕。

c# 中是否有用于单击“保存”按钮的解决方案?

4

1 回答 1

3

客户

WebClient client = new WebClient();
byte[] file = client.DownloadData("http://domain.com/default.aspx");
File.WriteAllBytes("helloworld.txt", file);

服务器

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        using (MemoryStream memory = new MemoryStream())
        using (StreamWriter writer = new StreamWriter(memory))
        {
            // The bytes written can be anything, does not have to be text
            writer.WriteLine("hello, world");
            writer.Flush();
            Response.BinaryWrite(memory.ToArray());
        }

        Response.AddHeader("Content-Disposition", "Attachment; filename=helloworld.txt");
        Response.AddHeader("Content-Type", "application/octet-stream");
        Response.End();
    }
}

通过上面的例子可以看到,我不仅不知道文件的物理位置,而且还没有物理位置!这是我刚刚写入内存然后将原始字节写入响应的内容,但 WebClient.DownloadData() 仍然能够下载相同的字节。它不关心字节来自哪里。希望这可以帮助。


附加信息:

一些进一步的背景信息进一步解释了上述工作的原因。

浏览器的主要工作是发送 HTTP 请求并处理响应。幸运的是,他们为我们处理了很多繁重的工作。显示一个简单的网页包括向服务器发送 HTTP-GET 并在响应正文中接收返回的字节,将这些字节解码为文本,然后解析该文本以呈现 HTML 网页。它知道如何处理这样的响应,因为它有一个 Text/HTML 的 Content-Type 标头。虽然这是它大部分时间所做的事情,但浏览器也可以处理其他 MIME 类型,如果 Content-Type 是 text/plain 它将解码字节并仅显示它们而不尝试解析它。Text/XML 通常允许您折叠和展开 XML 节点等。同样,这完全取决于浏览器如何编程以处理该粒子 MIME 类型。

当您在浏览器中获得“另存为”对话框时,这只是浏览器处理带有 Content-Disposition: Attachment 标头的响应的方式。此标头告诉浏览器不要尝试呈现或显示内容,而是将其作为附件下载。

当您使用 WebClient / HttpWebRequest 类时,您实际上是在编写自己的微型浏览器,但是如何处理 MIME 类型 / HTTP 标头的实现完全取决于您。这可以让您保存 Content-Disposition 响应(或任何与此相关的响应)中的字节,而无需使用“打开”或“保存”对话框进行提示。

于 2012-07-23T22:21:00.093 回答