我想知道以下是否有c#或selenium解决方案:
我正在使用selenium从网络服务器上下载文件。
遗憾的是,在IE9中无法禁用此弹出屏幕。
在c#中是否有单击SAVE按钮的解决方案?
答案 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响应(或任何响应)中保存字节,而无需通过打开或保存对话框提示。