如何自动点击“你想打开还是保存?”

时间:2012-07-23 22:15:29

标签: c# selenium

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

enter image description here

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

遗憾的是,在IE9中无法禁用此弹出屏幕。

在c#中是否有单击SAVE按钮的解决方案?

1 个答案:

答案 0 :(得分: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,它将解码字节并只显示它们而不试图解析它。文本/ XML通常允许您折叠和扩展XML节点等。同样,这完全取决于浏览器如何编程来处理粒子MIME类型。

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

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