示例#1
0
        public string PostQuestion(string username, string Email, string Password, string Topic, string Proxy, string Macro)
        {
            // GET iMacros code
            // SET Variables
            // Execute the code
            // Return Success / Failure
            //bool Success = false;

            string QuestionLink = "";

            iMacros.App    m_app = new iMacros.App();
            iMacros.Status s     = new iMacros.Status();

            s = m_app.iimOpen("", true, 5);

            s = m_app.iimSet("Email", Email);
            s = m_app.iimSet("Password", Password);
            s = m_app.iimSet("Proxy", Proxy);
            s = m_app.iimSet("Topic", Topic);

            // Execute macro
            s = m_app.iimPlayCode(Macro, m_timeout);

            try
            {
                QuestionLink = m_app.iimGetExtract(1);
            }
            catch
            {
                goto Continue1;
            }

Continue1:

            try
            {
                s = m_app.iimClose(close_timeout);
            }
            catch
            {
                //
                goto JustContinue;
            }

JustContinue:

            m_app = null;

            // Get variable from macro and return


            // *************************************************
            //Success = true; // TEMPORARY VALUE for DEBUGGING
            // *************************************************

            return(QuestionLink);
        }
示例#2
0
        private void btPlayOnly_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < 3; i++)
            {
                iMacros.App    m_app = new iMacros.App();
                iMacros.Status s     = m_app.iimInit("", false, "", "", "", 5);

                if (s == iMacros.Status.sOk || s == iMacros.Status.sInternal)
                {
                    s = m_app.iimPlay(tbIIM.Text, 300);
                }
                string result = m_app.iimGetLastError();
                System.Threading.Thread.Sleep(10000);
                m_app.iimExit();
            }
        }
示例#3
0
        /*Constructor SegundaMano*/
        #region Constructor Clase
        public SegundaMano()
        {
            this.iWaitTime   = 1;  //Tiempo de espera para scrapear cada pagina
            globalCountMax   = 25; //Cantidade de iteraciones para reiniciar el imacros
            this.globalCount = globalCountMax;
            this.context.Configuration.AutoDetectChangesEnabled = false;
            this.context.Configuration.ValidateOnSaveEnabled    = false;
            this.htmlDoc = new HtmlDocument();

            //Declaracion de la Instancia del imacros
            #region Instancia Imacros
            iMacros.Status status;
            app    = new iMacros.AppClass();
            status = app.iimInit("-tray", false);
            #endregion
        }
示例#4
0
        private bool DoWork(iMacros.App m_app, string IP)
        {
            iMacros.Status s = m_app.iimInit("", false, "", "", "", 5);

            if (s == iMacros.Status.sOk || s == iMacros.Status.sInternal)
            {
                m_app.iimSet("gotourl", string.Format(tbUrl.Text, IP));
                m_app.iimSet("username", tbUsername.Text);
                m_app.iimSet("password", tbPassword.Text);
                s = m_app.iimPlay(tbIIM.Text, 300);
                string result = m_app.iimGetLastError();

                lbResults.Items.Add(IP + "\t" + result);

                return(true);
            }
            else
            {
                //listBox1.Items.Add(IP + "\t " + m_app.iimGetLastError());
                return(false);
            }
        }
示例#5
0
 /*Gestion de Memoria*/
 #region Metodo responsable por gestionar la memoria limitada del imacros
 public void controlMemoriaImacros()
 {
     if (globalCount == 0)
     {
         app.iimClose();
         app    = new iMacros.AppClass();
         status = app.iimInit("-tray", false);
         string sScript = "";
         sScript  = "CODE:" + Environment.NewLine;
         sScript += "CLEAR" + Environment.NewLine;
         sScript += "VERSION BUILD=9002379" + Environment.NewLine;
         sScript += "TAB T=1" + Environment.NewLine;
         sScript += "TAB CLOSEALLOTHERS" + Environment.NewLine;
         sScript += "FILTER TYPE=IMAGES STATUS=ON " + Environment.NewLine;
         app.iimPlay(sScript);
         globalCount = globalCountMax;
     }
     else
     {
         globalCount--;
     }
 }
示例#6
0
        public string[] CreateAccountWithCaptcha(Emailaccounts tblaccouts, string proxy, string CreateMacro)
        {
            string[] ErrAndId = new string[2];

            Dictionary <string, string> props = ParseProperties(tblaccouts.Allproperties);

            iMacros.App    m_app = new iMacros.App();
            iMacros.Status s     = new iMacros.Status();
            s = m_app.iimOpen("", true, m_timeout);

            /*
             * s = m_app.iimSet("Username", username);
             * s = m_app.iimSet("Email", email);
             * s = m_app.iimSet("Password", pwd);
             * s = m_app.iimSet("FirstName", fname);
             * s = m_app.iimSet("Proxy", proxy);
             * s = m_app.iimSet("Topic", topic);
             */

            // s = m_app.iimSet("Topic", topic);

            s = m_app.iimSet("Username", tblaccouts.Username);
            s = m_app.iimSet("Email", tblaccouts.Email);
            s = m_app.iimSet("Password", tblaccouts.Password);
            s = m_app.iimSet("FirstName", tblaccouts.FirstName);
            s = m_app.iimSet("LastName", tblaccouts.LastName);

            s = m_app.iimSet("BirthdayYYYYMMDD", tblaccouts.Birthday.ToString("yyyy-MM-dd"));
            s = m_app.iimSet("BirthdayDDMMYYYY", tblaccouts.Birthday.ToString("dd/MM/yyyy"));
            s = m_app.iimSet("BirthdayYYYY", tblaccouts.Birthday.ToString("yyyy"));
            s = m_app.iimSet("BirthdayYY", tblaccouts.Birthday.ToString("yy"));
            s = m_app.iimSet("BirthdayMM", tblaccouts.Birthday.ToString("MM"));
            s = m_app.iimSet("BirthdayMMM", tblaccouts.Birthday.ToString("MMM"));
            s = m_app.iimSet("BirthdayM", tblaccouts.Birthday.ToString("M"));
            s = m_app.iimSet("BirthdayDD", tblaccouts.Birthday.ToString("dd"));

            // FRENCH FORUMS:
            s = m_app.iimSet("StreetFR", tblaccouts.StreetFR);
            s = m_app.iimSet("PostalCodeFR", tblaccouts.PostalCodeFR);
            s = m_app.iimSet("CityFR", tblaccouts.CityFR);

            // AU and US:
            s = m_app.iimSet("PostalCodeAU", tblaccouts.PostalCodeAU);
            s = m_app.iimSet("PostalCodeUS", tblaccouts.PostalCodeFR);
            s = m_app.iimSet("PostalCodeDE", tblaccouts.PostalCodeDE);

            s = m_app.iimSet("Proxy", proxy);

            foreach (KeyValuePair <string, string> property in props)
            {
                s = m_app.iimSet(property.Key, property.Value);
            }


            // Execute macro
            s = m_app.iimPlayCode(CreateMacro, m_timeout);
            try
            {
                ErrAndId[1] = m_app.iimGetExtract(1);
                ErrAndId[0] = m_app.iimGetExtract(2);
            }
            catch
            {
            }

            try
            {
                s = m_app.iimClose(close_timeout);
            }
            catch
            {
                //
                goto JustContinue;
            }
JustContinue:
            m_app = null;

            return(ErrAndId);
        }
示例#7
0
        public bool CreateAccountPurseBlog(string username, string email, string pwd, string fname, string proxy, string CreateMacro)
        {
            // STANDARD VARIABLES
            String result = "";
            int    errors = 0;

            string ConfirmationTxt = "";
            int    inc             = 0;
            bool   Success         = false;

            if (email != "")
            {
                iMacros.App    m_app = new iMacros.App();
                iMacros.Status s     = new iMacros.Status();

TryAgain:
                try
                {
                    s = m_app.iimOpen("", true, m_timeout);
                    if (s != iMacros.Status.sOk)
                    {
                        errors++;
                    }
                    result = result + "open " + Convert.ToString(s) + "; ";

                    s = m_app.iimSet("Username", username);
                    if (s != iMacros.Status.sOk)
                    {
                        errors++;
                    }
                    result = result + "set " + Convert.ToString(s) + "; ";

                    s = m_app.iimSet("Email", email);
                    if (s != iMacros.Status.sOk)
                    {
                        errors++;
                    }
                    result = result + "set " + Convert.ToString(s) + "; ";

                    s = m_app.iimSet("Password", pwd);
                    if (s != iMacros.Status.sOk)
                    {
                        errors++;
                    }
                    result = result + "set " + Convert.ToString(s) + "; ";

                    s = m_app.iimSet("FirstName", fname);
                    if (s != iMacros.Status.sOk)
                    {
                        errors++;
                    }
                    result = result + "set " + Convert.ToString(s) + "; ";

                    s = m_app.iimSet("Proxy", proxy);
                    if (s != iMacros.Status.sOk)
                    {
                        errors++;
                    }
                    result = result + "set " + Convert.ToString(s) + "; ";

                    // Execute macro
                    s = m_app.iimPlayCode(CreateMacro, m_timeout);
                    if (s != iMacros.Status.sOk)
                    {
                        errors++;
                    }
                    result = result + "play " + Convert.ToString(s) + "; ";

                    ConfirmationTxt = m_app.iimGetExtract(1);
                }
                catch
                {
                    MessageBox.Show("Result: " + result);
                    goto TryAgain;
                }

                string[] testsplit = ConfirmationTxt.Split(' ');

                if (ConfirmationTxt != "" && ConfirmationTxt != "NODATA" && ConfirmationTxt != "#EANF#" && testsplit.Count() >= 7)
                {
                    string FinishCreateMacro = "";

                    FinishCreateMacro = FinishCreateMacro + "WAIT SECONDS=3" + "\n";
                    FinishCreateMacro = FinishCreateMacro + "TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:register ATTR=NAME:humanverify[input] CONTENT={{Solution}}" + "\n";
                    FinishCreateMacro = FinishCreateMacro + "TAG POS=1 TYPE=INPUT:CHECKBOX FORM=NAME:register ATTR=NAME:options[adminemail] CONTENT=NO" + "\n";
                    FinishCreateMacro = FinishCreateMacro + "WAIT SECONDS=3" + "\n";
                    FinishCreateMacro = FinishCreateMacro + "TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:register ATTR=CLASS:button" + "\n";
                    FinishCreateMacro = FinishCreateMacro + "WAIT SECONDS=3" + "\n";

                    s = m_app.iimSet("Solution", SolveCaptchaPurseBlog(ConfirmationTxt));
                    s = m_app.iimPlayCode(FinishCreateMacro, m_timeout);

                    Success = true; // TEMPORARY VALUE for DEBUGGING
                }
                else
                {
                    inc++;
                    if (inc > 5)
                    {
                        Success = false;
                        goto CloseApp;
                    }
                    s     = m_app.iimClose();
                    m_app = null;
                    goto TryAgain;
                }

CloseApp:
                try
                {
                    s = m_app.iimClose(close_timeout);
                }
                catch
                {
                    //
                    goto JustContinue;
                }

JustContinue:

                m_app = null;

                // Get variable from macro and return
            }


            // *************************************************
            // *************************************************

            return(Success);
        }
示例#8
0
        public iMacrosPostReturnVars LoginAndPost(string Username, string Email, string Password, string Proxy, string LinkToPost, string GeneratedResponse, string macro)
        {
            string macrocheckifposted         = "";
            iMacrosPostReturnVars localposter = new iMacrosPostReturnVars();

            macrocheckifposted = getCheckifpostedmacro();

            iMacros.App    m_app = new iMacros.App();
            iMacros.Status s     = new iMacros.Status();

            s = m_app.iimOpen("", true, 5);
            s = m_app.iimSet("Username", Username);
            s = m_app.iimSet("Email", Email);
            s = m_app.iimSet("Password", Password);
            s = m_app.iimSet("Proxy", Proxy);
            s = m_app.iimSet("LinkToPost", LinkToPost);
            s = m_app.iimSet("Answer", GeneratedResponse);

            // Execute macro
            s = m_app.iimPlayCode(macro, m_timeout);

            string          pattern = @"http://.+/";
            Regex           rgx     = new Regex(pattern, RegexOptions.IgnoreCase);
            MatchCollection matches = rgx.Matches(GeneratedResponse);

            if (matches.Count > 0)
            {
                foreach (Match match in matches)
                {
                    s = m_app.iimSet("Shortener", match.Value);
                }
            }
            else
            {
                s = m_app.iimSet("Shortener", "http://eurl.me/");
            }

            s = m_app.iimPlayCode(macrocheckifposted, m_timeout);
            if (m_app.iimGetExtract(1) != "#EANF#" && m_app.iimGetExtract(1) != "NODATA")
            {
                localposter.setSuccess(true);
            }
            else
            {
                localposter.setSuccess(false);
            }

            if (m_app.iimGetExtract(2) != "NODATA")
            {
                localposter.setReturnURL(m_app.iimGetExtract(2));
            }

            try
            {
                s = m_app.iimClose(close_timeout);
            }
            catch
            {
                //
                goto JustContinue;
            }

JustContinue:
            m_app = null;

            return(localposter);
        }
示例#9
0
        public bool ConfirmAccount(string email, ref string pwd, string lnkstructure, string sdremail, string proxy, int ShiftLinkBy)
        {
            // GET iMacros code (or use a static code)
            // SET Variables
            // Execute the code
            // Return Success / Failure

            confirmator = new HotmailPOP();

            string LinkExtracted = confirmator.ExtractConfLink(email, pwd, lnkstructure, sdremail, ShiftLinkBy);

            // bool Success = false;

            if (LinkExtracted != null && LinkExtracted != "")
            {
                if (LinkExtracted.Length > 3)
                {
                    if (LinkExtracted.Substring(0, 4) == "http")
                    {
                        // Static Code for all programs
                        string macro = "Version Build = 8032216" + "\r\n";
                        macro = macro + "TAB T=1" + "\r\n";
                        macro = macro + "TAB CLOSEALLOTHERS" + "\r\n";
                        macro = macro + "URL GOTO=about:blank" + "\r\n";
                        macro = macro + "WAIT SECONDS=3" + "\r\n";
                        macro = macro + "PROXY ADDRESS={{Proxy}}" + "\r\n";
                        macro = macro + "ONLOGIN USER=Jukas PASSWORD=7qUzTq7V" + "\r\n";
                        macro = macro + "URL GOTO={{ConfLink}}" + "\r\n";
                        macro = macro + "WAIT SECONDS=3" + "\r\n";

                        iMacros.App    m_app = new iMacros.App();
                        iMacros.Status s     = new iMacros.Status();

                        s = m_app.iimOpen("", true, 5);
                        s = m_app.iimSet("ConfLink", LinkExtracted);
                        s = m_app.iimSet("Email", email);
                        s = m_app.iimSet("Password", pwd);
                        s = m_app.iimSet("Proxy", proxy);

                        // Execute macro
                        s = m_app.iimPlayCode(macro, m_timeout);
                        // Success = m_app.iimGetExtract(1);
                        try
                        {
                            s = m_app.iimClose(close_timeout);
                        }
                        catch
                        {
                            //
                            goto JustContinue;
                        }

JustContinue:

                        m_app = null;

                        return(true);
                    }
                    else // if the extracted text is not HTTP, but a password:
                    {
                        pwd = LinkExtracted;
                        return(true);
                    }
                }
                else // if the extracted text is not HTTP, but a password:
                {
                    pwd = LinkExtracted;
                    return(true);
                }
            }
            else // if linkExtracted = null
            {
                return(false);
            }
        }
示例#10
0
        // string username, string email, string pwd, string fname
        public bool CreateAccount(Emailaccounts tblaccouts, string proxy, string CreateMacro)
        {
            bool Success = false;

            if (tblaccouts.Email != "")
            {
                Dictionary <string, string> props = ParseProperties(tblaccouts.Allproperties);
                // string property;
                iMacros.App    m_app = new iMacros.App();
                iMacros.Status s     = new iMacros.Status();

                s = m_app.iimOpen("", true, m_timeout);

                // Set field values. Some are not existent in some iMacros scripts.
                // But they are set to cover the full spectrum of iMacros.

                s = m_app.iimSet("Username", tblaccouts.Username);
                s = m_app.iimSet("Email", tblaccouts.Email);
                s = m_app.iimSet("Password", tblaccouts.Password);
                s = m_app.iimSet("FirstName", tblaccouts.FirstName);
                s = m_app.iimSet("LastName", tblaccouts.LastName);
                s = m_app.iimSet("BirthdayYYYYMMDD", tblaccouts.Birthday.ToString("yyyy-MM-dd"));
                s = m_app.iimSet("BirthdayDDMMYYYY", tblaccouts.Birthday.ToString("dd/MM/yyyy"));
                s = m_app.iimSet("BirthdayYYYY", tblaccouts.Birthday.ToString("yyyy"));
                s = m_app.iimSet("BirthdayYY", tblaccouts.Birthday.ToString("yy"));
                s = m_app.iimSet("BirthdayMM", tblaccouts.Birthday.ToString("MM"));
                s = m_app.iimSet("BirthdayM", tblaccouts.Birthday.ToString("M"));
                s = m_app.iimSet("BirthdayMMM", tblaccouts.Birthday.ToString("MMM"));
                s = m_app.iimSet("BirthdayDD", tblaccouts.Birthday.ToString("dd"));

                // FRENCH FORUMS:
                s = m_app.iimSet("StreetFR", tblaccouts.StreetFR);
                s = m_app.iimSet("PostalCodeFR", tblaccouts.PostalCodeFR);
                s = m_app.iimSet("CityFR", tblaccouts.CityFR);

                // AU and DE:
                s = m_app.iimSet("PostalCodeAU", tblaccouts.PostalCodeAU);
                s = m_app.iimSet("PostalCodeUS", tblaccouts.PostalCodeFR);
                s = m_app.iimSet("PostalCodeDE", tblaccouts.PostalCodeDE);

                s = m_app.iimSet("Proxy", proxy);

                foreach (KeyValuePair <string, string> property in props)
                {
                    s = m_app.iimSet(property.Key, property.Value);
                }

                s = m_app.iimPlayCode(CreateMacro, m_timeout);

                try
                {
                    s = m_app.iimClose(close_timeout);
                }
                catch
                {
                    goto JustContinue;
                }

JustContinue:

                m_app = null;
            }


            // *************************************************
            Success = true; // TEMPORARY VALUE for DEBUGGING
            // *************************************************

            return(Success);
        }
示例#11
0
        public void ScrapearPropriedade(int id_enlace_hijo)
        {
            #region 1. Declaracion Variables de Control
            var Hijo = context.Enlace_Hijo.First(a => a.id_enlace_hijo == id_enlace_hijo);

            //Lector optico para conversion de las imagenes en texto
            //Tessnet Tessnet = new Tessnet();

            string sScript = "";
            string sTxt    = "";

            int     iThumbs      = 0;
            Boolean bEndOfThumbs = false;

            int     iFeatures      = 1;
            Boolean bEnfOfFeatures = false;

            int     iTelefono      = 1;
            Boolean bEnfOfTelefono = false;
            string  sTelefono      = "";

            int     iDescripcion      = 1;
            Boolean bEnfOfDescripcion = false;
            string  sDescripcion      = "";
            string  sDescripcionValue = "";
            #endregion

            #region 2. Preparacion de las tablas para insercion
            //Configurando inserts a la base de datos.
            Enlace_Hijo_Detalle Detalle = new Enlace_Hijo_Detalle();
            Detalle.id_enlace_hijo = id_enlace_hijo;

            //Limpiamos datos de las caracteristicas anteriores a la misma propriedade
            this.DeletarCaracteristica(id_enlace_hijo);
            this.DeletarDetalle(id_enlace_hijo);
            #endregion

            #region 3. Configuracion del script imacros
            //Preparacion del sScript de scrapping
            sScript  = "CODE:" + Environment.NewLine;
            sScript += "CLEAR" + Environment.NewLine;
            sScript += "VERSION BUILD=9002379" + Environment.NewLine;
            sScript += "TAB T=1" + Environment.NewLine;
            sScript += "TAB CLOSEALLOTHERS" + Environment.NewLine;
            sScript += "FILTER TYPE=IMAGES STATUS=ON " + Environment.NewLine;
            sScript += "URL GOTO=" + Hijo.url + Environment.NewLine;
            sScript += "WAIT SECONDS=" + iWaitTime + Environment.NewLine;
            status   = app.iimPlay(sScript);
            if (status.ToString() != "sOk")
            {
                erroScrapearPropriedade(id_enlace_hijo, status.ToString());
                this.globalCount = 0;
                controlMemoriaImacros();
                return;
            }
            #endregion

            #region 4. Validacion si el anuncio sigue disponible
            sScript = "CODE:TAG POS=1 TYPE=h2 ATTR=class:\"titleConfirmPayNotNeed\" EXTRACT=TXT" + Environment.NewLine;
            app.iimPlay(sScript);
            if (this.cleanString(app.iimGetLastExtract()) == "el anuncio que buscas no está en segundamano.es")
            {
                var disponible = context.Enlace_Hijo.SingleOrDefault(b => b.id_enlace_hijo == id_enlace_hijo);
                if (disponible != null)
                {
                    context.Entry(disponible).State = System.Data.Entity.EntityState.Modified;
                    disponible.scrapped_date        = DateTime.Now;
                    disponible.inactive_date        = DateTime.Now;
                    disponible.error_handler        = "OK";
                    context.SaveChanges();
                    Console.WriteLine(id_enlace_hijo + " -> el anuncio que buscas no está en segundamano.es");
                    return;
                }
            }
            #endregion

            #region EXTRACT -> Nombre del piso
            sScript = "CODE:TAG POS=1 TYPE=h1 ATTR=class:\"productTitle\" EXTRACT=TXT" + Environment.NewLine;
            app.iimPlay(sScript);
            try { Detalle.nombre = this.cleanString(app.iimGetLastExtract()); } catch { Detalle.nombre = null; }
            Console.WriteLine(id_enlace_hijo + " -> " + Detalle.nombre + ": DONE");
            #endregion

            #region EXTRACT -> Precio
            sScript = "CODE:TAG POS=1 TYPE=span ATTR=class:\"price\" EXTRACT=TXT" + Environment.NewLine;
            app.iimPlay(sScript);
            try { Detalle.precio = Convert.ToInt16(Regex.Replace(this.cleanString(app.iimGetLastExtract()), "[^0-9.]", "")); }catch { Detalle.precio = null; }
            #endregion

            #region EXTRACT -> Descripcion
            sScript = "CODE:TAG POS=1 TYPE=p ATTR=id:\"descriptionText\" EXTRACT=TXT" + Environment.NewLine;
            app.iimPlay(sScript);
            try { Detalle.descripcion = this.cleanString(app.iimGetLastExtract()); } catch { Detalle.descripcion = null; }
            #endregion

            #region EXTRACT -> Cuantidade de veces visto
            sScript = "CODE:TAG POS=1 TYPE=p ATTR=class:\"TimesSeen\" EXTRACT=TXT" + Environment.NewLine;
            app.iimPlay(sScript);
            try { Detalle.visitas = Convert.ToInt16(Regex.Replace(this.cleanString(app.iimGetLastExtract()), "[^0-9.]", "")); }catch { Detalle.visitas = null; }
            #endregion

            #region EXTRACT -> Nombre contacto
            sScript = "CODE:TAG POS=1 TYPE=span ATTR=class:\"Cname\" EXTRACT=TXT" + Environment.NewLine;
            app.iimPlay(sScript);
            try { Detalle.nombre_contacto = this.cleanString(app.iimGetLastExtract()); }catch { Detalle.nombre_contacto = null; }
            #endregion

            #region EXTRACT -> Tiene whatsapp
            sScript = "CODE:TAG POS=1 TYPE=div ATTR=class:\"whatsapp\" EXTRACT=TXT" + Environment.NewLine;
            app.iimPlay(sScript);
            try { Detalle.usuarioWhatsapp = this.cleanString(app.iimGetLastExtract()); } catch { Detalle.usuarioWhatsapp = null; }
            #endregion

            #region EXTRACT -> Bread crumbie con las categorias asociadas al piso - HTMLAGILEPACK
            try
            {
                sScript = "CODE:TAG POS=1 TYPE=p ATTR=class:\"breadcrumbs\" EXTRACT=HTM" + Environment.NewLine;
                app.iimPlay(sScript);
                sTxt = this.cleanString(app.iimGetLastExtract());

                //HTMLAGILEPACK para parsear html
                htmlDoc.LoadHtml(sTxt);
                var ahrefs = htmlDoc.DocumentNode.SelectNodes("//a");
                foreach (var input in ahrefs)
                {
                    //Console.WriteLine(input.InnerText);
                    Enlace_Hijo_Caracteristica Caracteristica = new Enlace_Hijo_Caracteristica();
                    Caracteristica.id_enlace_hijo          = id_enlace_hijo;
                    Caracteristica.caracteristica_validate = "CATEGORIA";
                    Caracteristica.tipo_validate           = 2;
                    Caracteristica.value   = input.InnerText;
                    Caracteristica.sysdate = DateTime.Now;
                    context.Enlace_Hijo_Caracteristica.Add(Caracteristica);
                }
                sTxt = "";
            }
            catch (Exception)
            {
                Console.WriteLine("Error BreadCrumbie:" + id_enlace_hijo);
            }
            #endregion

            #region EXTRACT -> Descripcion basica del piso - HTMLAGILEPACK
            try
            {
                sScript = "CODE:TAG POS=1 TYPE=dl ATTR=class:\"descriptionFeatures descriptionRight\" EXTRACT=HTM" + Environment.NewLine;
                app.iimPlay(sScript);
                sTxt = this.cleanString(app.iimGetLastExtract());

                //HTMLAGILEPACK para parsear html
                htmlDoc.LoadHtml(sTxt);

                List <string> listaDT = new List <string>();
                var           dts     = htmlDoc.DocumentNode.SelectNodes("//dt");
                foreach (var input in dts)
                {
                    listaDT.Add(input.InnerText);
                }

                List <string> listaDD = new List <string>();
                var           dds     = htmlDoc.DocumentNode.SelectNodes("//dd");
                foreach (var input in dds)
                {
                    String abc = String.Empty;
                    if (!input.Attributes.Contains(@"class"))
                    {
                        listaDD.Add(input.InnerText);
                    }
                }


                for (int i = 0; i < listaDT.Count; i++)
                {
                    Enlace_Hijo_Caracteristica Caracteristica = new Enlace_Hijo_Caracteristica();
                    Caracteristica.id_enlace_hijo          = id_enlace_hijo;
                    Caracteristica.caracteristica_validate = listaDT[i];
                    Caracteristica.tipo_validate           = 4;
                    Caracteristica.value   = listaDD[i];
                    Caracteristica.sysdate = DateTime.Now;
                    context.Enlace_Hijo_Caracteristica.Add(Caracteristica);
                }
                context.SaveChanges();
                sTxt = "";
            }
            catch (Exception)
            {
                Console.WriteLine("Error Descripcion basica:" + id_enlace_hijo);
            }

            #endregion

            #region EXTRACT -> Galeria de fotos do piso
            try
            {
                while (!bEndOfThumbs)
                {
                    sScript = "CODE:TAG POS=1 TYPE=li ATTR=id:\"thumb" + iThumbs + "\" EXTRACT=HTM" + Environment.NewLine;
                    app.iimPlay(sScript);
                    sTxt = app.iimGetLastExtract();
                    if ((sTxt.IndexOf("#EANF#") >= 0) || (sTxt.IndexOf("NODATA") >= 0))
                    {
                        bEndOfThumbs = true;
                    }
                    else
                    {
                        sTxt = sTxt.Replace("[EXTRACT]", "");
                        htmlDoc.LoadHtml(sTxt);

                        List <string> listaImages = new List <string>();
                        var           lis         = htmlDoc.DocumentNode.SelectNodes("//li");

                        Enlace_Hijo_Caracteristica Caracteristica = new Enlace_Hijo_Caracteristica();
                        foreach (var input in lis)
                        {
                            sTxt = input.Attributes["onclick"].Value;
                            sTxt = sTxt.Replace("show_image_detail(this.id,'", "");
                            sTxt = sTxt.Replace("');", "");

                            Caracteristica.id_enlace_hijo          = id_enlace_hijo;
                            Caracteristica.caracteristica_validate = "FOTO";
                            Caracteristica.tipo_validate           = 1;
                            Caracteristica.value   = sTxt;
                            Caracteristica.sysdate = DateTime.Now;
                        }
                        context.Enlace_Hijo_Caracteristica.Add(Caracteristica);
                        context.SaveChanges();
                    }
                    iThumbs++;
                }
                sTxt = "";
            }
            catch (Exception)
            {
                Console.WriteLine("Error Images:" + id_enlace_hijo);
            }
            #endregion

            #region EXTRACT -> Lista de caracteristicas
            while (!bEnfOfFeatures)
            {
                sScript = "CODE:TAG POS=" + iFeatures + " TYPE=span ATTR=class:\"extra_features_detail extra_features_detail_sel\" EXTRACT=TXT" + Environment.NewLine;
                app.iimPlay(sScript);
                sTxt = app.iimGetLastExtract();
                if (sTxt.IndexOf("#EANF#") >= 0)
                {
                    bEnfOfFeatures = true;
                }
                else
                {
                    sTxt = sTxt.Replace("[EXTRACT]", "");
                    Enlace_Hijo_Caracteristica Caracteristica = new Enlace_Hijo_Caracteristica();
                    Caracteristica.id_enlace_hijo          = id_enlace_hijo;
                    Caracteristica.caracteristica_validate = "UTILIDADE";
                    Caracteristica.tipo_validate           = 3;
                    Caracteristica.value   = sTxt;
                    Caracteristica.sysdate = DateTime.Now;
                    context.Enlace_Hijo_Caracteristica.Add(Caracteristica);
                }
                iFeatures++;
            }
            context.SaveChanges();
            #endregion

            #region EXTRACT -> Telefono
            sScript  = "";
            sScript  = "CODE: SET !USERAGENT \"Mozilla/5.0 (Linux; U; Android 2.3.3; de-ch; HTC Desire Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\"" + Environment.NewLine;
            sScript += "FILTER TYPE=IMAGES STATUS=ON " + Environment.NewLine;
            sScript += "URL GOTO=" + Hijo.url + Environment.NewLine;
            sScript += "WAIT SECONDS= 1" + Environment.NewLine;
            sScript += "TAG POS=1 TYPE=li ATTR=class:\"yellowButton adInfo_tel\" EXTRACT=TXT" + Environment.NewLine;
            sScript += "SET !USERAGENT \"\"" + Environment.NewLine;
            status   = app.iimPlay(sScript);
            if (status.ToString() != "sOk")
            {
                erroScrapearPropriedade(id_enlace_hijo, status.ToString());
                this.globalCount = 0;
                controlMemoriaImacros();
                return;
            }

            try { Detalle.telefono = this.cleanString(app.iimGetLastExtract()); }catch { Detalle.telefono = null; }
            #endregion

            #region 5. Lanzamos el proceso que valida las nuevas caracteristicas*/
            context.Database.ExecuteSqlCommand("SP_ENLACE_HIJO_CARACTERISTICA @id_enlace_hijo = {0}", id_enlace_hijo);
            #endregion

            #region 6. ################## Guardando nueva liena ####################
            Detalle.sysdate = DateTime.Now;
            context.Enlace_Hijo_Detalle.Add(Detalle);
            context.SaveChanges();

            /*Actualizando status de la linea de Enlace Hijo*/
            var result = context.Enlace_Hijo.SingleOrDefault(b => b.id_enlace_hijo == id_enlace_hijo);
            if (result != null)
            {
                context.Entry(result).State = System.Data.Entity.EntityState.Modified;
                result.scrapped_date        = DateTime.Now;
                result.error_handler        = "OK";
                context.SaveChanges();
            }
            #endregion
        }