Ejemplo n.º 1
0
        /*Inica o processamento do robot*/
        public static void Init()
        {
            RService.Log("(Init) " + Name + ": Começando o processamento... " + "at {0}", Path.GetTempPath() + Name + ".txt");

            try
            {
                AllLinks    = new List <string>();
                Orgao       = OrgaoController.FindById(27);
                Modalidades = new List <Modalidade>();
                Lote        = LoteController.CreateLote(43, 506);
                Repo        = new LicitacaoRepository();

                Modalidades.Add(ModalidadeController.FindById(24));
                Modalidades.Add(ModalidadeController.FindById(22));

                CurrentPage = 1;
                /*Pega o html da primeira página*/
                HtmlDocument pagehtml = WebHandle.GetHtmlHandleCaptcha(Constants.CMG_SITE + Constants.CMG_LINK_PAGINATION, Encoding.GetEncoding("ISO-8859-1"), "textoConfirmacao", Constants.CMG_CAPTCHA, GetParametersPagination(string.Format(Constants.CMG_PARAMETERS_PAGINATION, CurrentPage, DateTime.Now.Year)));

                /*Numero de paginas encontradas*/
                int numberPages = pagehtml.DocumentNode.Descendants("a").Where(x => x.Attributes.Contains("id") && x.Attributes["id"].Value.Contains("tabConsultaPregoes_pagina")).ToList().Count;
                /*Caso existam poucas licitações, ao ponto de só haver uma página, o robô estava retornando numberPages = 0. Com a limitação abaixo, ele sempre vai pegar as licitações independente do pouco número de licitações*/
                if (numberPages == 0)
                {
                    numberPages = 1;
                }

                /*Percorre todas as paginas*/
                while (pagehtml != null && CurrentPage <= numberPages)
                {
                    /*Pega todas os pregões de cada página*/
                    GetPregoes(pagehtml);
                    /*Numero da próxima pagina*/
                    CurrentPage++;
                    /*Pega o html da próxima página*/
                    pagehtml = WebHandle.GetHtmlHandleCaptcha(Constants.CMG_SITE + Constants.CMG_LINK_PAGINATION, Encoding.GetEncoding("ISO-8859-1"), "textoConfirmacao", Constants.CMG_CAPTCHA, GetParametersPagination(string.Format(Constants.CMG_PARAMETERS_PAGINATION, CurrentPage, DateTime.Now.ToString("yyyy"))));
                    NumCaptcha++;
                }

                if (Directory.Exists(PathEditais))
                {
                    Directory.Delete(PathEditais, true);
                }
            }
            catch (Exception e)
            {
                RService.Log("Exception (Init)" + Name + ":" + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", Path.GetTempPath() + Name + ".txt");
            }
            finally
            {
                if (NumLicitacoes <= 0)
                {
                    LoteController.Delete(Lote);
                }
            }
        }
Ejemplo n.º 2
0
        /*Inicia o processamento do robot*/
        private static void Init()
        {
            RService.Log("(Init) " + Name + ": Começando o processamento.. " + "at {0}", Path.GetTempPath() + Name + ".txt");
            try
            {
                ModalidadeCount = 0;

                Modalidades = new List <Modalidade>();
                Modalidades.Add(ModalidadeController.FindById(1));
                Modalidades.Add(ModalidadeController.FindById(14));
                Orgao = OrgaoController.FindById(388);
                Lote  = LoteController.CreateLote(43, 507);

                /*Lista das licitacoes que já existem para bec.sp.gov*/
                //AlreadyInserted = LicitacaoController.GetAlreadyInserted(Constants.BEC_SITE);

                /*Lista das cidades para o estado*/
                Cidades = CidadeController.GetNameToCidade(Constants.BEC_UF);

                //Define os pontos de partida
                List <string> urls = new List <string>();

                urls.Add(Constants.BEC_LINK_MODALIDADE_2);
                urls.Add(Constants.BEC_LINK_MODALIDADE_5);

                /*Percorre cada modalidade. Como o portal BEC usa javascript para gerar as licitações, foi preciso
                 * criar dois caminhos, uma para cada modalidade: para Carta Convite, usa-se o HtmlAgilityPack e
                 * para Dispensa de Licitação, usa-se o Selenium (PhantomJS), que consegue lidar com javascript*/
                foreach (string uri in urls)
                {
                    if (!uri.Contains("Dispensa"))
                    {
                        GetConvites(uri);
                    }
                    else
                    {
                        GetDispensas(uri);
                    }
                }

                if (Directory.Exists(PathEdital))
                {
                    Directory.Delete(PathEdital, true);
                }
            }
            catch (Exception e)
            {
                RService.Log("Exception (Init)" + Name + ":" + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", Path.GetTempPath() + Name + ".txt");
            }
            finally
            {
                if (NumLicitacoes <= 0)
                {
                    LoteController.Delete(Lote);
                }

                if (web != null)
                {
                    web.Close();
                }
            }
        }
Ejemplo n.º 3
0
        /*Criando a licitação com as informações da página*/
        private static Licitacao CreateLicitacao(string numUf)
        {
            RService.Log("(CreateLicitacao) " + Name + ": Criando licitação... " + numUf.Split(':')[0] + " at {0}", Path.GetTempPath() + Name + ".txt");

            Licitacao licitacao = new Licitacao();

            try
            {
                if (web != null)
                {
                    web.Quit();
                }

                var driver = ChromeDriverService.CreateDefaultService();
                driver.HideCommandPromptWindow = true;
                var op = new ChromeOptions();
                op.AddUserProfilePreference("download.default_directory", PathEditais);
                web = new ChromeDriver(driver, new ChromeOptions(), TimeSpan.FromSeconds(300));
                web.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(300);
                wait = new WebDriverWait(web, TimeSpan.FromSeconds(300));


                web.Navigate().GoToUrl(Constants.BB_HOST);
                web.Navigate().GoToUrl(string.Format(Constants.BB_LINK_LICITACAO, numUf.Split(':')[0]));
                Thread.Sleep(2000);

                HandleReCaptcha();

                MatchCollection helper;
                licitacao.IdLicitacaoFonte = long.Parse(numUf.Split(':')[0]);
                licitacao.EstadoFonte      = numUf.Split(':')[1];

                licitacao.Lote       = Lote;
                licitacao.LinkSite   = Constants.BB_HOST;
                licitacao.LinkEdital = string.Format(Constants.BB_LINK_LICITACAO, numUf.Split(':')[0]);
                licitacao.IdFonte    = IdFonte;
                licitacao.Excluido   = 0;
                licitacao.SegmentoAguardandoEdital = 0;
                licitacao.DigitacaoUsuario         = 43; //Robo

                licitacao.Estado = numUf.Split(':')[1];

                IWebElement div       = web.FindElement(By.Id("conteudo"));
                string      innerHtml = Regex.Replace(HttpUtility.HtmlDecode(div.GetAttribute("innerHTML")).Trim(), @"\s+", " ");

                helper           = StringHandle.GetMatches(innerHtml, "(?i)>\\s{0,1}Resumo da licit.*?\">(.*?)</div>");
                licitacao.Objeto = helper != null ? helper[0].Groups[1].Value.Trim() : null;

                helper        = StringHandle.GetMatches(innerHtml, "(?i)>\\s{0,1}Edital.*?\">(.*?)</div>");
                licitacao.Num = helper != null ? helper[0].Groups[1].Value.Trim() : null;

                helper             = StringHandle.GetMatches(innerHtml, "(?i)>\\s{0,1}Processo.*?\">(.*?)</div>");
                licitacao.Processo = helper != null ? helper[0].Groups[1].Value.Trim() : null;

                helper = StringHandle.GetMatches(innerHtml, "(?i)>\\s{0,1}Modalidade/tipo.*?\">(.*?)</div>");
                string modalidade = StringHandle.RemoveAccent(innerHtml != null ? helper[0].Groups[1].Value.Trim() : "").ToUpper();
                if (modalidade == "LRE")
                {
                    modalidade = "Licitacao";
                }

                licitacao.Modalidade = NameToModalidade.ContainsKey(modalidade.ToUpper()) ? NameToModalidade[modalidade.ToUpper()] : null;
                if (licitacao.Modalidade.Modalidades == "Pregão")
                {
                    licitacao.Modalidade.Modalidades = "Pregão Eletrônico";
                    licitacao.Modalidade.Id          = 24;
                }

                helper             = StringHandle.GetMatches(innerHtml, "(?i)>\\s{0,1}Situa.*?o da licita.*?o.*?\">(.*?)</div>");
                licitacao.Situacao = helper != null ? helper[0].Groups[1].Value.Trim() : null;

                helper = StringHandle.GetMatches(innerHtml, "(?i)>\\s{0,1}Abertura das propostas.*?\">(.*?)</div>");
                licitacao.AberturaData = DateHandle.Parse(helper != null ? helper[0].Groups[1].Value.Trim() : null, "dd/MM/yyyy-hh:mm");

                helper = StringHandle.GetMatches(innerHtml, "(?i)>\\s{0,1}Início acolhimento de propostas.*?\">(.*?)</div>");
                licitacao.EntregaData = DateHandle.Parse(helper != null ? helper[0].Groups[1].Value.Trim() : null, "dd/MM/yyyy-hh:mm");

                helper = StringHandle.GetMatches(innerHtml, "(?i)>\\s{0,1}Cliente.*?\">(.*?)</div>");
                string orgaoDepartamento = helper != null ? helper[0].Groups[1].Value.Trim() : null;

                helper = StringHandle.GetMatches(orgaoDepartamento, "/(.*)");
                licitacao.Departamento = helper != null ? helper[0].Groups[1].Value.Trim() : null;

                helper = StringHandle.GetMatches(orgaoDepartamento, "(.*?)/");
                string orgao = helper != null ? helper[0].Groups[1].Value.Trim() : null;

                if (orgao != null)
                {
                    licitacao.Orgao = OrgaoController.GetOrgaoByNameAndUf(orgao.Trim().ToUpper() + ":" + numUf.Split(':')[1].Trim().ToUpper(), NameToOrgao);
                }
                else
                {
                    licitacao.Orgao = OrgaoController.FindById(390);//NÃO ESPECIFICADO
                }

                HandleCidade(licitacao, orgao);
            }
            catch (Exception e)
            {
                RService.Log("Exception (CreateLicitacao) " + Name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", Path.GetTempPath() + Name + ".txt");
            }
            finally
            {
                if (web != null)
                {
                    web.Close();
                }
            }

            return(LicitacaoController.IsValid(licitacao, out mensagemErro) ? licitacao : null);
        }
Ejemplo n.º 4
0
        /*Inicia o processamento do robot*/
        private static void Init()
        {
            RService.Log("(Init) " + Name + ": Começando o processamento.. " + "at {0}", Path.GetTempPath() + Name + ".txt");
            try
            {
                AlreadyColected = new HashSet <long>();

                /*Lista das licitacoes que já existem para bec.sp.gov*/
                //AlreadyInserted = LicitacaoController.GetAlreadyInserted(Constants.BEC_SITE);

                /*Lista das cidades para o estado*/
                Cidades = CidadeController.GetNameToCidade(Constants.BEC_UF);

                Modalidade = ModalidadeController.FindById(24);
                Orgao      = OrgaoController.FindById(388);
                Lote       = LoteController.CreateLote(43, 507);
                Repo       = new LicitacaoRepository();

                //Define os pontos de partida, uri e argumentos do post
                List <string> urls = new List <string>();

                urls.Add(Constants.BEC_LINK_MODALIDADE_71);
                urls.Add(Constants.BEC_LINK_MODALIDADE_72);

                /*Percorre cada modalidade*/
                foreach (string uri in urls)
                {
                    /*Lista dos parametros do post*/
                    NameValueCollection post = new NameValueCollection();

                    /*Percorre as naturezas de cada modalidade*/
                    foreach (var attr in WebHandle.GetHtmlDocOfPage(uri, post).DocumentNode.Descendants("span").Where(x => x.Attributes.Contains("id") &&
                                                                                                                      x.Attributes["id"].Value.ToString().Contains(Constants.BEC_ID_NATUREZA)))
                    {
                        string urin = attr.SelectSingleNode("a").Attributes["href"].Value.ToString();

                        int page = 2, count = 20;

                        /*Percorre as páginas para cada uma das naturezas (ex: 1;2;3)*/
                        HtmlDocument pagehtml = WebHandle.GetHtmlDocOfPage(urin, post);
                        while (pagehtml != null && count == 20)
                        {
                            RService.Log("(GetOC) " + Name + ": Percorrendo os links da página.. " + (page - 1) + " at {0}", Path.GetTempPath() + Name + ".txt");

                            //Pega as licitações de cada página (OC's)
                            count = GetOC(pagehtml);
                            //Pega o html da próxima página
                            pagehtml = WebHandle.GetHtmlDocOfPage(urin, GetFormParameters(pagehtml, page));
                            //Numero da proxima página
                            page++;
                        }
                    }
                }
            }
            catch (Exception e)
            {
                RService.Log("Exception (Init) " + Name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", Path.GetTempPath() + Name + ".txt");
            }
            finally
            {
                if (NumLicitacoes <= 0)
                {
                    LoteController.Delete(Lote);
                }
            }
        }