我想知道以下是否有 ac# 或 selenium 解决方案:
我正在使用 selenium 从网络服务器下载文件。
不幸的是,在 IE9 中没有办法禁用此弹出屏幕。
c# 中是否有用于单击“保存”按钮的解决方案?
客户
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 响应(或任何与此相关的响应)中的字节,而无需使用“打开”或“保存”对话框进行提示。