2012-07-23 14 views
5

Mi chiedo se c'è un C# o una soluzione di selenio al seguente:come fare clic automaticamente su "vuoi aprire o salvare?"

enter image description here

Sto usando il selenio per scaricare un file fuori un server web.

sfortunatamente in IE9 non è possibile disattivare questa schermata popup.

C'è una soluzione in C# per fare clic sul pulsante SAVE?

+0

Il file zip verrà scaricato automaticamente se si è in grado di zippare il file csv. – BumbleB2na

+0

non ho il controllo sul formato –

+0

forse questo aiuterà: http://blog.codecentric.de/en/2010/07/file-downloads-with-selenium-mission-impossible/ – BumbleB2na

risposta

3

client

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

Server

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(); 
    } 
} 

Come si può vedere con l'esempio precedente, non solo non mi conosco la posizione fisica del file, ma non c'è una posizione fisica! È qualcosa che ho appena scritto in memoria e poi ho scritto i byte grezzi nella risposta, ma WebClient.DownloadData() sarà comunque in grado di scaricare i byte tutti uguali. Non importa da dove vengono i byte. Spero che questo ti aiuti.


Informazioni aggiuntive:

Qualche ulteriore documentazione informativa che illustra ulteriormente perché le opere di cui sopra.

Il compito principale di un browser è inviare richieste HTTP e gestire la risposta. Fortunatamente, gestiscono un sacco di lavoro per noi. La visualizzazione di una semplice pagina Web comporta l'invio di un HTTP-GET al server e la ricezione di byte nel corpo della risposta, la decodifica di quei byte nel testo e l'analisi di quel testo per il rendering di una pagina Web HTML. Sa gestire la risposta in questo modo perché ha un'intestazione Content-Type di Text/HTML. Mentre questo è ciò che fa la maggior parte del tempo, i browser possono anche gestire altri tipi MIME, se il Content-Type è text/plain decodificherà i byte e li visualizzerà semplicemente senza tentare di analizzarli. Il testo/XML di solito consente di comprimere ed espandere i nodi XML, ecc. Tutto dipende sempre da come il browser è programmato per gestire quel tipo MIME di particelle.

Quando si ottiene una finestra di dialogo Salva con nome in un browser, questo è semplicemente il modo in cui il browser gestisce una risposta con un'intestazione Content-Disposition: Attachment. Questa intestazione indica al browser di non provare a visualizzare o mostrare il contenuto, ma di scaricarlo come allegato.

Quando si utilizzano le classi WebClient/HttpWebRequest, si sta essenzialmente scrivendo il proprio browser in miniatura, tuttavia l'implementazione di come vengono gestiti i tipi MIME/le intestazioni HTTP dipende interamente da voi. E questo può consentire di salvare i byte da una risposta Content-Disposition (o qualsiasi altra risposta) senza richiedere una finestra di dialogo Apri o Salva.

+0

grazie ma non posso farlo perché il file viene generato automaticamente dal server web, non esiste un collegamento esplicito ad esso –

+0

Indipendentemente se si tratta di un collegamento diretto o di una risposta generata il web server sta scrivendo byte grezzi alla risposta, dovresti comunque essere in grado di scaricare quei byte come byte [] e salvarlo in un file. – Despertar

+0

certo, ma come faccio a sapere quale URL del file? non c'è l'URL explagit –

Problemi correlati