コード例 #1
0
        /// <summary>
        /// Scrapea todas las monedas y las retorna como lista
        /// </summary>
        /// <param name="lista"></param>
        /// <returns></returns>
        public static List <Entidades.Moneda> scrapMonedas(List <Entidades.Moneda> lista)
        {
            #region Iniciar driver
            IWebDriver driver = null;
            while (!success & retry > 0)
            {
                try
                {
                    driver = global::General.SeleniumUtility.iniciarDriver(driver, "firefox");
                    driver.Navigate().GoToUrl("http://www.dolarhoy.com");
                    success = true;
                }
                catch (Exception e)
                {
                    Console.WriteLine("MONEDA: Error al iniciar el driver");
                    retry--;
                }
            }
            #endregion

            driver.FindElement(By.XPath("//*[@id='table2']/tbody/tr[2]/td[1]/font/span/a")).Click();
            Entidades.Moneda dolar = new Entidades.Moneda();
            dolar = Dolar.scrapDolar(driver, dolar);

            lista.Add(dolar);

            lista = General.scrapMonedas(driver, lista);

            driver.Quit();

            return(lista);
        }
コード例 #2
0
        /// <summary>
        /// Scrapea los datos de Dólar
        /// </summary>
        /// <param name="driver"></param>
        public static Entidades.Moneda scrapDolar(IWebDriver driver, Entidades.Moneda moneda)
        {
            moneda.id      = 1; // DANJO...
            moneda.nombre  = "dolar estadounidense";
            moneda.simbolo = "U$S";
            moneda.cod_iso = "USD";

            string fecha_actualizacion = driver.FindElement(By.XPath("/html/body/div[12]/center/table/tbody/tr[1]/td[2]/table/tbody/tr[1]/td/font/b")).Text;

            moneda.dateUpdate = Convert.ToDateTime(fecha_actualizacion.Substring(fecha_actualizacion.IndexOf("/") - 3));

            moneda.timeUpdate = TimeSpan.Parse(fecha_actualizacion.Substring(fecha_actualizacion.IndexOf("$") + 1, fecha_actualizacion.Length - fecha_actualizacion.IndexOf("HS.") - 6));
            moneda.dateUpdate.Add(moneda.timeUpdate);

            // precios
            int cantidadPrecios = driver.FindElements(By.XPath("//*[@id='table2']/tbody/tr")).Count;
            int id = 1;

            for (int i = 1; i <= cantidadPrecios; i++)
            {
                Entidades.Precio precio = new Entidades.Precio();
                precio = scrapPrecio(driver, precio, i);
                if (precio != null)
                {
                    precio.id = id;
                    id++;
                    moneda.listaPrecios.Add(precio);
                }
            }

            // precio promedio
            Entidades.Precio promedio = new Entidades.Precio();
            promedio.id = id;
            id++;
            promedio.tipo   = "promedio";
            promedio.compra = Convert.ToDouble(driver.FindElement(By.XPath("//*[@id='AutoNumber1']/tbody/tr[1]/td[2]/table/tbody/tr[4]/td[2]/b/font")).Text.Replace(".", ","));
            promedio.venta  = Convert.ToDouble(driver.FindElement(By.XPath("//*[@id='AutoNumber1']/tbody/tr[1]/td[2]/table/tbody/tr[4]/td[3]/b/font")).Text.Replace(".", ","));
            moneda.listaPrecios.Add(promedio);

            // mejores precios
            Entidades.Precio mejores = new Entidades.Precio();
            mejores.id     = id;
            mejores.tipo   = "mejores";
            mejores.compra = Convert.ToDouble(driver.FindElement(By.XPath("//*[@id='AutoNumber1']/tbody/tr[1]/td[2]/table/tbody/tr[4]/td[5]/b/font")).Text.Replace(".", ","));
            mejores.venta  = Convert.ToDouble(driver.FindElement(By.XPath("//*[@id='AutoNumber1']/tbody/tr[1]/td[2]/table/tbody/tr[4]/td[6]/b/font")).Text.Replace(".", ","));
            moneda.listaPrecios.Add(mejores);

            //var json = new JavaScriptSerializer().Serialize(moneda);
            //System.IO.File.WriteAllText(@"C:\Users\jonat\Desktop\PROYECTOS\scrapCampo\scrapCampo\dolar.json", json);

            return(moneda);
        }
コード例 #3
0
        /// <summary>
        /// Scrapea el resto de las monedas que no es dólar
        /// </summary>
        /// <param name="driver"></param>
        /// <param name="lista"></param>
        /// <returns></returns>
        public static List <Entidades.Moneda> scrapMonedas(IWebDriver driver, List <Entidades.Moneda> lista)
        {
            int id = 2;
            IList <IWebElement> monedasweb = driver.FindElements(By.XPath("//html//div/table/tbody"));

            foreach (IWebElement monedaweb in monedasweb)
            {
                Entidades.Moneda moneda = new Entidades.Moneda();
                moneda.id = id;
                string textomoneda = "";
                try
                {
                    textomoneda = monedaweb.FindElement(By.XPath(".//tr/td/font/b")).Text.Trim();
                }
                catch (Exception)
                {
                    // si no es una moneda y es algun otro cuadro que ande por ahi lo salteo
                    continue;
                }


                moneda.nombre = parseNombre(textomoneda);
                if (moneda.nombre == "")
                {
                    continue;
                }

                List <string> codigos = getSimbolo(moneda.nombre);
                moneda.simbolo = codigos[0];
                moneda.cod_iso = codigos[1];

                moneda.dateUpdate = parseDate(textomoneda);

                IList <IWebElement> preciosweb = monedaweb.FindElements(By.XPath(".//tr"));
                for (int z = 4; z <= preciosweb.Count; z++)
                {
                    IWebElement      precioweb = preciosweb[z - 1];
                    Entidades.Precio precio    = new Entidades.Precio();
                    precio.id = 1;
                    try
                    {
                        precio.tipo = precioweb.FindElement(By.XPath(".//td[1]")).Text;
                    }
                    catch (Exception)
                    {
                        try
                        {
                            precio.tipo = precioweb.FindElement(By.XPath(".//td[1]/font")).Text;
                        }
                        catch (Exception)
                        {
                            precio.tipo = "";
                        }
                    }

                    if (precio.tipo == "" || precio.tipo == " ")
                    {
                        continue;
                    }
                    else if (precio.tipo.ToUpper().Contains("PROMEDIO") || precio.tipo.ToUpper().Contains("PROM."))
                    {
                        precio.tipo = "promedio";
                    }
                    else if (precio.tipo.ToUpper().Contains("MEJORES"))
                    {
                        precio.tipo = "mejores";
                    }

                    try
                    {
                        precio.compra = Convert.ToDouble(precioweb.FindElement(By.XPath(".//td[2]/b/font")).Text.Replace(".", ","));
                        precio.venta  = Convert.ToDouble(precioweb.FindElement(By.XPath(".//td[3]/b/font")).Text.Replace(".", ","));
                    }
                    catch (Exception)
                    {
                        continue;
                    }

                    moneda.listaPrecios.Add(precio);
                }

                id++;
                lista.Add(moneda);
            }

            return(lista);
        }