/// <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); }
/// <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); }
/// <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); }