2013-09-05 149 views
0

我需要访问页面并保存此网站的两个页面。如何在ajax更新后更新对象WebBrowser

但是当我尝试保存页面时,保存2次同一页面。

下面的代码

namespace sadfesrgshtydgf 
{ 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 

     InitializeComponent(); 

    } 

    private void Completado(WebBrowser b) 
    { 
     while (b.ReadyState != WebBrowserReadyState.Complete && b.Document.Body == null) 
     { 
      webBrowser1.Refresh(); 
      Application.DoEvents(); 

     } 
    } 
    int Pagina = 0; 
    private void Form1_Load(object sender, EventArgs e) 
    { 
     webBrowser1.Navigate("http://voos.infraero.gov.br/voos/index.aspx"); 
     webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted; 

     //Completado(webBrowser1);   
    } 




    public string diretorio; 

    public void interfaceUsuario() 
    { 

     diretorio = @"C:\Users\klima\Desktop"; 
     criarArquivo(); 
    } 

    public void criarArquivo() 
    { 
     try 
     { 
      //var documente = webBrowser1.Document.Body.InnerHtml; 

      var documente1 = webBrowser1.Document.GetElementById("grd_voos").OuterHtml; 

      //Determino o diretorio onde será salvo o arquivo 
      string nome_arquivo = diretorio + "\\Infraero.txt"; 

      //verificamos se o arquivo existe, se não existir então criamos o arquivo 
      //if (!File.Exists(nome_arquivo)) 
      File.Create(nome_arquivo).Close(); 

      // crio a variavel responsável por gravar os dados no arquivo txt 
      arquivo = File.AppendText(nome_arquivo); 



      //Escrevo no arquivo txt os dados contidos no textbox 
      arquivo.Write(documente1); 


      //Posiciono o ponteiro na próxima linha do arquivo. 
      arquivo.Write("\r\n"); 

      // MessageBox.Show("Dados salvos com sucesso!!!"); 



     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Error: " + ex.Message); 
     } 
     finally 
     { 
      //Fecho o arquivo 

      arquivo.Close(); 
     } 
    } 

    public void interfaceUsuario1() 
    { 

     diretorio = @"C:\Users\klima\Desktop"; 

     criarArquivo1(); 
    } 


    public TextWriter arquivo; 

    public void criarArquivo1() 
    { 
     try 
     { 



      var documentus = webBrowser1.Document.GetElementById("grd_voos").InnerHtml; 

      //Determino o diretorio onde será salvo o arquivo 
      string nome_arquivo = diretorio + "\\Infraero1.txt"; 

      //verificamos se o arquivo existe, se não existir então criamos o arquivo 
      // if (!File.Exists(nome_arquivo)) 
      File.Create(nome_arquivo).Close(); 

      // crio a variavel responsável por gravar os dados no arquivo txt 
      arquivo = File.AppendText(nome_arquivo); 



      //Escrevo no arquivo txt os dados contidos no textbox 
      arquivo.Write(documentus); 


      //Posiciono o ponteiro na próxima linha do arquivo. 
      arquivo.Write("\r\n"); 

      // MessageBox.Show("Dados salvos com sucesso!!!"); 



     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Error: " + ex.Message); 
     } 
     finally 
     { 
      //Fecho o arquivo 

      arquivo.Close(); 
     } 
    } 

    private void NavegarPagina0() 
    { 

     HtmlElement combo; 
     combo = webBrowser1.Document.GetElementById("aero_companias_aeroportos"); 
     combo.SetAttribute("value", "SBKP"); 
     HtmlElement botao = webBrowser1.Document.GetElementById("btnPesquisar"); 
     botao.Document.GetElementById("btnPesquisar").Focus(); 
     botao.Document.GetElementById("btnPesquisar").InvokeMember("click"); 
     Pagina++; 

    } 

    private void NavegarPagina1() 
    { 



     HtmlElementCollection doc = webBrowser1.Document.GetElementsByTagName("table")[28].Children[0].Children[0].All; 
     HtmlElement a = doc[2].Children[0]; 

     interfaceUsuario(); 
     a.InvokeMember("click"); 
     Completado(webBrowser1); 
     Pagina++; 





    } 

    private void NavegarPagina2() 
    { 

     webBrowser1.Refresh(); 

     while(Convert.ToString(webBrowser1.Document.GetElementsByTagName("table")[28].Children[0].Children[0]) != "1"){ 



     } 

      MessageBox.Show("Nop while"); 


     Completado(webBrowser1); 



     interfaceUsuario1(); 

     Close(); 


    } 

    private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
    { 



     if (webBrowser1.ReadyState == WebBrowserReadyState.Complete) 
     { 
      //webBrowser1.DocumentCompleted -= webBrowser1_DocumentCompleted; 

      Completado(webBrowser1); 
      if (Pagina == 0 && webBrowser1.Document.GetElementById("btnPesquisar") != null) 
       NavegarPagina0(); 
      else if (Pagina == 1 && webBrowser1.Document.GetElementsByTagName("table")[28] != null) 
       NavegarPagina1(); 
      else if (Pagina == 2 && webBrowser1.Document.GetElementsByTagName("table")[28] != null) 
       NavegarPagina2(); 

     } 

    } 

    private void webBrowser1_DocumentCompleted_1(object sender, WebBrowserDocumentCompletedEventArgs e) 
    { 

    } 


} } 
+0

淖entendi SUA pergunta ... – 2013-09-05 16:25:59

+0

entao,EU tenho阙acessar一个pagina,entrar automaticamente NAS VOOSËpegar一个地区信息NA tabela德VOOS NA 1页E 2,通过AJAX –

+0

Játentouöporem一个乙级paginaéatualizada谷歌 ? – 2013-09-05 17:36:38

回答

0

试试这个

namespace sadfesrgshtydgf 
    { 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 

      InitializeComponent(); 

     } 

     private void Completado(WebBrowser b) 
     { 
      while (b.ReadyState != WebBrowserReadyState.Complete && b.Document.Body == null) 
      { 
       webBrowser1.Refresh(); 
       Application.DoEvents(); 

      } 
     } 
     int Pagina = 0; 
     private void Form1_Load(object sender, EventArgs e) 
     { 
      webBrowser1.Navigate("http://voos.infraero.gov.br/voos/index.aspx"); 
      webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted; 

      //Completado(webBrowser1);   
     } 




     public string diretorio; 

     public void interfaceUsuario() 
     { 

      diretorio = @"C:\Users\klima\Desktop"; 
      criarArquivo(); 
     } 

     public void criarArquivo() 
     { 
      MessageBox.Show("Error: Por favor desligue o seu computador "); 
      try 
      { 
       //var documente = webBrowser1.Document.Body.InnerHtml; 

       var documente1 = webBrowser1.Document.GetElementById("grd_voos").OuterHtml; 

       //Determino o diretorio onde será salvo o arquivo 
       string nome_arquivo = diretorio + "\\Infraero.txt"; 

       //verificamos se o arquivo existe, se não existir então criamos o arquivo 
       //if (!File.Exists(nome_arquivo)) 
       File.Create(nome_arquivo).Close(); 

       // crio a variavel responsável por gravar os dados no arquivo txt 
       arquivo = File.AppendText(nome_arquivo); 



       //Escrevo no arquivo txt os dados contidos no textbox 
       arquivo.Write(documente1); 


       //Posiciono o ponteiro na próxima linha do arquivo. 
       arquivo.Write("\r\n"); 

       // MessageBox.Show("Dados salvos com sucesso!!!"); 



      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("Error: " + ex.Message); 
      } 
      finally 
      { 
       //Fecho o arquivo 

       arquivo.Close(); 
      } 
     } 

     public void interfaceUsuario1() 
     { 

      diretorio = @"C:\Users\klima\Desktop"; 

      criarArquivo1(); 
     } 


     public TextWriter arquivo; 

     public void criarArquivo1() 
     { 
      try 
      { 



       var documentus = webBrowser1.Document.GetElementById("grd_voos").InnerHtml; 

       //Determino o diretorio onde será salvo o arquivo 
       string nome_arquivo = diretorio + "\\Infraero1.txt"; 

       //verificamos se o arquivo existe, se não existir então criamos o arquivo 
       // if (!File.Exists(nome_arquivo)) 
       File.Create(nome_arquivo).Close(); 

       // crio a variavel responsável por gravar os dados no arquivo txt 
       arquivo = File.AppendText(nome_arquivo); 



       //Escrevo no arquivo txt os dados contidos no textbox 
       arquivo.Write(documentus); 


       //Posiciono o ponteiro na próxima linha do arquivo. 
       arquivo.Write("\r\n"); 

       // MessageBox.Show("Dados salvos com sucesso!!!"); 



      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("Error: " + ex.Message); 
      } 
      finally 
      { 
       //Fecho o arquivo 

       arquivo.Close(); 
      } 
     } 

     private void NavegarPagina0() 
     { 

      HtmlElement combo; 
      combo = webBrowser1.Document.GetElementById("aero_companias_aeroportos"); 
      combo.SetAttribute("value", "SBKP"); 
      HtmlElement botao = webBrowser1.Document.GetElementById("btnPesquisar"); 
      botao.Document.GetElementById("btnPesquisar").Focus(); 
      botao.Document.GetElementById("btnPesquisar").InvokeMember("click"); 
      Pagina++; 

     } 

     private void NavegarPagina1() 
     { 



      HtmlElementCollection doc = webBrowser1.Document.GetElementsByTagName("table")[28].Children[0].Children[0].All; 
      HtmlElement a = doc[2].Children[0]; 

      interfaceUsuario(); 
      a.InvokeMember("click"); 
      Completado(webBrowser1); 
      Pagina++; 





     } 

     private void NavegarPagina2() 
     { 

      webBrowser1.Refresh(); 

      while(Convert.ToString(webBrowser1.Document.GetElementsByTagName("table")[28].Children[0].Children[0]) != "1"){ 



      } 

       MessageBox.Show("Nop while"); 


      Completado(webBrowser1); 



      interfaceUsuario1(); 

      Close(); 


     } 

     private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
     { 



      if (webBrowser1.ReadyState == WebBrowserReadyState.Complete) 
      { 
       //webBrowser1.DocumentCompleted -= webBrowser1_DocumentCompleted; 

       Completado(webBrowser1); 
       if (Pagina == 0 && webBrowser1.Document.GetElementById("btnPesquisar") != null) 
        NavegarPagina0(); 
       else if (Pagina == 1 && webBrowser1.Document.GetElementsByTagName("table")[28] != null) 
        NavegarPagina1(); 
       else if (Pagina == 2 && webBrowser1.Document.GetElementsByTagName("table")[28] != null) 
        NavegarPagina2(); 

      } 

     } 

     private void webBrowser1_DocumentCompleted_1(object sender, WebBrowserDocumentCompletedEventArgs e) 
     { 

     } 


    } } 
+0

nãoresolveu mais valeu a tentativa .. = D –

+0

此代码执行'[忙等待](http://en.wikipedia.org/wiki/Busy_waiting)',在while循环中吃掉CPU周期。此外,'Application.DoEvents()'在这里有效地组织了一个嵌套的消息循环,这可能会导致重入并且通常是[坏主意](http://blogs.msdn.com/b/jfoscoding/archive/2005/08/) 06/448560.aspx)。 – Noseratio

1

DocumentComplete可以发射比该网页使用了框架/ iframe的一次。更可靠的方法是使用DOM window.onload事件,here's how它可以完成。