none
Manipulação de Webbrowser "object reference not set to an instance of an object" RRS feed

  • Pergunta

  • Boa noite,

    Seguinte , eu criei um winform , no qual eu gostaria que ele simula-se o click para eu salvar algumas certidões...

    Ex: eu coloco o CNPJ  e aperto no botão consultar , ele me emite a certidão , porém quando faço isso ele me retorna um erro e não segue adiante.

    Visto que quando eu faço isso pelo internet explorer normal , ou chrome ele abre uma nova guia com a certidão emitida " para impressão"

    Gostaria de saber se isso tem solução ?
    url para emissão da certidão : http://emissao.cuiaba.mt.gov.br/portal/GerarEmitirCertidaoNegativa.aspx?tipo=certidao

    meu codigo : 

     private void button1_Click(object sender, EventArgs e)
            {
                string ucba = "http://emissao.cuiaba.mt.gov.br/portal/GerarEmitirCertidaoNegativa.aspx?tipo=certidao";
                webBrowser1.Navigate(ucba);
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                foreach (HtmlElement el3 in webBrowser1.Document.GetElementsByTagName("input"))
                {
    
                    if (el3.GetAttribute("id") == "ctl00_ContentPlaceHolder1_btnGerarEmitirCertidao")
                    {
                        el3.InvokeMember("click");
    
                    }
                }
               
            }

    quarta-feira, 21 de fevereiro de 2018 22:44

Respostas

  • using System;
    using System.Windows.Forms;
    
    namespace ForumMSDN
    {
        public partial class Form1 : Form
        {
            private delegate void NewWindowDelegate(string URL, int Flags, string TargetFrameName, ref object PostData, string Headers, ref bool Processed);
    
            public Form1()
            {
                InitializeComponent();
                dynamic ax = webBrowser1.ActiveXInstance;
                ax.NewWindow += new NewWindowDelegate(OnNewWindow);
            }
    
            private void OnNewWindow(string URL, int Flags, string TargetFrameName, ref object PostData, string Headers, ref bool Processed)
            {
                try
                {
                    //=> evita de abrir a popup no navegador (Edge, IE, Chrome)
                    Processed = true;
    
                    //=> Caso voce queira que o PDF abra EM UMA NOVA JANELA USE ESTE TRECHO
                    Form1 Popup = new Form1();
                    Popup.webBrowser1.Navigate(URL);
                    Popup.Show();
    
                    //=> Caso voce queira que o PDF abra NA MESMA JANELA USE ESTE TRECHO
                    //webBrowser1.Navigate(URL);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
    
            //=> Desabilitar a Mensagem de Bloqueador de PopUp
            private void SuppressScriptErrorsOnly(WebBrowser browser)
            {
                browser.ScriptErrorsSuppressed = false;
                browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(browser_DocumentCompleted);
            }
    
            //=> Desabilitar a Mensagem de Bloqueador de PopUp
            private void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                ((WebBrowser)sender).Document.Window.Error +=
                    new HtmlElementErrorEventHandler(Window_Error);
            }
    
            //=> Desabilitar a Mensagem de Bloqueador de PopUp
            private void Window_Error(object sender,
                HtmlElementErrorEventArgs e)
            {
                e.Handled = true;
            }
        }
    }
    

    João, com este código acima eu consegui realizar a emissão do PDF sem erros. Veja se funciona para você.

    Abs!


    Leandro de Agostini MCTS - Web Application, Framework 4

    sexta-feira, 23 de fevereiro de 2018 16:03

Todas as Respostas

  • Boa noite,

    Seguinte , eu criei um winform , no qual eu gostaria que ele simula-se o click para eu salvar algumas certidões...

    Ex: eu coloco o CNPJ  e aperto no botão consultar , ele me emite a certidão , porém quando faço isso ele me retorna um erro e não segue adiante.

    Visto que quando eu faço isso pelo internet explorer normal , ou chrome ele abre uma nova guia com a certidão emitida " para impressão"

    Gostaria de saber se isso tem solução ?
    url para emissão da certidão : http://emissao.cuiaba.mt.gov.br/portal/GerarEmitirCertidaoNegativa.aspx?tipo=certidao

    meu codigo : 

     private void button1_Click(object sender, EventArgs e)
            {
                string ucba = "http://emissao.cuiaba.mt.gov.br/portal/GerarEmitirCertidaoNegativa.aspx?tipo=certidao";
                webBrowser1.Navigate(ucba);
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                foreach (HtmlElement el3 in webBrowser1.Document.GetElementsByTagName("input"))
                {
    
                    if (el3.GetAttribute("id") == "ctl00_ContentPlaceHolder1_btnGerarEmitirCertidao")
                    {
                        el3.InvokeMember("click");
    
                    }
                }
               
            }

    Trabalhando com outro link : http://iptu.cuiaba.mt.gov.br/emissao-de-guia-do-iptu

    e simulando o clique até a emissão da certidão .
    me retorna uma nova webbrowser porém da erro no relatorio.


    e a certidão que sai no navegador comum fazendo manualmente sai assim: 



    Grato desde já.

    quarta-feira, 21 de fevereiro de 2018 22:50
  • Bom dia João, não tenho certeza, mas o PDF que você quer abrir como uma certidão final, eu acredito que você precise incluir uma DLL de PDF no seu WinForm, pois como você chama um WebBrowser do Windows acredito que ele nativamente não tenha o leitor de PDF como estamos acostumados com os navegadores nativos (Edge, Explorer, Chrome, etc).
    De qualquer maneira vou simular e ver se te ajudo, de qualquer jeito veja se esta opção de PDF para o WebBrowser influencia.

    Abs!


    Leandro de Agostini MCTS - Web Application, Framework 4

    quinta-feira, 22 de fevereiro de 2018 13:31
  • Olá João, vamos a explicação, o erro abaixo indica que não está sendo possível acessar a imagem Fundo_Caixas.png, mas este erro não é seu! visto que o mesmo erro aparece para o navegador nativo.

    O segundo link  http://iptu.cuiaba.mt.gov.br/emissao-de-guia-do-iptu, o relatório está com erro mesmo, ainda estou vendo isso mas não sei se tem alguma solução. De qualquer maneira vamos trabalhando nisso.

    Abs!


    Leandro de Agostini MCTS - Web Application, Framework 4

    quinta-feira, 22 de fevereiro de 2018 14:07
  • João, o erro do relatório não estar aparecendo correto é que o webbrowser está abrindo uma PopUp e esta está perdendo a sessão que contém exatamente os dados que devem aparecer no relatório. por exemplo, se você abrir o relatório usando o Internet Explorer você vai notar que ele gera uma URL com dados de Sessão exatamente a este aqui:

    http://emissao.cuiaba.mt.gov.br/portal/Relatorios/Relatorio.aspx?NMTABELA=PmaimaiZP1eVVk4igu&ARQUIVO=maiptmhw/v8pVYrwqisXy0WPlTbmmJotXehd/tKeucJL0CbMuOBHtVPIrG76MSh0taRLfMNr1oCGDb5ScDmBWTjhuBtH0PDZNBfy4Xo1UHwCYigu&TIPO=1&PDF=0&t=20182022102019334988

    porém quando você abre pelo webbrowser você vai notar que que ele só trás estas informações:

    http://emissao.cuiaba.mt.gov.br/portal/Relatorios/Relatorio.aspx?NMTABELA=PmaimaiZP1eVVk4igu&ARQUIVO=maiptmhw

    ou seja a sessão está sendo interrompida, isso é comum ocorrer com o webbrowser para abrir popup.

    Procure por C# WebBrowser PopUp e você irá encontrar algumas respostas. Segue alguns links que eu verifiquei isso também.

    http://www.c-sharpcorner.com/forums/how-to-capture-popup-window-in-webbrowser-in-c-sharp

    https://stackoverflow.com/questions/175836/system-windows-forms-webbrowser-open-links-in-same-window-or-new-window-with-same

    Qualquer coisa vai informando por aqui para vermos o seu progresso, eu vou conseguir apenas ver as mensagens somente à noite.

    Abs!


    Leandro de Agostini MCTS - Web Application, Framework 4

    quinta-feira, 22 de fevereiro de 2018 14:42
  • Boa noite! 
    Leandro,

    Realmente eu já tinha notado isso também , quando utilizo o segundo link em navegadores padrões, ele consta um link extenso ... já quando emito pelo webbrowser ele consta "link quebrado", e quando eu bloqueio o popup do webbrowser ele nem chama esse novo browser com o pdf.

    vou analisar essas questões sobre os popup no webbrowser e as dll de pdf também para ver oque consigo , é que sou bem leigo ainda em programação e to fazendo uns winforms com ferramentas de buscas automáticas , para tentar facilitar meu processo rotineiro e me deparei com essa situação na qual to com uma certa dificuldade, más obrigado pela ajuda, eu vou continuar pesquisando aqui para tentar solucionar , caso  eu consiga eu vou estar postando aqui também. Gostaria de saber também se posso estar entrando em contato diretamente contigo para perguntar algo caso tenha alguma duvida de modo mais frequente e prático.

    quinta-feira, 22 de fevereiro de 2018 19:41
  • Tranquilo João,

    segue ai leandrodeagostini@hotmail.com

    Abs!


    Leandro de Agostini MCTS - Web Application, Framework 4

    quinta-feira, 22 de fevereiro de 2018 22:45
  • using System;
    using System.Windows.Forms;
    
    namespace ForumMSDN
    {
        public partial class Form1 : Form
        {
            private delegate void NewWindowDelegate(string URL, int Flags, string TargetFrameName, ref object PostData, string Headers, ref bool Processed);
    
            public Form1()
            {
                InitializeComponent();
                dynamic ax = webBrowser1.ActiveXInstance;
                ax.NewWindow += new NewWindowDelegate(OnNewWindow);
            }
    
            private void OnNewWindow(string URL, int Flags, string TargetFrameName, ref object PostData, string Headers, ref bool Processed)
            {
                try
                {
                    //=> evita de abrir a popup no navegador (Edge, IE, Chrome)
                    Processed = true;
    
                    //=> Caso voce queira que o PDF abra EM UMA NOVA JANELA USE ESTE TRECHO
                    Form1 Popup = new Form1();
                    Popup.webBrowser1.Navigate(URL);
                    Popup.Show();
    
                    //=> Caso voce queira que o PDF abra NA MESMA JANELA USE ESTE TRECHO
                    //webBrowser1.Navigate(URL);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
    
            //=> Desabilitar a Mensagem de Bloqueador de PopUp
            private void SuppressScriptErrorsOnly(WebBrowser browser)
            {
                browser.ScriptErrorsSuppressed = false;
                browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(browser_DocumentCompleted);
            }
    
            //=> Desabilitar a Mensagem de Bloqueador de PopUp
            private void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                ((WebBrowser)sender).Document.Window.Error +=
                    new HtmlElementErrorEventHandler(Window_Error);
            }
    
            //=> Desabilitar a Mensagem de Bloqueador de PopUp
            private void Window_Error(object sender,
                HtmlElementErrorEventArgs e)
            {
                e.Handled = true;
            }
        }
    }
    

    João, com este código acima eu consegui realizar a emissão do PDF sem erros. Veja se funciona para você.

    Abs!


    Leandro de Agostini MCTS - Web Application, Framework 4

    sexta-feira, 23 de fevereiro de 2018 16:03
  • Cara , deu certinho aqui muito obrigado mesmo !
    e vlw pela atenção .
    sexta-feira, 23 de fevereiro de 2018 20:06