none
Tengo mi webBrowser que debe hacer una descarga de xml pero me los baja vacios.

    Pregunta

  • Hola a todos y un excelente año nuevo

    Estoy realizando un proyecto de una descarga masiva de XML del SAT. Pero tengo un conflicto que al descargar los xml me los muestra vacíos y quiero que lea el xml desde que esta en el webBrowser y me vaya creando un archivo .xml 

    POR FAVOR Y GRACIAS POR SU COLABORACIÓN

    martes, 3 de enero de 2017 1:02

Respuestas

  • Si sabes la dirección de los XML, podrías descargarlos directamente con un objeto de la clase WebClient:

    WebClient wc = new WebClient();

    wc.DownloadFile("http://...loquesea.xml", @"c:\ruta\loquesea.xml");

    https://msdn.microsoft.com/en-us/library/ez801hhe(v=vs.110).aspx

    martes, 3 de enero de 2017 8:23
    Moderador
  • hola

    pero el acceso a la url requiere alguna interaccion con la pagina?

    porque no usas el

    WebClient.DownloadFile (String, String)

    creo que es lo mas directo

    ---

    Sino recuerda que tienes que grabar el document del webbrowser quizas controlando el

    WebBrowser.FileDownload Event

    si es que se genera una descarga del documento

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    martes, 3 de enero de 2017 13:43
  • No se ve la parte donde recoges el fichero descargado. Puesto que estás usando la variante "Async", la descarga solo se recibe cuando se alcanza el manejador que has llamado "Completed". Puede ser que haya ahí algún error, sobre todo si estás encolando muchas descargas, ya que las retrollamadas asíncronas pueden solaparse unas con otras y "pisar" las mismas variables, si no has tenido cuidado.

    ¿Hay alguna necesidad de usar la variante asíncrona? ¿Has hecho el experimento de probar primero con la (mucho más sencilla) variante síncrona y comprobar qué es lo que se descarga? Por ejemplo, podría estarte llegando un html con un mensaje de error en lugar del xml, por múltiples causas, como por ejemplo una cookie incorrecta (parece que asignas una cookie vacía, ¿por qué?).

     
    martes, 3 de enero de 2017 20:09
    Moderador
  • Hola Daniela_rh
    Siento contestar después, espero lo hayas resuelto aun así 
    Aquí dejo mi código por si les sirve alguno de ustedes:

    Espero te sirva. y si tienes alguna mejora por los scripts de la nueva interfaz del SAT es muy bienvenida Daniela_rh

    using System;
    using System.IO;
    using System.Net;
    using System.Xml;
    using System.Data;
    using System.Text;
    using System.Linq;
    using System.Drawing;
    using System.Net.Security;
    using System.Windows.Forms;
    using System.Configuration;
    using System.ComponentModel;
    using System.IO.Compression;
    using System.Threading.Tasks;
    using System.Security.Policy;
    using System.Xml.Serialization;
    using System.Collections.Generic;
    using System.Security.Cryptography;
    using System.Text.RegularExpressions;
    using System.Runtime.InteropServices;
    using System.Security.Cryptography.X509Certificates;
    
    
    namespace satCFDI
    {
        public partial class DM : Form
        {
            public int ContadorDescagas = 0;
            private DateTime fecha;
            private static WebBrowser webBrowser;
            private static HtmlElement Ecom_User_ID;
            private static HtmlElement Ecom_Password;
            private static HtmlElement submit;
            public static string rfc;
            public static string password;
            
            WebClient WC = new WebClient();
    
            [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
            static extern bool InternetGetCookieEx(string pchURL,
                                                   string pchCookieName,
                                                   StringBuilder pchCookieData,
                                                   ref System.UInt32 pcchCookieData,
                                                   int dwFlags, IntPtr lpReserved);
    
    
            private static string GetCookieString(string url)
            {
                //DETERMINA EL TAMAÑO DE LA COOKIE     
                UInt32 datasize = 256 * 1024;
                StringBuilder cookieData = new StringBuilder(Convert.ToInt32(datasize));
                if (!InternetGetCookieEx(url, null, cookieData, ref datasize, 0x00002000, IntPtr.Zero))
                {
                    if (datasize < 0) return null;
                    //ASIGNA AL "StringBuilder" DE LO GRANDE QUE SERÁ LA COOKIE 
                    cookieData = new StringBuilder(Convert.ToInt32(datasize));
                    if (!InternetGetCookieEx(url, null, cookieData, ref datasize, 0x00002000, IntPtr.Zero)) return null;
                }
                return cookieData.ToString();
            }
    
            public DM()
            {
                InitializeComponent();
                timer1.Enabled = true; //TIMER PARA LA FECHA Y HORA EN TIEMPO REAL
            }
    
            //VALIDA LOS DATOS "RFC,PASSWORD Y EL BOTÓN ENVIAR QUE EN HTML ESTA DETERMINADO COMO: (submit)"
            private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                if (webBrowser1.Document == null)
                {
                    if (string.IsNullOrEmpty(webBrowser.Document.Title))
                    {
                        var htmlElementCollection = webBrowser.Document.Links;
                        foreach (var htmlElement in htmlElementCollection.Cast<HtmlElement>().Where(HtmlElement => HtmlElement.InnerText == "CONTRASEÑA"))
                        {
                            htmlElement.InvokeMember("Click");
                        }
                    }
                    if (string.IsNullOrEmpty(webBrowser.Document.Title))
                    {
                        webBrowser1.Document.GetElementById("Ecom_User_ID").InnerText = rfc;
                        webBrowser1.Document.GetElementById("Ecom_Password").InnerText = password;
                        HtmlDocument document = webBrowser1.Document;
                        document.GetElementById("submit").InvokeMember("Click");
                    }
                }
                listBox1.Visible = false;
            }
    
            //ACTUALIZA EL webBrowser
            private void toolStripButton2_Click(object sender, EventArgs e)
            {
                webBrowser1.Refresh();
            }
    
            //FECHA Y HORA EN TIEMPO REAL 
            private void timer1_Tick(object sender, EventArgs e)
            {
                label_DDMMYYYY.Text = DateTime.Now.ToString();
            }
    
            //MÉTODO PARA DESCARGAR LOS ARCHIVOS ".xml" -- PARA SOLICITAR LA DESCARGA DE CFDI
            public void SolicitaCFDI()
            {
                    try
                {
                    var XML = webBrowser1.Document.All.Cast<HtmlElement>().Where(htmlElement => htmlElement.Id == "BtnDescarga").ToList();
                    toolStripProgressBar1.ProgressBar.Value = 0;
                    toolStripProgressBar1.ProgressBar.Maximum = XML.Count;
                    if (ContadorDescagas < XML.Count)
                    {
                        toolStripProgressBar1.Value = 0;
                        WebClient wc = new WebClient();
                        string cookie = "";
                        uint datasize = 8192;
                        StringBuilder cookieData = new StringBuilder((int)datasize);
                        string dw_path = System.Convert.ToString(webBrowser1.Document.Url);
    
                        wc.Headers.Add(HttpRequestHeader.Cookie, cookie);
                        wc.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
                        wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
                        wc.DownloadFileAsync(new Uri("https://portalcfdi.facturaelectronica.sat.gob.mx/ConsultaReceptor.aspx" + XML[ContadorDescagas]), +ContadorDescagas + "*.zip");
                        MessageBox.Show("EL TOTAL DE CFDI SON: " + XML.Count, "Descarga Masiva", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
    
                        webBrowser1.Document.GetElementById("seleccionador").InvokeMember("click");
                        webBrowser1.Document.GetElementById("ctl00$MainContent$BtnDescargar").InvokeMember("click");
                    }
                }
    
                catch (Exception e)
                {
                    MessageBox.Show("Error: " + e);
                }
                
    
                    //VERIFICA SI EXISTE EL ARCHIVO O SINO LO RENOMBRA
                    if (File.Exists(toolStripTextBox1.Text.Trim() + @"\" + foliofiscal + ".xml") == false)
                    {
                        if (!File.Exists(@"\" + foliofiscal + ".xml"))
                        {
                            File.Move(@"\" + foliofiscal + ".xml", @"\" + foliofiscal + ".xml");
                        }
                        else
                        {
                            MessageBox.Show("YA EXISTE EL ARCHIVO", "Descarga Masiva", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
                        }
                        MessageBox.Show("NO SE ENCONTRÓ EL ARCHIVO", "Descarga Masiva", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
                    }            
                   
                }
                MessageBox.Show("SE DESCARGARON " + archivo + "ARCHIVOS EN LA CARPETA [" + toolStripTextBox1.Text.Trim() + "]", "Descarga Masiva", MessageBoxButtons.OKCancel, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
            }
    
            private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e)
            {
                toolStripProgressBar1.Value = e.ProgressPercentage;
            }
    
             //MÉTODO PARA LA DESCARGA DE CFDI
            public void DescargarCFDI()
            {
                var XML = webBrowser1.Document.All.Cast<HtmlElement>().Where(htmlElement => htmlElement.Id == "BtnDescarga").ToList();
                toolStripProgressBar1.ProgressBar.Value = 0;
                toolStripProgressBar1.ProgressBar.Maximum = XML.Count;
                if (ContadorDescagas < XML.Count)
                {
                    toolStripProgressBar1.Value = 0;
                    WebClient wc = new WebClient();
                    string cookie = "";
                    uint datasize = 8192;
                    StringBuilder cookieData = new StringBuilder((int)datasize);
                    string dw_path = System.Convert.ToString(webBrowser1.Document.Url);
    
                    wc.Headers.Add(HttpRequestHeader.Cookie, cookie);
                    wc.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
                    wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
                    wc.DownloadFileAsync(new Uri("https://portalcfdi.facturaelectronica.sat.gob.mx/ConsultaDescargaMasiva.aspx" + XML[ContadorDescagas]), +ContadorDescagas + "*.zip");
                    MessageBox.Show("EL TOTAL DE CFDI SON: " + XML.Count, "Descarga Masiva", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
    
                    webBrowser1.Document.GetElementById("ContenedorDinamico").InvokeMember("click");
                    webBrowser1.Document.GetElementById("BtnDescarga").InvokeMember("click");
                }
            }
    
    
            //BOTÓN DE DESCARGA
            private void toolStripButton3_Click_1(object sender, EventArgs e)
            {
                if (string.IsNullOrEmpty(toolStripTextBox1.Text))
                {
                    MessageBox.Show("DEBE SELECCIONAR PRIMERO LA CARPETA DONDE SE GUARDARAN LOS CFDI", "Descarga Masiva", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                }
    
                //LLAMAMOS A LOS MÉTODOS
                var uri = new Uri("https://portalcfdi.facturaelectronica.sat.gob.mx/ConsultaReceptor.aspx");
                if (webBrowser1.Url == uri)
                {
                    SolicitaCFDI();
                }
                else
                {
                    DescargarCFDI();
                }
            }
    
            //SELECCIONAR LA CARPETA DONDE SE GUARDARAN
            private void tSbtnCARPETAS_Click_1(object sender, EventArgs e)
            {
                try
                {
                    folderBrowserDialog2.Reset(); //RESETEA
                    folderBrowserDialog2.Description = "SELECCIONE UNA CARPETA"; //LEYENDA
                    folderBrowserDialog2.SelectedPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); //PATH "Mis documentos"
                    folderBrowserDialog2.ShowNewFolderButton = false; //DESHABILITA EL BOTÓN
                    DialogResult dialogo = folderBrowserDialog2.ShowDialog(); //ABRE EL DIALOGO
    
                    //SI SE PRESIONÓ EL BOTÓN ACEPTAR
                    if (dialogo == System.Windows.Forms.DialogResult.OK)
                    {
                        this.folderBrowserDialog1.ShowNewFolderButton = true;
                    }
                    folderBrowserDialog2.Dispose();
                    toolStripTextBox1.Text = folderBrowserDialog2.SelectedPath;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(" " + ex.Message);
                }
            }
    
            //CONSULTA DE ATRIBUTOS
            private void button1_Click(object sender, EventArgs e)
            {
                webBrowser1.Document.GetElementById("ctl00_MainContent_RdoFechas").SetAttribute("checked", "checked");
                webBrowser1.Document.GetElementById("ctl00_MainContent_RdoFechas").InvokeMember("click");
    
                foreach (HtmlElement element in webBrowser1.Document.GetElementsByTagName("select"))
                {
                    if (element.GetAttribute("id") == "DdlAnio")
                    {
                        MessageBox.Show(element.GetAttribute("value"));
                        MessageBox.Show(dateTimePicker1.Value.Year.ToString());
                        element.SetAttribute("selected", "selected");
                        element.SetAttribute("selected", "true");
                        element.SetAttribute("value", dateTimePicker1.Value.Year.ToString());
                        element.SetAttribute("selected", "selected");
                        element.SetAttribute("selected", "true");
                        element.InvokeMember("onChange");
                        element.SetAttribute("selecetedIndex", element.GetAttribute("Index"));
                    }
                }
    
                //webBrowser1.Document.GetElementById("ctl00_MainContent_CldFecha_DdlMes").SetAttribute("value", dateTimePicker1.Value.Month);
                webBrowser1.Document.GetElementById("ctl00_MainContent_CldFecha_DdlMes").SetAttribute("selected", "true");
                //webBrowser1.Document.GetElementById("ctl00_MainContent_CldFecha_DdlDia").SetAttribute("value", dateTimePicker1.Value.Day);
                webBrowser1.Document.GetElementById("ctl00_MainContent_CldFecha_DdlDia").SetAttribute("selected", "true");
            }
    
            public bool ValidateCertificate(object sender, X509Certificate certificate, X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors)
            {
                return true;
            }
    
            private void toolStripBtnCERRAR_Click(object sender, EventArgs e)
            {
                this.Close();
            }
        }
    }
     
    Si te sirvio, No olvides votar como respuesta

    lunes, 22 de mayo de 2017 16:29
  • Hola gracias por la aportación. Efectivamente estoy usando un webClient para la descarga, pero sigue mostrándolos vacios. Tengo este código, realizo un método para que en el botón descarga solo llame el método:

    //MÉTODO PARA DESCARGAR LOS ARCHIVOS ".xml"
            public void DescargarCFDI()
            {
                try
                {
                    var XML = webBrowser1.Document.All.Cast<HtmlElement>().Where(htmlElement => htmlElement.Id == "BtnDescarga").ToList();
                    toolStripProgressBar1.ProgressBar.Value = 0;
                    toolStripProgressBar1.ProgressBar.Maximum = XML.Count;
                    if (ContadorDescagas < XML.Count)
                    {
                        toolStripProgressBar1.Value = 0;
                        WebClient wc = new WebClient();
                        string cookie = "";
                        uint datasize = 8192;
                        StringBuilder cookieData = new StringBuilder((int)datasize);
                        string dw_path = System.Convert.ToString(webBrowser1.Document.Url);
                        
                        wc.Headers.Add(HttpRequestHeader.Cookie, cookie);
                        wc.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
                        wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
                        wc.DownloadFileAsync(new Uri("https://portalcfdi.facturaelectronica.sat.gob.mx/RecuperaCfdi" + XML[ContadorDescagas]), +ContadorDescagas + "*.zip");
                        var WC = new WebClient
                        {
                            Encoding = Encoding.UTF8
                        };
                        MessageBox.Show("EL TOTAL DE CFDI SON: " + XML.Count, "Descarga Masiva", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                    }
                }

                catch (Exception e)
                {
                    MessageBox.Show("Error: " + e);
                }
            }

    Alguna otra sugerencia. Me urge gracias



    martes, 3 de enero de 2017 15:16
  • sobra un }

    .....

    }    /* <!-- elimina este -->

    MessageBox.Show("SE DESCARGARON " 

    ....

    • Marcado como respuesta Cashmere M martes, 21 de agosto de 2018 22:07
    viernes, 10 de agosto de 2018 18:48

Todas las respuestas

  • Si sabes la dirección de los XML, podrías descargarlos directamente con un objeto de la clase WebClient:

    WebClient wc = new WebClient();

    wc.DownloadFile("http://...loquesea.xml", @"c:\ruta\loquesea.xml");

    https://msdn.microsoft.com/en-us/library/ez801hhe(v=vs.110).aspx

    martes, 3 de enero de 2017 8:23
    Moderador
  • hola

    pero el acceso a la url requiere alguna interaccion con la pagina?

    porque no usas el

    WebClient.DownloadFile (String, String)

    creo que es lo mas directo

    ---

    Sino recuerda que tienes que grabar el document del webbrowser quizas controlando el

    WebBrowser.FileDownload Event

    si es que se genera una descarga del documento

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    martes, 3 de enero de 2017 13:43
  • Hola gracias por la aportación. Efectivamente estoy usando un webClient para la descarga, pero sigue mostrándolos vacios. Tengo este código, realizo un método para que en el botón descarga solo llame el método:

    //MÉTODO PARA DESCARGAR LOS ARCHIVOS ".xml"
            public void DescargarCFDI()
            {
                try
                {
                    var XML = webBrowser1.Document.All.Cast<HtmlElement>().Where(htmlElement => htmlElement.Id == "BtnDescarga").ToList();
                    toolStripProgressBar1.ProgressBar.Value = 0;
                    toolStripProgressBar1.ProgressBar.Maximum = XML.Count;
                    if (ContadorDescagas < XML.Count)
                    {
                        toolStripProgressBar1.Value = 0;
                        WebClient wc = new WebClient();
                        string cookie = "";
                        uint datasize = 8192;
                        StringBuilder cookieData = new StringBuilder((int)datasize);
                        string dw_path = System.Convert.ToString(webBrowser1.Document.Url);
                        
                        wc.Headers.Add(HttpRequestHeader.Cookie, cookie);
                        wc.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
                        wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
                        wc.DownloadFileAsync(new Uri("https://portalcfdi.facturaelectronica.sat.gob.mx/RecuperaCfdi" + XML[ContadorDescagas]), +ContadorDescagas + "*.zip");
                        var WC = new WebClient
                        {
                            Encoding = Encoding.UTF8
                        };
                        MessageBox.Show("EL TOTAL DE CFDI SON: " + XML.Count, "Descarga Masiva", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                    }
                }

                catch (Exception e)
                {
                    MessageBox.Show("Error: " + e);
                }
            }

    Alguna otra sugerencia. Me urge gracias



    martes, 3 de enero de 2017 15:16
  • Hola gracias por la aportación. Efectivamente estoy usando un webClient para la descarga, pero sigue mostrándolos vacíos. Tengo este código, realizo un método para que en el botón descarga solo llame el método:

    //MÉTODO PARA DESCARGAR LOS ARCHIVOS ".xml"
            public void DescargarCFDI()
            {
                try
                {
                    var XML = webBrowser1.Document.All.Cast<HtmlElement>().Where(htmlElement => htmlElement.Id == "BtnDescarga").ToList();
                    toolStripProgressBar1.ProgressBar.Value = 0;
                    toolStripProgressBar1.ProgressBar.Maximum = XML.Count;
                    if (ContadorDescagas < XML.Count)
                    {
                        toolStripProgressBar1.Value = 0;
                        WebClient wc = new WebClient();
                        string cookie = "";
                        uint datasize = 8192;
                        StringBuilder cookieData = new StringBuilder((int)datasize);
                        string dw_path = System.Convert.ToString(webBrowser1.Document.Url);
                        
                        wc.Headers.Add(HttpRequestHeader.Cookie, cookie);
                        wc.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
                        wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
                        wc.DownloadFileAsync(new Uri("https://portalcfdi.facturaelectronica.sat.gob.mx/RecuperaCfdi" + XML[ContadorDescagas]), +ContadorDescagas + "*.zip");
                        var WC = new WebClient
                        {
                            Encoding = Encoding.UTF8
                        };
                        MessageBox.Show("EL TOTAL DE CFDI SON: " + XML.Count, "Descarga Masiva", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                    }
                }

                catch (Exception e)
                {
                    MessageBox.Show("Error: " + e);
                }
            }

    Alguna otra sugerencia. Me urge gracias


    martes, 3 de enero de 2017 15:20
  • No se ve la parte donde recoges el fichero descargado. Puesto que estás usando la variante "Async", la descarga solo se recibe cuando se alcanza el manejador que has llamado "Completed". Puede ser que haya ahí algún error, sobre todo si estás encolando muchas descargas, ya que las retrollamadas asíncronas pueden solaparse unas con otras y "pisar" las mismas variables, si no has tenido cuidado.

    ¿Hay alguna necesidad de usar la variante asíncrona? ¿Has hecho el experimento de probar primero con la (mucho más sencilla) variante síncrona y comprobar qué es lo que se descarga? Por ejemplo, podría estarte llegando un html con un mensaje de error en lugar del xml, por múltiples causas, como por ejemplo una cookie incorrecta (parece que asignas una cookie vacía, ¿por qué?).

     
    martes, 3 de enero de 2017 20:09
    Moderador
  • Gracias le he cambiado. Me ayudo tu aportación.


    Excelente año nuevo Alberto Poblacion

    jueves, 5 de enero de 2017 19:03
  • Hola  Cashmere V

    ahora mismo me encuentro haciendo la descarga de los archivos XML,

    Como resolviste tu problema :( help me

    lunes, 13 de marzo de 2017 17:04
  • Hola Daniela_rh
    Siento contestar después, espero lo hayas resuelto aun así 
    Aquí dejo mi código por si les sirve alguno de ustedes:

    Espero te sirva. y si tienes alguna mejora por los scripts de la nueva interfaz del SAT es muy bienvenida Daniela_rh

    using System;
    using System.IO;
    using System.Net;
    using System.Xml;
    using System.Data;
    using System.Text;
    using System.Linq;
    using System.Drawing;
    using System.Net.Security;
    using System.Windows.Forms;
    using System.Configuration;
    using System.ComponentModel;
    using System.IO.Compression;
    using System.Threading.Tasks;
    using System.Security.Policy;
    using System.Xml.Serialization;
    using System.Collections.Generic;
    using System.Security.Cryptography;
    using System.Text.RegularExpressions;
    using System.Runtime.InteropServices;
    using System.Security.Cryptography.X509Certificates;
    
    
    namespace satCFDI
    {
        public partial class DM : Form
        {
            public int ContadorDescagas = 0;
            private DateTime fecha;
            private static WebBrowser webBrowser;
            private static HtmlElement Ecom_User_ID;
            private static HtmlElement Ecom_Password;
            private static HtmlElement submit;
            public static string rfc;
            public static string password;
            
            WebClient WC = new WebClient();
    
            [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
            static extern bool InternetGetCookieEx(string pchURL,
                                                   string pchCookieName,
                                                   StringBuilder pchCookieData,
                                                   ref System.UInt32 pcchCookieData,
                                                   int dwFlags, IntPtr lpReserved);
    
    
            private static string GetCookieString(string url)
            {
                //DETERMINA EL TAMAÑO DE LA COOKIE     
                UInt32 datasize = 256 * 1024;
                StringBuilder cookieData = new StringBuilder(Convert.ToInt32(datasize));
                if (!InternetGetCookieEx(url, null, cookieData, ref datasize, 0x00002000, IntPtr.Zero))
                {
                    if (datasize < 0) return null;
                    //ASIGNA AL "StringBuilder" DE LO GRANDE QUE SERÁ LA COOKIE 
                    cookieData = new StringBuilder(Convert.ToInt32(datasize));
                    if (!InternetGetCookieEx(url, null, cookieData, ref datasize, 0x00002000, IntPtr.Zero)) return null;
                }
                return cookieData.ToString();
            }
    
            public DM()
            {
                InitializeComponent();
                timer1.Enabled = true; //TIMER PARA LA FECHA Y HORA EN TIEMPO REAL
            }
    
            //VALIDA LOS DATOS "RFC,PASSWORD Y EL BOTÓN ENVIAR QUE EN HTML ESTA DETERMINADO COMO: (submit)"
            private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                if (webBrowser1.Document == null)
                {
                    if (string.IsNullOrEmpty(webBrowser.Document.Title))
                    {
                        var htmlElementCollection = webBrowser.Document.Links;
                        foreach (var htmlElement in htmlElementCollection.Cast<HtmlElement>().Where(HtmlElement => HtmlElement.InnerText == "CONTRASEÑA"))
                        {
                            htmlElement.InvokeMember("Click");
                        }
                    }
                    if (string.IsNullOrEmpty(webBrowser.Document.Title))
                    {
                        webBrowser1.Document.GetElementById("Ecom_User_ID").InnerText = rfc;
                        webBrowser1.Document.GetElementById("Ecom_Password").InnerText = password;
                        HtmlDocument document = webBrowser1.Document;
                        document.GetElementById("submit").InvokeMember("Click");
                    }
                }
                listBox1.Visible = false;
            }
    
            //ACTUALIZA EL webBrowser
            private void toolStripButton2_Click(object sender, EventArgs e)
            {
                webBrowser1.Refresh();
            }
    
            //FECHA Y HORA EN TIEMPO REAL 
            private void timer1_Tick(object sender, EventArgs e)
            {
                label_DDMMYYYY.Text = DateTime.Now.ToString();
            }
    
            //MÉTODO PARA DESCARGAR LOS ARCHIVOS ".xml" -- PARA SOLICITAR LA DESCARGA DE CFDI
            public void SolicitaCFDI()
            {
                    try
                {
                    var XML = webBrowser1.Document.All.Cast<HtmlElement>().Where(htmlElement => htmlElement.Id == "BtnDescarga").ToList();
                    toolStripProgressBar1.ProgressBar.Value = 0;
                    toolStripProgressBar1.ProgressBar.Maximum = XML.Count;
                    if (ContadorDescagas < XML.Count)
                    {
                        toolStripProgressBar1.Value = 0;
                        WebClient wc = new WebClient();
                        string cookie = "";
                        uint datasize = 8192;
                        StringBuilder cookieData = new StringBuilder((int)datasize);
                        string dw_path = System.Convert.ToString(webBrowser1.Document.Url);
    
                        wc.Headers.Add(HttpRequestHeader.Cookie, cookie);
                        wc.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
                        wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
                        wc.DownloadFileAsync(new Uri("https://portalcfdi.facturaelectronica.sat.gob.mx/ConsultaReceptor.aspx" + XML[ContadorDescagas]), +ContadorDescagas + "*.zip");
                        MessageBox.Show("EL TOTAL DE CFDI SON: " + XML.Count, "Descarga Masiva", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
    
                        webBrowser1.Document.GetElementById("seleccionador").InvokeMember("click");
                        webBrowser1.Document.GetElementById("ctl00$MainContent$BtnDescargar").InvokeMember("click");
                    }
                }
    
                catch (Exception e)
                {
                    MessageBox.Show("Error: " + e);
                }
                
    
                    //VERIFICA SI EXISTE EL ARCHIVO O SINO LO RENOMBRA
                    if (File.Exists(toolStripTextBox1.Text.Trim() + @"\" + foliofiscal + ".xml") == false)
                    {
                        if (!File.Exists(@"\" + foliofiscal + ".xml"))
                        {
                            File.Move(@"\" + foliofiscal + ".xml", @"\" + foliofiscal + ".xml");
                        }
                        else
                        {
                            MessageBox.Show("YA EXISTE EL ARCHIVO", "Descarga Masiva", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
                        }
                        MessageBox.Show("NO SE ENCONTRÓ EL ARCHIVO", "Descarga Masiva", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
                    }            
                   
                }
                MessageBox.Show("SE DESCARGARON " + archivo + "ARCHIVOS EN LA CARPETA [" + toolStripTextBox1.Text.Trim() + "]", "Descarga Masiva", MessageBoxButtons.OKCancel, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
            }
    
            private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e)
            {
                toolStripProgressBar1.Value = e.ProgressPercentage;
            }
    
             //MÉTODO PARA LA DESCARGA DE CFDI
            public void DescargarCFDI()
            {
                var XML = webBrowser1.Document.All.Cast<HtmlElement>().Where(htmlElement => htmlElement.Id == "BtnDescarga").ToList();
                toolStripProgressBar1.ProgressBar.Value = 0;
                toolStripProgressBar1.ProgressBar.Maximum = XML.Count;
                if (ContadorDescagas < XML.Count)
                {
                    toolStripProgressBar1.Value = 0;
                    WebClient wc = new WebClient();
                    string cookie = "";
                    uint datasize = 8192;
                    StringBuilder cookieData = new StringBuilder((int)datasize);
                    string dw_path = System.Convert.ToString(webBrowser1.Document.Url);
    
                    wc.Headers.Add(HttpRequestHeader.Cookie, cookie);
                    wc.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
                    wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
                    wc.DownloadFileAsync(new Uri("https://portalcfdi.facturaelectronica.sat.gob.mx/ConsultaDescargaMasiva.aspx" + XML[ContadorDescagas]), +ContadorDescagas + "*.zip");
                    MessageBox.Show("EL TOTAL DE CFDI SON: " + XML.Count, "Descarga Masiva", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
    
                    webBrowser1.Document.GetElementById("ContenedorDinamico").InvokeMember("click");
                    webBrowser1.Document.GetElementById("BtnDescarga").InvokeMember("click");
                }
            }
    
    
            //BOTÓN DE DESCARGA
            private void toolStripButton3_Click_1(object sender, EventArgs e)
            {
                if (string.IsNullOrEmpty(toolStripTextBox1.Text))
                {
                    MessageBox.Show("DEBE SELECCIONAR PRIMERO LA CARPETA DONDE SE GUARDARAN LOS CFDI", "Descarga Masiva", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                }
    
                //LLAMAMOS A LOS MÉTODOS
                var uri = new Uri("https://portalcfdi.facturaelectronica.sat.gob.mx/ConsultaReceptor.aspx");
                if (webBrowser1.Url == uri)
                {
                    SolicitaCFDI();
                }
                else
                {
                    DescargarCFDI();
                }
            }
    
            //SELECCIONAR LA CARPETA DONDE SE GUARDARAN
            private void tSbtnCARPETAS_Click_1(object sender, EventArgs e)
            {
                try
                {
                    folderBrowserDialog2.Reset(); //RESETEA
                    folderBrowserDialog2.Description = "SELECCIONE UNA CARPETA"; //LEYENDA
                    folderBrowserDialog2.SelectedPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); //PATH "Mis documentos"
                    folderBrowserDialog2.ShowNewFolderButton = false; //DESHABILITA EL BOTÓN
                    DialogResult dialogo = folderBrowserDialog2.ShowDialog(); //ABRE EL DIALOGO
    
                    //SI SE PRESIONÓ EL BOTÓN ACEPTAR
                    if (dialogo == System.Windows.Forms.DialogResult.OK)
                    {
                        this.folderBrowserDialog1.ShowNewFolderButton = true;
                    }
                    folderBrowserDialog2.Dispose();
                    toolStripTextBox1.Text = folderBrowserDialog2.SelectedPath;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(" " + ex.Message);
                }
            }
    
            //CONSULTA DE ATRIBUTOS
            private void button1_Click(object sender, EventArgs e)
            {
                webBrowser1.Document.GetElementById("ctl00_MainContent_RdoFechas").SetAttribute("checked", "checked");
                webBrowser1.Document.GetElementById("ctl00_MainContent_RdoFechas").InvokeMember("click");
    
                foreach (HtmlElement element in webBrowser1.Document.GetElementsByTagName("select"))
                {
                    if (element.GetAttribute("id") == "DdlAnio")
                    {
                        MessageBox.Show(element.GetAttribute("value"));
                        MessageBox.Show(dateTimePicker1.Value.Year.ToString());
                        element.SetAttribute("selected", "selected");
                        element.SetAttribute("selected", "true");
                        element.SetAttribute("value", dateTimePicker1.Value.Year.ToString());
                        element.SetAttribute("selected", "selected");
                        element.SetAttribute("selected", "true");
                        element.InvokeMember("onChange");
                        element.SetAttribute("selecetedIndex", element.GetAttribute("Index"));
                    }
                }
    
                //webBrowser1.Document.GetElementById("ctl00_MainContent_CldFecha_DdlMes").SetAttribute("value", dateTimePicker1.Value.Month);
                webBrowser1.Document.GetElementById("ctl00_MainContent_CldFecha_DdlMes").SetAttribute("selected", "true");
                //webBrowser1.Document.GetElementById("ctl00_MainContent_CldFecha_DdlDia").SetAttribute("value", dateTimePicker1.Value.Day);
                webBrowser1.Document.GetElementById("ctl00_MainContent_CldFecha_DdlDia").SetAttribute("selected", "true");
            }
    
            public bool ValidateCertificate(object sender, X509Certificate certificate, X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors)
            {
                return true;
            }
    
            private void toolStripBtnCERRAR_Click(object sender, EventArgs e)
            {
                this.Close();
            }
        }
    }
     
    Si te sirvio, No olvides votar como respuesta

    lunes, 22 de mayo de 2017 16:29
  • Hola Daniela_rh
    Siento contestar después, espero lo hayas resuelto aun así 
    Aquí dejo mi código por si les sirve alguno de ustedes:

    Espero te sirva. y si tienes alguna mejora por los scripts de la nueva interfaz del SAT es muy bienvenida Daniela_rh

    using System;
    using System.IO;
    using System.Net;
    using System.Xml;
    using System.Data;
    using System.Text;
    using System.Linq;
    using System.Drawing;
    using System.Net.Security;
    using System.Windows.Forms;
    using System.Configuration;
    using System.ComponentModel;
    using System.IO.Compression;
    using System.Threading.Tasks;
    using System.Security.Policy;
    using System.Xml.Serialization;
    using System.Collections.Generic;
    using System.Security.Cryptography;
    using System.Text.RegularExpressions;
    using System.Runtime.InteropServices;
    using System.Security.Cryptography.X509Certificates;
    
    
    namespace satCFDI
    {
        public partial class DM : Form
        {
            public int ContadorDescagas = 0;
            private DateTime fecha;
            private static WebBrowser webBrowser;
            private static HtmlElement Ecom_User_ID;
            private static HtmlElement Ecom_Password;
            private static HtmlElement submit;
            public static string rfc;
            public static string password;
            
            WebClient WC = new WebClient();
    
            [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
            static extern bool InternetGetCookieEx(string pchURL,
                                                   string pchCookieName,
                                                   StringBuilder pchCookieData,
                                                   ref System.UInt32 pcchCookieData,
                                                   int dwFlags, IntPtr lpReserved);
    
    
            private static string GetCookieString(string url)
            {
                //DETERMINA EL TAMAÑO DE LA COOKIE     
                UInt32 datasize = 256 * 1024;
                StringBuilder cookieData = new StringBuilder(Convert.ToInt32(datasize));
                if (!InternetGetCookieEx(url, null, cookieData, ref datasize, 0x00002000, IntPtr.Zero))
                {
                    if (datasize < 0) return null;
                    //ASIGNA AL "StringBuilder" DE LO GRANDE QUE SERÁ LA COOKIE 
                    cookieData = new StringBuilder(Convert.ToInt32(datasize));
                    if (!InternetGetCookieEx(url, null, cookieData, ref datasize, 0x00002000, IntPtr.Zero)) return null;
                }
                return cookieData.ToString();
            }
    
            public DM()
            {
                InitializeComponent();
                timer1.Enabled = true; //TIMER PARA LA FECHA Y HORA EN TIEMPO REAL
            }
    
            //VALIDA LOS DATOS "RFC,PASSWORD Y EL BOTÓN ENVIAR QUE EN HTML ESTA DETERMINADO COMO: (submit)"
            private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                if (webBrowser1.Document == null)
                {
                    if (string.IsNullOrEmpty(webBrowser.Document.Title))
                    {
                        var htmlElementCollection = webBrowser.Document.Links;
                        foreach (var htmlElement in htmlElementCollection.Cast<HtmlElement>().Where(HtmlElement => HtmlElement.InnerText == "CONTRASEÑA"))
                        {
                            htmlElement.InvokeMember("Click");
                        }
                    }
                    if (string.IsNullOrEmpty(webBrowser.Document.Title))
                    {
                        webBrowser1.Document.GetElementById("Ecom_User_ID").InnerText = rfc;
                        webBrowser1.Document.GetElementById("Ecom_Password").InnerText = password;
                        HtmlDocument document = webBrowser1.Document;
                        document.GetElementById("submit").InvokeMember("Click");
                    }
                }
                listBox1.Visible = false;
            }
    
            //ACTUALIZA EL webBrowser
            private void toolStripButton2_Click(object sender, EventArgs e)
            {
                webBrowser1.Refresh();
            }
    
            //FECHA Y HORA EN TIEMPO REAL 
            private void timer1_Tick(object sender, EventArgs e)
            {
                label_DDMMYYYY.Text = DateTime.Now.ToString();
            }
    
            //MÉTODO PARA DESCARGAR LOS ARCHIVOS ".xml" -- PARA SOLICITAR LA DESCARGA DE CFDI
            public void SolicitaCFDI()
            {
                    try
                {
                    var XML = webBrowser1.Document.All.Cast<HtmlElement>().Where(htmlElement => htmlElement.Id == "BtnDescarga").ToList();
                    toolStripProgressBar1.ProgressBar.Value = 0;
                    toolStripProgressBar1.ProgressBar.Maximum = XML.Count;
                    if (ContadorDescagas < XML.Count)
                    {
                        toolStripProgressBar1.Value = 0;
                        WebClient wc = new WebClient();
                        string cookie = "";
                        uint datasize = 8192;
                        StringBuilder cookieData = new StringBuilder((int)datasize);
                        string dw_path = System.Convert.ToString(webBrowser1.Document.Url);
    
                        wc.Headers.Add(HttpRequestHeader.Cookie, cookie);
                        wc.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
                        wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
                        wc.DownloadFileAsync(new Uri("https://portalcfdi.facturaelectronica.sat.gob.mx/ConsultaReceptor.aspx" + XML[ContadorDescagas]), +ContadorDescagas + "*.zip");
                        MessageBox.Show("EL TOTAL DE CFDI SON: " + XML.Count, "Descarga Masiva", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
    
                        webBrowser1.Document.GetElementById("seleccionador").InvokeMember("click");
                        webBrowser1.Document.GetElementById("ctl00$MainContent$BtnDescargar").InvokeMember("click");
                    }
                }
    
                catch (Exception e)
                {
                    MessageBox.Show("Error: " + e);
                }
                
    
                    //VERIFICA SI EXISTE EL ARCHIVO O SINO LO RENOMBRA
                    if (File.Exists(toolStripTextBox1.Text.Trim() + @"\" + foliofiscal + ".xml") == false)
                    {
                        if (!File.Exists(@"\" + foliofiscal + ".xml"))
                        {
                            File.Move(@"\" + foliofiscal + ".xml", @"\" + foliofiscal + ".xml");
                        }
                        else
                        {
                            MessageBox.Show("YA EXISTE EL ARCHIVO", "Descarga Masiva", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
                        }
                        MessageBox.Show("NO SE ENCONTRÓ EL ARCHIVO", "Descarga Masiva", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
                    }            
                   
                }
                MessageBox.Show("SE DESCARGARON " + archivo + "ARCHIVOS EN LA CARPETA [" + toolStripTextBox1.Text.Trim() + "]", "Descarga Masiva", MessageBoxButtons.OKCancel, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
            }
    
            private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e)
            {
                toolStripProgressBar1.Value = e.ProgressPercentage;
            }
    
             //MÉTODO PARA LA DESCARGA DE CFDI
            public void DescargarCFDI()
            {
                var XML = webBrowser1.Document.All.Cast<HtmlElement>().Where(htmlElement => htmlElement.Id == "BtnDescarga").ToList();
                toolStripProgressBar1.ProgressBar.Value = 0;
                toolStripProgressBar1.ProgressBar.Maximum = XML.Count;
                if (ContadorDescagas < XML.Count)
                {
                    toolStripProgressBar1.Value = 0;
                    WebClient wc = new WebClient();
                    string cookie = "";
                    uint datasize = 8192;
                    StringBuilder cookieData = new StringBuilder((int)datasize);
                    string dw_path = System.Convert.ToString(webBrowser1.Document.Url);
    
                    wc.Headers.Add(HttpRequestHeader.Cookie, cookie);
                    wc.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
                    wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
                    wc.DownloadFileAsync(new Uri("https://portalcfdi.facturaelectronica.sat.gob.mx/ConsultaDescargaMasiva.aspx" + XML[ContadorDescagas]), +ContadorDescagas + "*.zip");
                    MessageBox.Show("EL TOTAL DE CFDI SON: " + XML.Count, "Descarga Masiva", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
    
                    webBrowser1.Document.GetElementById("ContenedorDinamico").InvokeMember("click");
                    webBrowser1.Document.GetElementById("BtnDescarga").InvokeMember("click");
                }
            }
    
    
            //BOTÓN DE DESCARGA
            private void toolStripButton3_Click_1(object sender, EventArgs e)
            {
                if (string.IsNullOrEmpty(toolStripTextBox1.Text))
                {
                    MessageBox.Show("DEBE SELECCIONAR PRIMERO LA CARPETA DONDE SE GUARDARAN LOS CFDI", "Descarga Masiva", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                }
    
                //LLAMAMOS A LOS MÉTODOS
                var uri = new Uri("https://portalcfdi.facturaelectronica.sat.gob.mx/ConsultaReceptor.aspx");
                if (webBrowser1.Url == uri)
                {
                    SolicitaCFDI();
                }
                else
                {
                    DescargarCFDI();
                }
            }
    
            //SELECCIONAR LA CARPETA DONDE SE GUARDARAN
            private void tSbtnCARPETAS_Click_1(object sender, EventArgs e)
            {
                try
                {
                    folderBrowserDialog2.Reset(); //RESETEA
                    folderBrowserDialog2.Description = "SELECCIONE UNA CARPETA"; //LEYENDA
                    folderBrowserDialog2.SelectedPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); //PATH "Mis documentos"
                    folderBrowserDialog2.ShowNewFolderButton = false; //DESHABILITA EL BOTÓN
                    DialogResult dialogo = folderBrowserDialog2.ShowDialog(); //ABRE EL DIALOGO
    
                    //SI SE PRESIONÓ EL BOTÓN ACEPTAR
                    if (dialogo == System.Windows.Forms.DialogResult.OK)
                    {
                        this.folderBrowserDialog1.ShowNewFolderButton = true;
                    }
                    folderBrowserDialog2.Dispose();
                    toolStripTextBox1.Text = folderBrowserDialog2.SelectedPath;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(" " + ex.Message);
                }
            }
    
            //CONSULTA DE ATRIBUTOS
            private void button1_Click(object sender, EventArgs e)
            {
                webBrowser1.Document.GetElementById("ctl00_MainContent_RdoFechas").SetAttribute("checked", "checked");
                webBrowser1.Document.GetElementById("ctl00_MainContent_RdoFechas").InvokeMember("click");
    
                foreach (HtmlElement element in webBrowser1.Document.GetElementsByTagName("select"))
                {
                    if (element.GetAttribute("id") == "DdlAnio")
                    {
                        MessageBox.Show(element.GetAttribute("value"));
                        MessageBox.Show(dateTimePicker1.Value.Year.ToString());
                        element.SetAttribute("selected", "selected");
                        element.SetAttribute("selected", "true");
                        element.SetAttribute("value", dateTimePicker1.Value.Year.ToString());
                        element.SetAttribute("selected", "selected");
                        element.SetAttribute("selected", "true");
                        element.InvokeMember("onChange");
                        element.SetAttribute("selecetedIndex", element.GetAttribute("Index"));
                    }
                }
    
                //webBrowser1.Document.GetElementById("ctl00_MainContent_CldFecha_DdlMes").SetAttribute("value", dateTimePicker1.Value.Month);
                webBrowser1.Document.GetElementById("ctl00_MainContent_CldFecha_DdlMes").SetAttribute("selected", "true");
                //webBrowser1.Document.GetElementById("ctl00_MainContent_CldFecha_DdlDia").SetAttribute("value", dateTimePicker1.Value.Day);
                webBrowser1.Document.GetElementById("ctl00_MainContent_CldFecha_DdlDia").SetAttribute("selected", "true");
            }
    
            public bool ValidateCertificate(object sender, X509Certificate certificate, X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors)
            {
                return true;
            }
    
            private void toolStripBtnCERRAR_Click(object sender, EventArgs e)
            {
                this.Close();
            }
        }
    }
     
    Si te sirvio, No olvides votar como respuesta

    Hola Cashmere... en tu codigo falsta el metodo Completed y un trocito más... aun no lo he podido probar pero me parece bueno... gracias por la ayuda.
    miércoles, 28 de junio de 2017 15:55
  • Hola Paolo D'Ambrosio 

    En el metodo Completed, no se le mete nada, yo lo tengo pero igual esta vacio. Pero eso es todo.

    "No es tu Aptitud, es tu Actitud, lo que determina tu Altitud" 

    No olvides marcarlo como Respuesta

    lunes, 3 de julio de 2017 14:57
  • Hola Cashmere,

    Gracias por la información sobre COMPLETED. pero de verdad falta código entre el método SolicitaCFDI y ProgressChanged o hay un corchete de más:

     //MÉTODO PARA DESCARGAR LOS ARCHIVOS ".xml" -- PARA SOLICITAR LA DESCARGA DE CFDI
            public void SolicitaCFDI()
            {
                    try
                {
                    var XML = webBrowser1.Document.All.Cast<HtmlElement>().Where(htmlElement => htmlElement.Id == "BtnDescarga").ToList();
                    toolStripProgressBar1.ProgressBar.Value = 0;
                    toolStripProgressBar1.ProgressBar.Maximum = XML.Count;
                    if (ContadorDescagas < XML.Count)
                    {
                        toolStripProgressBar1.Value = 0;
                        WebClient wc = new WebClient();
                        string cookie = "";
                        uint datasize = 8192;
                        StringBuilder cookieData = new StringBuilder((int)datasize);
                        string dw_path = System.Convert.ToString(webBrowser1.Document.Url);

                        wc.Headers.Add(HttpRequestHeader.Cookie, cookie);
                        wc.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
                        wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
                        wc.DownloadFileAsync(new Uri("https://portalcfdi.facturaelectronica.sat.gob.mx/ConsultaReceptor.aspx" + XML[ContadorDescagas]), +ContadorDescagas + "*.zip");
                        MessageBox.Show("EL TOTAL DE CFDI SON: " + XML.Count, "Descarga Masiva", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);

                        webBrowser1.Document.GetElementById("seleccionador").InvokeMember("click");
                        webBrowser1.Document.GetElementById("ctl00$MainContent$BtnDescargar").InvokeMember("click");
                    }
                }

                catch (Exception e)
                {
                    MessageBox.Show("Error: " + e);
                }

    ==> falta algo

                    //VERIFICA SI EXISTE EL ARCHIVO O SINO LO RENOMBRA
                    if (File.Exists(toolStripTextBox1.Text.Trim() + @"\" + foliofiscal + ".xml") == false)
                    {
                        if (!File.Exists(@"\" + foliofiscal + ".xml"))
                        {
                            File.Move(@"\" + foliofiscal + ".xml", @"\" + foliofiscal + ".xml");
                        }
                        else
                        {
                            MessageBox.Show("YA EXISTE EL ARCHIVO", "Descarga Masiva", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
                        }
                        MessageBox.Show("NO SE ENCONTRÓ EL ARCHIVO", "Descarga Masiva", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
                    }            

                }<== está de más?
                MessageBox.Show("SE DESCARGARON " + archivo + "ARCHIVOS EN LA CARPETA [" + toolStripTextBox1.Text.Trim() + "]", "Descarga Masiva", MessageBoxButtons.OKCancel, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
            }

            private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e)
            {
                toolStripProgressBar1.Value = e.ProgressPercentage;
            }

                                
    viernes, 11 de agosto de 2017 17:19
  • Hola estoy interesado en saber como se realiza un código para la descarga de xml así pero me falta un poco mas teoría para poder aprender al respeto, no se si me podrías ayudar con que tipo de información te lo agradecería 
    martes, 29 de mayo de 2018 22:10
  • sobra un }

    .....

    }    /* <!-- elimina este -->

    MessageBox.Show("SE DESCARGARON " 

    ....

    • Marcado como respuesta Cashmere M martes, 21 de agosto de 2018 22:07
    viernes, 10 de agosto de 2018 18:48
  • Gracias por aclarar :D

    Saludos.
    martes, 21 de agosto de 2018 22:07
  • Hola, disculpa por tardar en contestar. 

    La descarga masiva se hace mediante el portal del SAT. Te recomiendo que lo hagas manual para que verifiques como plantearlo en un programa.

    Te dejare unos pasos para que sepas como es y como lo plantearías en programación,
    1. Ingresa a esta página https://www.siat.sat.gob.mx/PTSC/
    2. Busca la péstaña "Factura Electrónica" --> Consultar, cancelar y recuperar --> Coloca los datos que te solicitan como RFC, Contraseña y el Captcha.
    3. Una vez estando dentro te apareceran 3 opciones, selecciona "Consultar Facturas Recibidas" --> Te recomiendo que las busques por "Fecha de Emisión", una vez que hayas llenado la información.
    4. Te regresas al menú de 3 opciones y ahora te vas a la opción "Recuperar descargas de CFDI" y ahí te mostrará todos los CFDI que descargaste. 
    5. Extraes lo que tiene el CFDI y traen los famosos XML.

    Te recomiendo que hagas los pasos, ya que así tendrás más visión sobre como realizar el programa de Descarga masiva, justo ahora mi programa lo tengo de baja porque el Captcha me ha causado conflictos.
    Pero en cuanto tenga una noticia, estaré compartiendo el código con ustedes. Saludos

    Si te sirvió, vota como respuesta!!

    martes, 21 de agosto de 2018 22:17