public static void BaixarRelatorios(Cliente xCliente, IEnumerable <Relatorio> xRelatorioLista) { bool ErrorDownload = false; foreach (var relatorio in xRelatorioLista.Where(relatorio => relatorio.AtivoRelatorio)) { var optionsChr = new ChromeOptions(); // Roda sem o browser //optionsChr.AddArgument("--headless"); optionsChr.AddArgument("--ignore-certificate-errors"); optionsChr.AddArgument("--ignore-ssl-errors"); // Inicializa o Chrome Driver using (var driver = new ChromeDriver(optionsChr)) { try { if (Ferramentas.LogarSistema(driver, xCliente)) { driver.Navigate().GoToUrl(Settings.Default.Relatorios + relatorio.NumeroRelatorio); driver.Navigate().Refresh(); Thread.Sleep(5000); // Fecha o Popup if (Ferramentas.ValidarElementoSeExiste(driver, "ilabspush-btn-close", "ClassName")) { driver.FindElementByClassName("ilabspush-btn-close").Click(); } Ferramentas.LimparPastaDownload(Settings.Default.Download, relatorio.NomeArquivoRelatorio); var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20)); // Setar a data var inputDateIn = wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable( driver.FindElementByName("inicio"))); inputDateIn.Clear(); var dataInicial = new DateTime(2018, 1, 1); //inputDateIn.SendKeys(dataInicial.ToString(" 01012018")); inputDateIn.SendKeys(xCliente.DataInicioRelatorio.Trim().Length == 7 ? dataInicial.ToString(" 0" + xCliente.DataInicioRelatorio) : dataInicial.ToString(" " + xCliente.DataInicioRelatorio)); Thread.Sleep(1000); var inputDateEnd = driver.FindElementByName("fim"); inputDateEnd.Clear(); inputDateEnd.SendKeys(""); inputDateEnd.SendKeys("31"); inputDateEnd.SendKeys("12"); inputDateEnd.SendKeys(DateTime.Now.ToString("yyyy")); Thread.Sleep(1000); var searchDateButton = driver.FindElementByXPath($"//*[@id='variaveis']/div[1]/span[{relatorio.NumeroSpan}]/a"); searchDateButton?.Click(); var waitTable = new WebDriverWait(driver, TimeSpan.FromSeconds(120)); waitTable.Until( SeleniumExtras.WaitHelpers.ExpectedConditions.VisibilityOfAllElementsLocatedBy( By.ClassName("sorting_1"))); Thread.Sleep(10000); // Baixar Relatorio var excelButton = driver.FindElementByClassName("buttons-html5"); excelButton.Click(); Thread.Sleep(5000); // Move o relatório baixado para a pasta do respectivo cliente Ferramentas.MoverRelatorioPasta(Settings.Default.CaminhoDestinoRelatorios, xCliente.NomeCliente, relatorio.NomeArquivoRelatorio, relatorio.NumeroRelatorio); // Atualiza data da ultima execução com sucesso do cliente e valida se quem chamou foi a rotina de erros if (!ErrorDownload) { ServiceCliente.AtualizarCliente(xCliente.NomeCliente, false, true, false); } } else { throw new ArgumentException("Erro ao logar usuário."); } } catch (Exception ex) { ServiceCliente.AtualizarCliente(xCliente.NomeCliente, true, true, false); Ferramentas.GravarLog("BaixarRelatorios - " + relatorio.NumeroRelatorio + " / Cliente: " + xCliente.NomeCliente, ex); ErrorDownload = true; } finally { driver.Close(); driver.Quit(); } } } }
public static void BaixarFinanceiros(Cliente xCliente, IEnumerable <Financeiro> xFinanceiroLista) { bool ErrorDownload = false; foreach (var financeiro in xFinanceiroLista.Where(financeiro => financeiro.AtivoFinanceiro)) { var optionsChr = new ChromeOptions(); optionsChr.AddArgument("--ignore-certificate-errors"); optionsChr.AddArgument("--ignore-ssl-errors"); // Inicializa o Chrome Driver using (var driver = new ChromeDriver(optionsChr)) { try { if (Ferramentas.LogarSistema(driver, xCliente)) { driver.Navigate().GoToUrl(Settings.Default.Financeiro); driver.Navigate().Refresh(); Thread.Sleep(5000); // Fecha o Popup if (Ferramentas.ValidarElementoSeExiste(driver, "ilabspush-btn-close", "ClassName")) { driver.FindElementByClassName("ilabspush-btn-close").Click(); } Ferramentas.LimparPastaDownload(Settings.Default.Download, financeiro.NomeArquivo); var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20)); // Setar a aba do financeiro var tabFinan = driver.FindElementById("extrato"); switch (financeiro.NomeFinanceiro.ToUpper()) { case "EXTRATO": tabFinan = driver.FindElementById("extrato"); break; case "DESPESAS": tabFinan = driver.FindElementById("contasApagar"); break; case "RECEITAS": tabFinan = driver.FindElementById("contasAreceber"); break; } // As vezes aparece um popup em cima do elemento e com isso é necessário forçar uma execução em JS. driver.ExecuteJavaScript("arguments[0].click();", tabFinan); // Setar a data var inputDateIn = wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable( driver.FindElementById("dataini"))); inputDateIn.Click(); inputDateIn.Clear(); var dataInitial = new DateTime(2018, 1, 1); var dateInitialUser = (xCliente.DataInicioFinanceiro.Trim().Length == 7 ? dataInitial.ToString("0" + xCliente.DataInicioFinanceiro) : dataInitial.ToString(xCliente.DataInicioFinanceiro)); // O site valida se a data inicial e a data final tem mais de 365 dias de <>, caso tenha eu tiro 365 da data atual e não pego a data do usuário inputDateIn.SendKeys(Ferramentas.ValidarMaior365Dias( int.Parse(dateInitialUser.Substring(0, 2)), int.Parse(dateInitialUser.Substring(2, 2)), int.Parse(dateInitialUser.Substring(4, 4))) ? (DateTime.Now.AddDays(-365)).ToString(" ddMMyyyy") : dateInitialUser); Thread.Sleep(1000); // Setar Contas Bancarias switch (financeiro.ContasBancarias.ToUpper()) { case "TODOS": driver.FindElementByXPath("//*[@id='conta_bancaria']/option[1]").Click(); break; case "CAIXA": driver.FindElementByXPath("//*[@id='conta_bancaria']/option[2]").Click(); break; case "AVECPASS": // Caso não tenha esta opção, vai para o próximo. if (Ferramentas.ValidarElementoSeExiste(driver, "//*[@id='conta_bancaria']/option[3]", "XPath")) { driver.FindElementByXPath("//*[@id='conta_bancaria']/option[3]").Click(); } else { continue; } break; } // Setar tipo de conta switch (financeiro.TipoData.ToUpper()) { case "QUITAÇÃO": driver.FindElementByXPath("//*[@id='campoRefinarBusca']/label[4]/select/option[1]") .Click(); break; case "COMPETÊNCIA": driver.FindElementByXPath("//*[@id='campoRefinarBusca']/label[4]/select/option[2]") .Click(); break; case "VENCIMENTO": driver.FindElementByXPath("//*[@id='campoRefinarBusca']/label[4]/select/option[3]") .Click(); break; } // Selecionar Bruto/Líquido switch (financeiro.TipoValor.ToUpper()) { case "BRUTO": driver.FindElementByXPath("//*[@id='campoRefinarBusca']/label[7]/label[1]").Click(); break; case "LÍQUIDO": driver.FindElementByXPath("//*[@id='campoRefinarBusca']/label[7]/label[2]").Click(); break; } // Executar a busca driver.FindElementByXPath("//*[@id='divExtrato']/form/div[2]/a").Click(); var waitTable = new WebDriverWait(driver, TimeSpan.FromSeconds(120)); waitTable.Until( SeleniumExtras.WaitHelpers.ExpectedConditions.VisibilityOfAllElementsLocatedBy( By.ClassName("sorting_1"))); Thread.Sleep(10000); // Baixar Relatorio driver.FindElementByClassName("buttons-html5").Click(); Thread.Sleep(5000); // Move o relatório baixado para a pasta do respectivo cliente Ferramentas.MoverFinanceiroPasta(Settings.Default.CaminhoDestinoFinanceiros, xCliente.NomeCliente, financeiro.NomeArquivo, financeiro.NomeFinanceiro, financeiro.ContasBancarias, financeiro.TipoData, financeiro.TipoValor); // Atualiza data da ultima execução com sucesso do cliente e valida se quem chamou foi a rotina de erros if (!ErrorDownload) { ServiceCliente.AtualizarCliente(xCliente.NomeCliente, false, false, true); } } else { throw new ArgumentException("Erro ao logar usuário."); } } catch (Exception ex) { ServiceCliente.AtualizarCliente(xCliente.NomeCliente, true, false, true); Ferramentas.GravarLog("BaixarFinanceiros - " + financeiro.NomeArquivo + " / Cliente: " + xCliente.NomeCliente, ex); ErrorDownload = true; } finally { driver.Close(); driver.Quit(); } } } }