def obterPrecos(driver): # site = 'http://*****:*****@id="tab-produto"]/div/h4[{num}]'): titulo = driver.find_element_by_xpath( f'//*[@id="tab-produto"]/div/h4[{num}]').text validade = driver.find_element_by_xpath( f'//*[@id="tab-produto"]/div/p[{num}]').text print(f"\nLendo {num}") print(titulo) print(validade) min_vidas = None max_vidas = None titulo = str(titulo).upper() if re.search('03 A 09 VIDAS', titulo): min_vidas = 0 max_vidas = 9 elif re.search('10 A 19 VIDAS', titulo): min_vidas = 10 max_vidas = 19 elif re.search('20 A 29 VIDAS', titulo): min_vidas = 20 max_vidas = 29 elif re.search('30 A 99 VIDAS', titulo): min_vidas = 30 max_vidas = 99 id_coparticipacao = None if re.search('SEM COPART', titulo): id_coparticipacao = 2 elif re.search('COM 20% DE COPART', titulo): id_coparticipacao = 3 elif re.search('COM 30% DE COPART', titulo): id_coparticipacao = 5 planos = driver.find_element_by_xpath( f'//*[@id="tab-produto"]/div/table[{num}]/thead' ).find_elements_by_tag_name('th') planosArray = [] for plano in planos: planosArray.append(plano.text) # del(planosArray[0]) print(planosArray) for i, plano in enumerate(planosArray): # print("num",i) precos = [] for j in range(10): if i > 0: preco = driver.find_element_by_xpath( f'//*[@id="tab-produto"]/div/table[{num}]/tbody/tr[{j+1}]/td[{i+1}]' ).text precos.append( float( str(preco).replace(".", "").replace(",", "."))) if i > 0: print(precos) nomePlano = str(plano).split('[') plano = nomePlano[0].strip().upper() modalidade = nomePlano[1].split(']')[0].strip() id_modalidade = 0 if modalidade == "E": id_modalidade = 1 elif modalidade == "A": id_modalidade = 2 conn = conexao.myConexao() cursor = conn.cursor() if plano == 'OURO MAIS': plano = 'OURO MAIS Q' sql = f"SELECT * FROM tbl_tipo_plano where titulo like '{plano}' and id_operadora = 11;" print(sql) res = cursor.execute(sql) # print(res) if res == 1: result_select = cursor.fetchall()[0] print(result_select) id_plano = result_select[0] id_categoria_plano = result_select[3] id_operadora = 11 id_tipo_contratacao = 2 qtd_titulares = 1 hospitalar = 1 id_tipo_empresa = 2 id_administradora = 0 data_reajuste = '2021-06-01' id_tipo_contratacao_lead = 0 id_tipo_tabela = None print("id_area => ", id_area) print("id_categoria_plano => ", id_categoria_plano) print("id_coparticipacao => ", id_coparticipacao) print("id_modalidade => ", id_modalidade) print("id_operadora => ", id_operadora) print("id_tipo_contratacao => ", id_tipo_contratacao) print("id_plano => ", id_plano) print("preco0_18 => ", precos[0]) print("preco_m59 => ", precos[9]) print("qtd_titulares => ", qtd_titulares) print("hospitalar => ", hospitalar) print("min_vidas => ", min_vidas) print("max_vidas => ", max_vidas) print("id_tipo_empresa => ", id_tipo_empresa) print("id_administradora => ", id_administradora) print("data_reajuste => ", data_reajuste) print("id_tipo_contratacao_lead => ", id_tipo_contratacao_lead) print("id_tipo_tabela => ", id_tipo_tabela) sql = "insert into tbl_preco_faixa_etaria (" \ "id_area, " \ "id_categoria_plano, " \ "id_coparticipacao, " \ "id_modalidade, " \ "id_operadora, " \ "id_tipo_contratacao, " \ "id_tipo_plano, " \ "preco0_18, " \ "preco19_23, " \ "preco24_28, " \ "preco29_33, " \ "preco34_38, " \ "preco39_43, " \ "preco44_48, " \ "preco49_53, " \ "preco54_58, " \ "preco_m59, " \ "qtd_titulares, " \ "id_sindicato, " \ "hospitalar, " \ "min_vidas, " \ "max_vidas, " \ "id_tipo_empresa, " \ "id_administradora, " \ "ultimo_reajuste, " \ "id_tipo_contratacao_lead, " \ "id_tipo_tabela ) " \ "values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s);" values = ( id_area, # id_area id_categoria_plano, # id_categoria_plano id_coparticipacao, # id_coparticipacao id_modalidade, # id_modalidade, id_operadora, # id_operadora id_tipo_contratacao, # id_tipo_contratacao id_plano, # id_tipo_plano precos[0], # preco0_18 precos[1], # precos[2], precos[3], precos[4], precos[5], precos[6], precos[7], precos[8], precos[9], # preco_m59 qtd_titulares, # qtd_titulares None, # id_sindicato hospitalar, # hospitalar min_vidas, # min_vidas max_vidas, # max_vidas id_tipo_empresa, # id_tipo_empresa id_administradora, # id_administradora data_reajuste, # ultimo_reajuste id_tipo_contratacao_lead, # id_tipo_contratacao_lead id_tipo_tabela # id_tipo_tabela ) # print(values) teste = "select * from tbl_preco_faixa_etaria " \ f"where id_area = {id_area} and id_operadora = {id_operadora} and id_tipo_plano = {id_plano} and id_modalidade = {id_modalidade} " \ f"and id_tipo_contratacao = {id_tipo_contratacao} and id_coparticipacao = {id_coparticipacao} and qtd_titulares = {qtd_titulares} " \ f"and min_vidas = {min_vidas} and id_sindicato is null and id_tipo_empresa = {id_tipo_empresa} and hospitalar = {hospitalar};" print(teste) res = cursor.execute(teste) print(res) print(values, " -- extraidos do simulador") if res == 1: select = cursor.fetchall()[0] id = select[0] preco0_18 = select[8] preco59 = select[17] ultimo_reajuste = select[25] print(select[1:28], f"ID: {id} -- banco de dados") if not preco0_18 == precos[ 0] or not preco59 == precos[ 9]: # and not ultimo_reajuste == data_reajuste print("Atualizar Precos! -----") planos_atualizados.append(plano) if ultimo_reajuste == None: ultimo_reajuste = "null" else: ultimo_reajuste = datetime.strptime( str(ultimo_reajuste), '%Y-%m-%d').date() print(ultimo_reajuste) update = "UPDATE `tbl_preco_faixa_etaria` SET " \ f"`preco0_18`='{precos[0]}', " \ f"`preco19_23`='{precos[1]}', " \ f"`preco24_28`='{precos[2]}', " \ f"`preco29_33`='{precos[3]}', " \ f"`preco34_38`='{precos[4]}', " \ f"`preco39_43`='{precos[5]}', " \ f"`preco44_48`='{precos[6]}', " \ f"`preco49_53`='{precos[7]}', " \ f"`preco54_58`='{precos[8]}', " \ f"`preco_m59`='{precos[9]}'," \ f"`min_vidas`='{min_vidas}', " \ f"`max_vidas`='{max_vidas}', " \ f"`status`='1', " \ f"`ultimo_reajuste`='{data_reajuste}' " \ f"WHERE `id`='{id}';" print(update) if salvar: res = cursor.execute(update) else: res = 1 if res == 1: if ultimo_reajuste == None or ultimo_reajuste == "null": insert = "insert into tbl_historico_precos_planos " \ "(id_preco_faixa_etaria, preco0_18, preco19_23, preco24_28, preco29_33, preco34_38, preco39_43, preco44_48, preco49_53, preco54_58, preco_m59 ) " \ "values " \ f"({id}, {select[8]}, {select[9]}, {select[10]}, {select[11]}, {select[12]}, {select[13]}, {select[14]}, {select[15]}, {select[16]}, {select[17]}); " else: insert = "insert into tbl_historico_precos_planos " \ "(id_preco_faixa_etaria, preco0_18, preco19_23, preco24_28, preco29_33, preco34_38, preco39_43, preco44_48, preco49_53, preco54_58, preco_m59, data_validade) " \ "values " \ f"({id}, {select[8]}, {select[9]}, {select[10]}, {select[11]}, {select[12]}, {select[13]}, {select[14]}, {select[15]}, {select[16]}, {select[17]}, '{ultimo_reajuste}'); " print(insert) if salvar: res = cursor.execute(insert) print(res, "sucesso") elif res == 0: print( "----------------------------- Cadastrar Novo --------------------------------" ) print(f'{sql} {values}') ref_plano = True for plan in planos_inseridos: if plan == plano: ref_plano = False if ref_plano: planos_inseridos.append(f"{plano}") if salvar: if not insertDados(sql, values): print( "ERROR: erro ao inserir precos no banco de dados!" ) else: inseridos += 1 elif res > 1: print("Mais de um plano cadastrado") # Colocar em uma lista os planos nao encontrados elif res == 0: print("Nao achou o plano!") ref_plano = True for plan in planos_sem_cadastros: if plan == plano: ref_plano = False if ref_plano: planos_sem_cadastros.append(f"{plano}") elif res > 1: print("Achou mais de um plano!") cursor.close() conn.commit() conn.close() num += 1 except: print("Acabou") pass finally: pass print(f"Total de preços de planos atualizados: {inseridos}") print(f"Planos que nao foram encontrados: \n {planos_sem_cadastros}") print(f"Planos que sofreram alteracoes: \n {planos_atualizados}") print(f"Planos sem preços cadastrados: \n {planos_inseridos}")
def obterPrecos(driver): site = 'http://*****:*****@id="tab-produto"]/div/h4[{num}]') except: print("element no ionterable") refTable = False break finally: pass titulo = driver.find_element_by_xpath( f'//*[@id="tab-produto"]/div/h4[{num}]').text validade = driver.find_element_by_xpath( f'//*[@id="tab-produto"]/div/p[{num}]').text print(f"\nLendo {num}") print(titulo) print(validade) titulo = str(titulo).upper() qtd_titulares = '1' hospitalar = 1 min_vidas = None max_vidas = None if re.search('01 A 29 VIDAS', titulo): min_vidas = 1 max_vidas = 29 elif re.search('4 A 29 VIDAS', titulo): min_vidas = 4 max_vidas = 29 qtd_titulares = '2' if re.search("HOSPITALAR", titulo): hospitalar = 2 id_coparticipacao = 2 id_operadora = 15 planos = driver.find_element_by_xpath( f'//*[@id="tab-produto"]/div/table[{num}]/thead' ).find_elements_by_tag_name('th') planosArray = [] for plano in planos: planosArray.append(plano.text) # del(planosArray[0]) print(planosArray) for i, plano in enumerate(planosArray): # print("num",i) precos = [] for j in range(9): if i > 0: preco = driver.find_element_by_xpath( f'//*[@id="tab-produto"]/div/table[{num}]/tbody/tr[{j + 1}]/td[{i + 1}]' ).text precos.append( float( str(preco).replace(".", "").replace(",", "."))) if i > 0: print(precos) nomePlano = str(plano).split('[') plano = nomePlano[0].strip().upper() modalidade = nomePlano[1].split(']')[0].strip() id_modalidade = 0 if modalidade == "E": id_modalidade = 1 elif modalidade == "A": id_modalidade = 2 conn = conexao.myConexao() cursor = conn.cursor() sql = f"SELECT * FROM tbl_tipo_plano where titulo like '{plano}' and id_operadora = {id_operadora};" print(sql) res = cursor.execute(sql) # print(res) if res == 1: result_select = cursor.fetchall()[0] print(result_select) id_plano = result_select[0] id_categoria_plano = result_select[3] id_area = 1 id_tipo_contratacao = 2 id_tipo_empresa = 2 id_administradora = 0 data_reajuste = '2020-10-01' id_tipo_contratacao_lead = 0 id_tipo_tabela = None print("id_area => ", id_area) print("id_categoria_plano => ", id_categoria_plano) print("id_coparticipacao => ", id_coparticipacao) print("id_modalidade => ", id_modalidade) print("id_operadora => ", id_operadora) print("id_tipo_contratacao => ", id_tipo_contratacao) print("id_plano => ", id_plano) print("preco0_18 => ", precos[0]) print("preco54_58 => ", precos[8]) print("qtd_titulares => ", qtd_titulares) print("hospitalar => ", hospitalar) print("min_vidas => ", min_vidas) print("max_vidas => ", max_vidas) print("id_tipo_empresa => ", id_tipo_empresa) print("id_administradora => ", id_administradora) print("data_reajuste => ", data_reajuste) print("id_tipo_contratacao_lead => ", id_tipo_contratacao_lead) print("id_tipo_tabela => ", id_tipo_tabela) sql = "insert into tbl_preco_faixa_etaria (" \ "id_area, " \ "id_categoria_plano, " \ "id_coparticipacao, " \ "id_modalidade, " \ "id_operadora, " \ "id_tipo_contratacao, " \ "id_tipo_plano, " \ "preco0_18, " \ "preco19_23, " \ "preco24_28, " \ "preco29_33, " \ "preco34_38, " \ "preco39_43, " \ "preco44_48, " \ "preco49_53, " \ "preco54_58, " \ "preco_m59, " \ "qtd_titulares, " \ "id_sindicato, " \ "hospitalar, " \ "min_vidas, " \ "max_vidas, " \ "id_tipo_empresa, " \ "id_administradora, " \ "ultimo_reajuste, " \ "id_tipo_contratacao_lead, " \ "id_tipo_tabela ) " \ "values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s);" values = ( id_area, # id_area id_categoria_plano, # id_categoria_plano id_coparticipacao, # id_coparticipacao id_modalidade, # id_modalidade, id_operadora, # id_operadora id_tipo_contratacao, # id_tipo_contratacao id_plano, # id_tipo_plano precos[0], # preco0_18 precos[1], # precos[2], precos[3], precos[4], precos[5], precos[6], precos[7], precos[8], # preco54_58 None, qtd_titulares, # qtd_titulares None, # id_sindicato hospitalar, # hospitalar min_vidas, # min_vidas max_vidas, # max_vidas id_tipo_empresa, # id_tipo_empresa id_administradora, # id_administradora data_reajuste, # ultimo_reajuste id_tipo_contratacao_lead, # id_tipo_contratacao_lead id_tipo_tabela # id_tipo_tabela ) # print(values) teste = "select * from tbl_preco_faixa_etaria " \ f"where id_area = {id_area} " \ f"and id_operadora = {id_operadora} " \ f"and id_tipo_plano = {id_plano} " \ f"and id_modalidade = {id_modalidade} " \ f"and id_tipo_contratacao = {id_tipo_contratacao} " \ f"and id_coparticipacao = {id_coparticipacao} " \ f"and qtd_titulares = {qtd_titulares} " \ f"and min_vidas = {min_vidas} " \ f"and id_sindicato is null " \ f"and id_tipo_empresa = {id_tipo_empresa} " \ f"and hospitalar = {hospitalar};" print(teste) res = cursor.execute(teste) print(res) print(values, " -- extraidos do simulador") if res == 1: select = cursor.fetchall()[0] id = select[0] preco0_18 = select[8] preco54_58 = select[16] ultimo_reajuste = select[25] print(select[1:28], f"ID: {id} -- banco de dados") if not preco0_18 == precos[ 0] or not preco54_58 == precos[ 8]: # and not ultimo_reajuste == data_reajuste print("Atualizar Precos! -----") planos_atualizados.append(plano) if ultimo_reajuste == None: ultimo_reajuste = "null" else: ultimo_reajuste = datetime.strptime( str(ultimo_reajuste), '%Y-%m-%d').date() print(ultimo_reajuste) update = "UPDATE `tbl_preco_faixa_etaria` SET " \ f"`preco0_18`='{precos[0]}', " \ f"`preco19_23`='{precos[1]}', " \ f"`preco24_28`='{precos[2]}', " \ f"`preco29_33`='{precos[3]}', " \ f"`preco34_38`='{precos[4]}', " \ f"`preco39_43`='{precos[5]}', " \ f"`preco44_48`='{precos[6]}', " \ f"`preco49_53`='{precos[7]}', " \ f"`preco54_58`='{precos[8]}', " \ f"`min_vidas`='{min_vidas}', " \ f"`max_vidas`='{max_vidas}', " \ f"`ultimo_reajuste`='{data_reajuste}' " \ f"WHERE `id`='{id}';" print(update) if salvar: res = cursor.execute(update) else: res = 1 if res == 1: if ultimo_reajuste == None or ultimo_reajuste == "null": insert = "insert into tbl_historico_precos_planos " \ "(id_preco_faixa_etaria, preco0_18, preco19_23, preco24_28, preco29_33, preco34_38, preco39_43, preco44_48, preco49_53, preco54_58, preco_m59 ) " \ "values " \ f"({id}, {select[8]}, {select[9]}, {select[10]}, {select[11]}, {select[12]}, {select[13]}, {select[14]}, {select[15]}, {select[16]}, {select[17]}); " else: insert = "insert into tbl_historico_precos_planos " \ "(id_preco_faixa_etaria, preco0_18, preco19_23, preco24_28, preco29_33, preco34_38, preco39_43, preco44_48, preco49_53, preco54_58, preco_m59, data_validade) " \ "values " \ f"({id}, {select[8]}, {select[9]}, {select[10]}, {select[11]}, {select[12]}, {select[13]}, {select[14]}, {select[15]}, {select[16]}, {select[17]}, '{ultimo_reajuste}'); " print(insert) if salvar: res = cursor.execute(insert) print(res, "sucesso") elif res == 0: print( "----------------------------- Cadastrar Novo --------------------------------" ) print(f'{sql} {values}') ref_plano = True for plan in planos_inseridos: if plan == plano: ref_plano = False if ref_plano: planos_inseridos.append(f"{plano}") if salvar: if not insertDados(sql, values): print( "ERROR: erro ao inserir precos no banco de dados!" ) else: inseridos += 1 elif res > 1: print("Mais de um plano cadastrado") # Colocar em uma lista os planos nao encontrados elif res == 0: print("Nao achou o plano!") ref_plano = True for plan in planos_sem_cadastros: if plan == plano: ref_plano = False if ref_plano: planos_sem_cadastros.append(f"{plano}") elif res > 1: print("Achou mais de um plano!") cursor.close() conn.commit() conn.close() num += 1 # except: # print("Acabou") # # pass finally: pass print(f"Total de preços de planos atualizados: {inseridos}")
def rasparDados(driver): # Ativar ou dasativar a persistencia de dados salvar = conexao.inserirRegistro() updatePrecoPlano = conexao.updatePrecoPlano() atualizarDataReajuste = conexao.atualizaDataReajuste() global id_operadora global nome_operadora global nomeOperadoraTitle global coparticipacao global hospitalar global min_vidas global min_vidas_pesquisa global max_vidas global data_reajuste global id_administradora global id_tipo_contratacao_lead global tipo_contratacao global id_tipo_contratacao global regional global id_tipo_empresa global estadoSaoPaulo global estadoRioDeJaneiro global estadoEspiritoSanto global estadoMatoGrosso global estadoMatoGrossoSul qtd_titulares = '1' planos_atualizados = [] conn = conexao.myConexao() cursor = conn.cursor() print("Obtendo dados") time.sleep(5) soup = BeautifulSoup(driver.page_source, 'html.parser') tables = soup.find_all('table', attrs={"static small ta-c"}) tablesReembolso = driver.find_elements_by_class_name('bloco') for table in tablesReembolso: h4s = table.find_elements_by_tag_name('h4') refReembolso = False for h4 in h4s: print(h4.text) if re.search("Reembolso", h4.text): refReembolso = True if refReembolso: refReembolso = False trsReembolso = table.find_elements_by_tag_name('tr') reembolsoArray = [] for n, tr in enumerate(trsReembolso): aux = [] if n == 0: for td in tr.find_elements_by_tag_name('td'): reembolsoArray.append([td.text]) if n == 1: for num, td in enumerate(tr.find_elements_by_tag_name('td')): reembolsoArray[num].append(td.text) del (reembolsoArray[0]) print(reembolsoArray) for reemb in reembolsoArray: planoRee = reemb[0].strip() valorRee = str(reemb[1]).split(" ")[1].replace(".", "").replace(",", ".") sql = f"UPDATE tbl_tipo_plano SET reembolso = '{valorRee}' " \ f"WHERE id_operadora = {id_operadora} AND titulo LIKE '{planoRee}' and id > 0 limit 1;" # print(sql) if not planoRee == "" and not valorRee == "": res = cursor.execute(sql) # print(res) for num_tables in range(1): titulo = driver.find_element_by_xpath('//*[@id="geral-content"]/section/div[2]/div[2]/div[1]/p').text subTitulo = "" try: subTitulo = driver.find_element_by_xpath('//*[@id="geral-content"]/section/div[2]/div[2]/div[2]/b').text except: subTitulo = None finally: pass if nome_operadora == 'BRADESCO': if re.search('3 Vidas', titulo): min_vidas = 0 max_vidas = 29 if re.search('4 vidas', titulo): min_vidas = 0 max_vidas = 29 if min_vidas_pesquisa == 30: min_vidas = 30 max_vidas = 99 elif min_vidas_pesquisa == 0: min_vidas = 0 max_vidas = 29 if re.search('02 Titulares', titulo): qtd_titulares = '2' elif re.search('01 Titular', titulo): qtd_titulares = '1' elif re.search('AMIL', nome_operadora) or nome_operadora == 'ONE HEALTH': if min_vidas == 0: min_vidas = 0 max_vidas = 29 qtd_titulares = '1' elif min_vidas > 29: min_vidas = 30 max_vidas = 99 qtd_titulares = '1' elif re.search('SULAMÉRICA', nome_operadora): if min_vidas == 0: min_vidas = 0 max_vidas = 29 qtd_titulares = '1' elif min_vidas > 29: min_vidas = 30 max_vidas = 99 qtd_titulares = '1' if re.search(' MEI', titulo): id_tipo_empresa = 1 else: id_tipo_empresa = 2 if re.search('FLEX', titulo): id_tipo_contratacao = 1 else: id_tipo_contratacao = 2 elif re.search('SOMPO', nome_operadora): if min_vidas == 0: min_vidas = 0 max_vidas = 29 qtd_titulares = '1' elif min_vidas > 29: min_vidas = 30 max_vidas = 99 qtd_titulares = '1' elif re.search('PORTO SEGURO', nome_operadora): if min_vidas == 0: min_vidas = 0 max_vidas = 29 qtd_titulares = '1' elif min_vidas > 29: min_vidas = 30 max_vidas = 99 qtd_titulares = '1' elif re.search('ALLIANZ', nome_operadora): min_vidas = 0 max_vidas = 49 qtd_titulares = '1' elif re.search('NOTREDAME', nome_operadora): if min_vidas == 0: min_vidas = 0 max_vidas = 29 qtd_titulares = '1' elif min_vidas > 29: min_vidas = 30 max_vidas = 99 qtd_titulares = '1' if re.search(' MEI', titulo): id_tipo_empresa = 1 elif subTitulo is not None: if re.search('CNPJ', subTitulo): id_tipo_empresa = 1 else: id_tipo_empresa = 2 else: id_tipo_empresa = 2 trs = tables[num_tables + 1].find_all('tr') dados = [] for i, tr in enumerate(trs): soup = BeautifulSoup(str(tr), 'html.parser') tds = soup.find_all('td') # del (tds[0]) if i == 0: for td in tds: aux = [td.text] dados.append(aux) if 0 < i < 11: for j, td in enumerate(tds): dados[j].append(td.text) # print(dados) inseridos = 0 del (dados[0]) mensagemWhats = f"*ATUALIZAÇÃO DE PREÇOS* \n\n*{nomeOperadoraTitle.upper()}*\n\n" mensagemWhatsInicial = mensagemWhats for dado in dados: print(dado) dado[0] = str(dado[0]).replace("(R1)", "R1") dado[0] = str(dado[0]).replace("(R2)", "R2") dado[0] = str(dado[0]).replace("(R3)", "R3") plano_modalidade = str(dado[0]).split("(") id_modalidade = plano_modalidade[1].strip().replace(")", "") if id_modalidade == "A": id_modalidade = 2 elif id_modalidade == "E": id_modalidade = 1 elif id_modalidade == "AMB": id_modalidade = 2 else: print("Modalidade nao encontrada!") break plano = plano_modalidade[0].strip() # Variacao de nome de planos AMIL if plano == 'AMIL FÁCIL 50 ABC / BX': plano = 'AMIL FÁCIL 50 ABC' # Variacao do nome do plano AMIL - Estado RJ if estadoRioDeJaneiro: if plano == 'AMIL CO330' and id_modalidade == 2: plano = 'AMIL CO330 Q' elif plano == 'AMIL CO330' and id_modalidade == 1: plano = 'AMIL CO330 E' if regional: plano = f"{plano} REGIONAL" if (re.search('CLASSICO', plano) or re.search('CLÁSSICO', plano)) and id_operadora == 12 and id_modalidade == 1: plano = "CLÁSSICO ENF" elif (re.search('CLASSICO', plano) or re.search('CLÁSSICO', plano)) and id_operadora == 12 and id_modalidade == 2: plano = "CLÁSSICO APT" if (re.search('CLASSICO', plano) or re.search('CLÁSSICO', plano)) and ( id_operadora == 2 or id_operadora == 5 or id_operadora == 8): if id_modalidade == 1: plano = "CLÁSSICO ENF" elif id_modalidade == 2: plano = "CLÁSSICO APT" if id_operadora == 3: if plano == 'TNW': plano = 'TNO' elif plano == 'TNPX': plano = 'TNP 10' elif plano == 'FCX': plano = 'FLEX' if id_operadora == 11: if plano == 'OURO MAIS' and id_modalidade == 2: plano = 'OURO MAIS Q' elif plano == 'OURO MAX' and id_modalidade == 2: plano = 'OURO MAX Q' # Verificar qual o modelo de copart da ALLIANZ if re.search('ALLIANZ', nome_operadora): if plano == 'ESSENCIAL 20': plano = 'ESSENCIAL 10' if subTitulo is not None: if re.search('20% PARA CONSULTAS E EXAMES, LIMITADO A', str(subTitulo).upper()) and nome_operadora == 'ALLIANZ': plano = f"{plano} M2" # Variacao de nome de planos SULAMERICA if re.search('SULAMÉRICA', nome_operadora): plano = plano.replace("- ", "") # variaçoes dos nomes dos planos (FORMATACAO) plano = plano.split('PREMIUM')[0].strip() plano = plano.split('SUPREMO')[0].strip() if re.search('NOTREDAME', nome_operadora): if plano == 'SMART 200 - SP CAPITAL': plano = 'SMART 200 - SP' plano = plano.replace("-", "") nome_plano = plano plano = plano.replace(" ", "") sql = f"select * from tbl_tipo_plano " \ f"where id_operadora = {id_operadora} and replace(titulo, ' ', '') like '{plano.upper()}';" print(sql) res = cursor.execute(sql) valores = [] # print(res) if res > 0: result_select = cursor.fetchall()[0] print(result_select) id_plano = result_select[0] id_categoria_plano = result_select[3] if id_plano > 0: for i, valor in enumerate(dado): if i > 0: valores.append(float(str(valor).split(" ")[1].replace(".", "").replace(",", "."))) sql = "insert into tbl_preco_faixa_etaria (" \ "id_area, " \ "id_categoria_plano, " \ "id_coparticipacao, " \ "id_modalidade, " \ "id_operadora, " \ "id_tipo_contratacao, " \ "id_tipo_plano, " \ "preco0_18, " \ "preco19_23, " \ "preco24_28, " \ "preco29_33, " \ "preco34_38, " \ "preco39_43, " \ "preco44_48, " \ "preco49_53, " \ "preco54_58, " \ "preco_m59, " \ "qtd_titulares, " \ "id_sindicato, " \ "hospitalar, " \ "min_vidas, " \ "max_vidas, " \ "id_tipo_empresa, " \ "id_administradora, " \ "ultimo_reajuste, " \ "id_tipo_contratacao_lead, " \ "id_tipo_tabela ) " \ "values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s);" values = ( id_area, # id_area id_categoria_plano, # id_categoria_plano coparticipacao, # id_coparticipacao id_modalidade, # id_modalidade, id_operadora, # id_operadora id_tipo_contratacao, # id_tipo_contratacao id_plano, # id_tipo_plano valores[0], # preco0_18 valores[1], # valores[2], valores[3], valores[4], valores[5], valores[6], valores[7], valores[8], valores[9], # preco_m59 qtd_titulares, # qtd_titulares None, # id_sindicato hospitalar, # hospitalar min_vidas, # min_vidas max_vidas, # max_vidas id_tipo_empresa, # id_tipo_empresa id_administradora, # id_administradora data_reajuste, # ultimo_reajuste id_tipo_contratacao_lead, # id_tipo_contratacao_lead id_tipo_tabela # id_tipo_tabela ) teste = "select * from tbl_preco_faixa_etaria " \ f"where id_area = {id_area} and id_operadora = {id_operadora} and id_tipo_plano = {id_plano} and id_modalidade = '{id_modalidade}' " \ f"and id_tipo_contratacao = {tipo_contratacao} and id_coparticipacao = {coparticipacao} and qtd_titulares = {qtd_titulares} " \ f"and min_vidas = {min_vidas} and max_vidas = {max_vidas} and id_sindicato is null and id_tipo_empresa = {id_tipo_empresa} and hospitalar = {hospitalar};" print(teste) res = cursor.execute(teste) print() print(values, " -- extraidos do simulador") if res == 1: select = cursor.fetchall()[0] id = select[0] preco0_18 = select[8] preco59 = select[17] ultimo_reajuste = select[25] print(select[1:28], f"ID: {id} -- banco de dados") # Condicao para alterar a data do reajuste caso os precos estejam iguais mais sem data if (ultimo_reajuste is None or not (ultimo_reajuste == data_reajuste)) and preco0_18 == valores[ 0]: print('Atualizar Data') update = f"UPDATE `tbl_preco_faixa_etaria` SET `ultimo_reajuste`='{data_reajuste}', status = 1 WHERE `id`='{id}';" print(update) if atualizarDataReajuste: cursor.execute(update) # print(type(preco0_18), type(valores[0])) # print(preco0_18, valores[0]) if not preco0_18 == valores[0] or not preco59 == valores[9]: # and not ultimo_reajuste == data_reajuste print("Atualizar Precos! -----") planos_atualizados.append(plano) if ultimo_reajuste == None: ultimo_reajuste = "null" else: ultimo_reajuste = datetime.strptime(str(ultimo_reajuste), '%Y-%m-%d').date() print(ultimo_reajuste) update = "UPDATE `tbl_preco_faixa_etaria` SET " \ f"`preco0_18`='{valores[0]}', " \ f"`preco19_23`='{valores[1]}', " \ f"`preco24_28`='{valores[2]}', " \ f"`preco29_33`='{valores[3]}', " \ f"`preco34_38`='{valores[4]}', " \ f"`preco39_43`='{valores[5]}', " \ f"`preco44_48`='{valores[6]}', " \ f"`preco49_53`='{valores[7]}', " \ f"`preco54_58`='{valores[8]}', " \ f"`preco_m59`='{valores[9]}'," \ f"`min_vidas`='{min_vidas}', " \ f"`max_vidas`='{max_vidas}', " \ f"`status`='1', " \ f"`ultimo_reajuste`='{data_reajuste}' " \ f"WHERE `id`='{id}';" print(update) if updatePrecoPlano: res = cursor.execute(update) mensagemWhats += f"Plano: *{nome_plano}* | Numero vidas: {min_vidas}-{max_vidas} \n" \ f"Preço antigo preco0_18: R$ {select[8]} | Atualizado preco0_18: R$ {valores[0]}\n" \ f"Preço antigo preco_m59: R$ {select[17]} | Atualizado preco_m59: R$ {valores[9]}\n\n" conn.commit() else: res = 1 # print(res) if res == 1 and updatePrecoPlano: if ultimo_reajuste == None or ultimo_reajuste == "null": insert = "insert into tbl_historico_precos_planos " \ "(id_preco_faixa_etaria, preco0_18, preco19_23, preco24_28, preco29_33, preco34_38, preco39_43, preco44_48, preco49_53, preco54_58, preco_m59 ) " \ "values " \ f"({id}, {select[8]}, {select[9]}, {select[10]}, {select[11]}, {select[12]}, {select[13]}, {select[14]}, {select[15]}, {select[16]}, {select[17]}); " else: insert = "insert into tbl_historico_precos_planos " \ "(id_preco_faixa_etaria, preco0_18, preco19_23, preco24_28, preco29_33, preco34_38, preco39_43, preco44_48, preco49_53, preco54_58, preco_m59, data_validade) " \ "values " \ f"({id}, {select[8]}, {select[9]}, {select[10]}, {select[11]}, {select[12]}, {select[13]}, {select[14]}, {select[15]}, {select[16]}, {select[17]}, '{ultimo_reajuste}'); " print(insert) if salvar: res = cursor.execute(insert) print(res, "sucesso") # if not insertDados(sql, values): # print("ERROR: erro ao inserir precos no banco de dados!") # else: # print("Deletando registro desatualizado") # delete = f"delete from tbl_preco_faixa_etaria where id = {id}" # cursor.execute(delete) elif preco0_18 == valores[0] and preco59 == valores[9]: updateStatus = "UPDATE `tbl_preco_faixa_etaria` SET " \ f"status = '1' " \ f"WHERE `id`='{id}';" cursor.execute(updateStatus) elif res == 0: print("------------------------------- Cadastrar Novo") print(f'{sql} {values}') if salvar: # if False: if not insertDados(sql, values): print("ERROR: erro ao inserir precos no banco de dados!") else: inseridos += 1 elif res > 1: print("Mais de um plano cadastrado") # print(values ,",") # Colocar em uma lista os planos nao encontrados elif res == 0: ref_plano = True for plan in planos_sem_cadastros: if plan == nome_plano: ref_plano = False if ref_plano: planos_sem_cadastros.append(f"{nome_plano}") if not mensagemWhats == mensagemWhatsInicial: apiWhats.sendMessageAlert(message=mensagemWhats, number=getNumbersWhatsNotificationPrice) print(f"Total de preços de planos atualizados: {inseridos}") cursor.close() conn.commit() conn.close() print(f"Planos que nao foram encontrados: \n {planos_sem_cadastros}") print(f"Planos que sofreram alteracoes: \n {planos_atualizados}") # Exportar para o arquivo planos.txt os planos que não foram encontrados for plano in planos_sem_cadastros: arquivo.seek(0) arquivo.truncate() planos = arquivo.read() if plano not in planos: arquivo.write(plano) arquivo.write("\n")
def pegarDados(driver, cursor, id_sindicato, data_reajuste): # Ativar ou dasativar a persistencia de dados salvar = conexao.inserirRegistro() deletar_duplicados = conexao.deletarRegistroDuplicado() global nome_administradora global planos_sem_cadastros global hospitalar global id_coparticipacao global id_operadora global min_vidas global max_vidas global ultimo id_area = 0 planos_atualizados = [] time.sleep(4) print("Obtendo dados:") try: WebDriverWait(driver, 20).until( EC.presence_of_element_located((By.CLASS_NAME, 'bgGray'))) finally: pass soup = BeautifulSoup(driver.page_source, 'html.parser') tables = soup.find_all('table', attrs={"static small ta-c"}) tipo_contratacao_lead = driver.find_elements_by_class_name( 'titulo')[0].text if re.search('Adesão', tipo_contratacao_lead): id_tipo_contratacao_lead = 0 operadora_tipocoparticipacao = str( driver.find_element_by_xpath( '//*[@id="geral-content"]/section/div[2]/div[2]/div[1]/p').text) if re.search('COM COPART', operadora_tipocoparticipacao.upper()): id_coparticipacao = 1 hospitalar = 1 elif re.search('SEM COPART', operadora_tipocoparticipacao.upper()): id_coparticipacao = 2 hospitalar = 1 elif re.search('HOSPITALAR', operadora_tipocoparticipacao.upper()): id_coparticipacao = 2 hospitalar = 2 print("Pegando precos!") if ultimo: quant = 1 else: quant = 2 for num_tables in range(quant): info_sindicato = "" sindicato_name = "" if num_tables == 0: titulo = str( driver.find_element_by_xpath( '//*[@id="geral-content"]/section/div[2]/div[2]/div[2]/b'). text) info_sindicato = driver.find_element_by_xpath( '//*[@id="geral-content"]/section/div[2]/div[2]/div[3]').text sindicato_name = driver.find_element_by_xpath( '//*[@id="geral-content"]/section/div[2]/div[2]/div[3]/b').text if num_tables == 1: titulo = str( driver.find_element_by_xpath( '//*[@id="geral-content"]/section/div[2]/div[2]/div[5]/b'). text) info_sindicato = driver.find_element_by_xpath( '//*[@id="geral-content"]/section/div[2]/div[2]/div[6]').text sindicato_name = driver.find_element_by_xpath( '//*[@id="geral-content"]/section/div[2]/div[2]/div[6]/b').text print( f"{operadora_tipocoparticipacao}\n \n{titulo}\n{info_sindicato}\n") titulo = titulo.split("-") if len(titulo) > 1: area = titulo[1].strip() numero_vidas = titulo[2].strip() else: area = 'SP CAPITAL' numero_vidas = 'APENAS TITULAR' tipo_tabela = titulo[0].strip() sql = f"select * from tbl_tipo_tabela, tbl_sindicato where nome like '%{tipo_tabela}%' and titulo like '%{str(sindicato_name).strip()}%';" res = cursor.execute(sql) if res > 0: select = cursor.fetchall()[0] print(f"Sindicato do banco de dados: {select[1:-1]}") id_tipo_tabela = select[0] id_sindicato = select[2] if numero_vidas == 'APENAS TITULAR': min_vidas = 0 # Se a Operadora for AMIL, alterar o numero maximo de vidas if id_operadora == 2: max_vidas = 0 else: max_vidas = 1 elif numero_vidas == 'TITULAR + DEPENDENTES': min_vidas = 2 max_vidas = 0 sql = f"select * from tbl_area, tbl_administradora where area like '%{area}%' and titulo like 'QUALICORP';" print(sql) res = cursor.execute(sql) if res > 0: select = cursor.fetchall()[0] id_area = select[0] id_administradora = select[3] trs = tables[num_tables + 1].find_all('tr') dados = [] # dados = "plano", "preco 0 a 18", "" for i, tr in enumerate(trs): soup = BeautifulSoup(str(tr), 'html.parser') tds = soup.find_all('td') # del (tds[0]) if i == 0: for td in tds: aux = [td.text] dados.append(aux) if 0 < i < 11: for j, td in enumerate(tds): dados[j].append(td.text) # print(dados) inseridos = 0 del (dados[0]) for dado in dados: # print(dado) plano_modalidade = str(dado[0]).split("(") id_modalidade = plano_modalidade[1].strip().replace( ")", "") if id_modalidade == "A": id_modalidade = 2 if id_modalidade == "E": id_modalidade = 1 plano = plano_modalidade[0].strip() # variaçoes dos nomes dos planos (FORMATACAO) plano = plano.split('PREMIUM')[0].strip() plano = plano.split('SUPREMO')[0].strip() # variaçoes dos nomes de planos da AMIL FACIL if id_operadora == 8: min_vidas = 0 max_vidas = 0 # variaçoes dos nomes de planos da BRADESCO if id_operadora == 3: if plano == 'SAÚDE EFETIVO IV': plano = "Efetivo III" elif plano == "NACIONAL FLEX E CA": plano = "FLEX" elif plano == "NACIONAL FLEX Q CA": plano = "FLEX" elif plano == "TOP NACIONAL E CA": plano = "Top Nacional E" elif plano == "TOP NACIONAL Q CA": plano = "Top Nacional Q" elif plano == "TOP NPLUS3 Q CA": plano = "NP03" elif plano == "TOP NPLUS4 Q CA": plano = "NP04" elif plano == "TOP NPLUS6 Q CA": plano = "NP06" min_vidas = 0 max_vidas = 0 sql = f"select * from tbl_planos_sindicato where titulo like '%{plano}%';" # print(sql) res = cursor.execute(sql) valores = [] # print(res) if res == 1: result_select = cursor.fetchall()[0] print(result_select) id_plano = result_select[0] id_categoria_plano = result_select[4] if id_plano > 0: for i, valor in enumerate(dado): if i > 0: valores.append( float( str(valor).split(" ")[1].replace( ".", "").replace(",", "."))) sql = "insert into tbl_preco_faixa_etaria (" \ "id_area, " \ "id_categoria_plano, " \ "id_coparticipacao, " \ "id_modalidade, " \ "id_operadora, " \ "id_tipo_contratacao, " \ "id_tipo_plano, " \ "preco0_18, " \ "preco19_23, " \ "preco24_28, " \ "preco29_33, " \ "preco34_38, " \ "preco39_43, " \ "preco44_48, " \ "preco49_53, " \ "preco54_58, " \ "preco_m59, " \ "qtd_titulares, " \ "id_sindicato, " \ "hospitalar, " \ "min_vidas, " \ "max_vidas, " \ "id_tipo_empresa, " \ "id_administradora, " \ "ultimo_reajuste, " \ "id_tipo_contratacao_lead, " \ "id_tipo_tabela ) " \ "values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s);" values = ( id_area, # id_area id_categoria_plano, # id_categoria_plano id_coparticipacao, # id_coparticipacao id_modalidade, # id_modalidade, id_operadora, # id_operadora 2, # id_tipo_contratacao id_plano, # id_tipo_plano valores[0], # preco0_18 valores[1], # valores[2], valores[3], valores[4], valores[5], valores[6], valores[7], valores[8], valores[9], # preco_m59 str(1), # qtd_titulares id_sindicato, # id_sindicato hospitalar, # hospitalar min_vidas, # min_vidas max_vidas, # max_vidas 2, # id_tipo_empresa id_administradora, # id_administradora data_reajuste, # ultimo_reajuste id_tipo_contratacao_lead, # id_tipo_contratacao_lead id_tipo_tabela # id_tipo_tabela ) teste = "select * from tbl_preco_faixa_etaria " \ f"where id_area = {id_area} and id_operadora = {id_operadora} and id_tipo_plano = {id_plano} and id_modalidade = {id_modalidade} " \ f"and id_coparticipacao = {id_coparticipacao} and qtd_titulares = 1 " \ f"and min_vidas = {min_vidas} and max_vidas = {max_vidas} and id_sindicato = {id_sindicato} and hospitalar = {hospitalar};" print(teste) res = cursor.execute(teste) print(values, " -- extraidos do simulador") if res == 1: select = cursor.fetchall()[0] id = select[0] preco0_18 = select[8] ultimo_reajuste = select[25] print(select[1:28], f"ID: {id} -- banco de dados") # if ultimo_reajuste is None: # update = f"UPDATE `tbl_preco_faixa_etaria` SET `ultimo_reajuste`='{data_reajuste}' WHERE `id`='{id}';" # print(update) # cursor.execute(update) # print(type(preco0_18), type(valores[0])) # print(preco0_18, valores[0]) if not preco0_18 == valores[ 0]: # and not ultimo_reajuste == data_reajuste print("Atualizar Precos! -----") planos_atualizados.append(plano) if ultimo_reajuste == None: ultimo_reajuste = "null" else: ultimo_reajuste = datetime.strptime( str(ultimo_reajuste), '%Y-%m-%d').date() print(ultimo_reajuste) update = "UPDATE `tbl_preco_faixa_etaria` SET " \ f"`preco0_18`='{valores[0]}', " \ f"`preco19_23`='{valores[1]}', " \ f"`preco24_28`='{valores[2]}', " \ f"`preco29_33`='{valores[3]}', " \ f"`preco34_38`='{valores[4]}', " \ f"`preco39_43`='{valores[5]}', " \ f"`preco44_48`='{valores[6]}', " \ f"`preco49_53`='{valores[7]}', " \ f"`preco54_58`='{valores[8]}', " \ f"`preco_m59`='{valores[9]}', " \ f"id_tipo_tabela = {id_tipo_tabela}, " \ f"`ultimo_reajuste`='{data_reajuste}' " \ f"WHERE `id`='{id}';" print(update) if salvar: res = cursor.execute(update) else: res = 1 print(res) if res == 1: if ultimo_reajuste == None or ultimo_reajuste == "null": insert = "insert into tbl_historico_precos_planos " \ "(id_preco_faixa_etaria, preco0_18, preco19_23, preco24_28, preco29_33, preco34_38, preco39_43, preco44_48, preco49_53, preco54_58, preco_m59 ) " \ "values " \ f"({id}, {select[8]}, {select[9]}, {select[10]}, {select[11]}, {select[12]}, {select[13]}, {select[14]}, {select[15]}, {select[16]}, {select[17]}); " else: insert = "insert into tbl_historico_precos_planos " \ "(id_preco_faixa_etaria, preco0_18, preco19_23, preco24_28, preco29_33, preco34_38, preco39_43, preco44_48, preco49_53, preco54_58, preco_m59, data_validade) " \ "values " \ f"({id}, {select[8]}, {select[9]}, {select[10]}, {select[11]}, {select[12]}, {select[13]}, {select[14]}, {select[15]}, {select[16]}, {select[17]}, '{ultimo_reajuste}'); " print(insert) # insert = "insert into tbl_historico_precos_planos " \ # "(id_preco_faixa_etaria, preco0_18, preco19_23, preco24_28, " \ # "preco29_33, preco34_38, preco39_43, preco44_48, preco49_53, " \ # "preco54_58, preco_m59, data_validade ) " \ # f"values ({id}, {select[8]}, {select[9]}, {select[10]}, {select[11]}, {select[12]}, {select[13]}, {select[14]}, {select[15]}, {select[16]}, {select[17]}, '{ultimo_reajuste}');" # print(insert) if salvar: res = cursor.execute(insert) print(res, "sucesso") # if not insertDados(sql, values): # print("ERROR: erro ao inserir precos no banco de dados!") # else: # print("Deletando registro desatualizado") # delete = f"delete from tbl_preco_faixa_etaria where id = {id}" # cursor.execute(delete) elif res == 0: print( "------------------------------- Cadastrar Novo" ) print(f'{sql} {values}') if salvar: # if False: if not insertDados(sql, values): print( "ERROR: erro ao inserir precos no banco de dados!" ) else: inseridos += 1 elif res > 1: print("Mais de um plano cadastrado") if deletar_duplicados: id_item_duplicado = cursor.fetchall()[0][0] sql = f"delete from tbl_preco_faixa_etaria where id = {id_item_duplicado};" print(sql) res = cursor.execute(sql) if res > 0: print("Item deletado com sucesso") # print(values ,",") elif res > 1: print( f"Mais de um plano encontrado: {cursor.fetchall()}" ) # Colocar em uma lista os planos nao encontrados elif res == 0: ref_plano = True for plan in planos_sem_cadastros: if plan == plano: ref_plano = False if ref_plano: planos_sem_cadastros.append(plano) print(f"Total de preços de planos atulizados: {inseridos}") elif res == 0: print("Nao achou o sindicato") print(planos_sem_cadastros)
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC import time import re from src.acesso import getNumbersWhatsNotificationPrice from src.db import conexao from src.repository import AreaRepository from src.services import apiWhats conn = conexao.myConexao() cursor = conn.cursor() salvar = conexao.inserirRegistro() atualizarDataReajuste = conexao.atualizaDataReajuste() updatePrecoPlano = conexao.updatePrecoPlano() idArea = 0 textBox = "" estadoNome = "" def insertDados(sql, values): conn = conexao.myConexao() cursor = conn.cursor() res = cursor.execute(sql, values) cursor.close() conn.commit()
def obterPrecos(driver): escolherOperadora = "SOMPO" driver.get(getSiteAffinity) driver.switch_to.frame(driver.find_element_by_xpath("//*[@id='frame']")) login(driver) try: # element = WebDriverWait(driver, 20).until( # EC.presence_of_element_located((By.ID, "sidebar-nav")) # ) time.sleep(4) finally: driver.find_elements_by_class_name("dropdown-toggle")[1].click() time.sleep(1) driver.find_elements_by_class_name("dropdown-toggle")[2].click() time.sleep(1) driver.find_elements_by_class_name("dropdown-toggle")[5].click() liSubMenuPme = driver.find_elements_by_class_name( "active")[-1].find_elements_by_tag_name("li") links = [] for i, li in enumerate(liSubMenuPme): nomeOperadoraCompletaLi = li.text.upper() operadora = str(li.text).split(" ")[0].upper() if re.search(escolherOperadora.upper(), nomeOperadoraCompletaLi): resOperadora = operadoraRepository.getOperadoraByName( escolherOperadora.upper()) link = li.find_elements_by_tag_name('a')[0].get_attribute( 'href') if len(resOperadora) >= 1: links.append(link) print(operadora, link) count = 0 for url in links: driver.get(url) try: # WebDriverWait(driver, 15).until( # EC.presence_of_element_located((By.ID, "main")) # ) time.sleep(3) except Exception as e: print(e) finally: estados = driver.find_elements_by_class_name( 'produto-selector')[0].find_elements_by_tag_name('a') rowsEstados = len(estados) print(f"Numero de links {rowsEstados}") for j, estado in enumerate(estados): time.sleep(4) # Area id_area = 0 if re.search('Grupo de Estados', estado.text): id_area = 1 elif re.search('Interior/SP', estado.text): id_area = 2 elif re.search('Rio de Janeiro', estado.text): id_area = 4 print(id_area) if id_area > 0: print(f"Pegar preços de {id_area}") if j > 0: print("Click") estado.click() breakpoint() exit() breakpoint() planos_atualizados = [] planos_sem_cadastros = [] planos_inseridos = [] salvar = conexao.inserirRegistro() inseridos = 0 id_operadora = 12 id_area = 4 try: num = 1 while True: try: refTable = driver.find_element_by_xpath( f'//*[@id="tab-produto"]/div/h4[{num}]') except: print("element no ionterable") refTable = False break finally: pass titulo = driver.find_element_by_xpath( f'//*[@id="tab-produto"]/div/h4[{num}]').text validade = driver.find_element_by_xpath( f'//*[@id="tab-produto"]/div/p[{num}]').text print(f"\nLendo {num}") print(titulo) print(validade) titulo = str(titulo).upper() qtd_titulares = '1' hospitalar = 1 min_vidas = None max_vidas = None if re.search('03 A 29 VIDAS', titulo): min_vidas = 0 max_vidas = 29 elif re.search('30 A 99 VIDAS', titulo): min_vidas = 30 max_vidas = 0 if re.search("HOSPITALAR", titulo): hospitalar = 2 if re.search("SEM COPAR", titulo): id_coparticipacao = 2 elif re.search('COM 20% DE COPART', titulo): id_coparticipacao = 3 elif re.search('COM 30% DE COPART', titulo): id_coparticipacao = 5 if re.search("COMPULSÓRIO", titulo): id_tipo_contratacao = 2 else: id_tipo_contratacao = 1 planos = driver.find_element_by_xpath( f'//*[@id="tab-produto"]/div/table[{num}]/thead' ).find_elements_by_tag_name('th') planosArray = [] for plano in planos: planosArray.append(plano.text) # del(planosArray[0]) print(planosArray) for i, plano in enumerate(planosArray): # print("num",i) precos = [] for j in range(10): if i > 0: preco = driver.find_element_by_xpath( f'//*[@id="tab-produto"]/div/table[{num}]/tbody/tr[{j + 1}]/td[{i + 1}]' ).text precos.append( float( str(preco).replace(".", "").replace(",", "."))) if i > 0: print(precos) nomePlano = str(plano).split('[') plano = nomePlano[0].strip().upper() modalidade = nomePlano[1].split(']')[0].strip() id_modalidade = 0 if modalidade == "E": id_modalidade = 1 if plano == "CLASSICO": plano = "CLÁSSICO ENF" elif modalidade == "A": id_modalidade = 2 if plano == "nao e so na sua rua ": plano = "CLÁSSICO APT" conn = conexao.myConexao() cursor = conn.cursor() sql = f"SELECT * FROM tbl_tipo_plano where titulo like '{plano}' and id_operadora = {id_operadora};" print(sql) res = cursor.execute(sql) # print(res) if res == 1: result_select = cursor.fetchall()[0] print(result_select) id_plano = result_select[0] id_categoria_plano = result_select[3] id_tipo_empresa = 2 id_administradora = 0 data_reajuste = '2021-04-01' id_tipo_contratacao_lead = 0 id_tipo_tabela = None print("id_area => ", id_area) print("id_categoria_plano => ", id_categoria_plano) print("id_coparticipacao => ", id_coparticipacao) print("id_modalidade => ", id_modalidade) print("id_operadora => ", id_operadora) print("id_tipo_contratacao => ", id_tipo_contratacao) print("id_plano => ", id_plano) print("preco0_18 => ", precos[0]) print("preco_m59 => ", precos[9]) print("qtd_titulares => ", qtd_titulares) print("hospitalar => ", hospitalar) print("min_vidas => ", min_vidas) print("max_vidas => ", max_vidas) print("id_tipo_empresa => ", id_tipo_empresa) print("id_administradora => ", id_administradora) print("data_reajuste => ", data_reajuste) print("id_tipo_contratacao_lead => ", id_tipo_contratacao_lead) print("id_tipo_tabela => ", id_tipo_tabela) sql = "insert into tbl_preco_faixa_etaria (" \ "id_area, " \ "id_categoria_plano, " \ "id_coparticipacao, " \ "id_modalidade, " \ "id_operadora, " \ "id_tipo_contratacao, " \ "id_tipo_plano, " \ "preco0_18, " \ "preco19_23, " \ "preco24_28, " \ "preco29_33, " \ "preco34_38, " \ "preco39_43, " \ "preco44_48, " \ "preco49_53, " \ "preco54_58, " \ "preco_m59, " \ "qtd_titulares, " \ "id_sindicato, " \ "hospitalar, " \ "min_vidas, " \ "max_vidas, " \ "id_tipo_empresa, " \ "id_administradora, " \ "ultimo_reajuste, " \ "id_tipo_contratacao_lead, " \ "id_tipo_tabela ) " \ "values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s);" values = ( id_area, # id_area id_categoria_plano, # id_categoria_plano id_coparticipacao, # id_coparticipacao id_modalidade, # id_modalidade, id_operadora, # id_operadora id_tipo_contratacao, # id_tipo_contratacao id_plano, # id_tipo_plano precos[0], # preco0_18 precos[1], # precos[2], precos[3], precos[4], precos[5], precos[6], precos[7], precos[8], # preco54_58 precos[9], qtd_titulares, # qtd_titulares None, # id_sindicato hospitalar, # hospitalar min_vidas, # min_vidas max_vidas, # max_vidas id_tipo_empresa, # id_tipo_empresa id_administradora, # id_administradora data_reajuste, # ultimo_reajuste id_tipo_contratacao_lead, # id_tipo_contratacao_lead id_tipo_tabela # id_tipo_tabela ) # print(values) teste = "select * from tbl_preco_faixa_etaria " \ f"where id_area = {id_area} " \ f"and id_operadora = {id_operadora} " \ f"and id_tipo_plano = {id_plano} " \ f"and id_modalidade = {id_modalidade} " \ f"and id_tipo_contratacao = {id_tipo_contratacao} " \ f"and id_coparticipacao = {id_coparticipacao} " \ f"and qtd_titulares = {qtd_titulares} " \ f"and min_vidas = {min_vidas} " \ f"and id_sindicato is null " \ f"and id_tipo_empresa = {id_tipo_empresa} " \ f"and hospitalar = {hospitalar};" print(teste) res = cursor.execute(teste) print(values, " -- extraidos do simulador") if res == 1: select = cursor.fetchall()[0] id = select[0] preco0_18 = select[8] preco59 = select[17] ultimo_reajuste = select[25] print(select[1:28], f"ID: {id} -- banco de dados") if not preco0_18 == precos[ 0] or not preco59 == precos[ 9]: # and not ultimo_reajuste == data_reajuste print("Atualizar Precos! -----") planos_atualizados.append(plano) if ultimo_reajuste == None: ultimo_reajuste = "null" else: ultimo_reajuste = datetime.strptime( str(ultimo_reajuste), '%Y-%m-%d').date() print(ultimo_reajuste) update = "UPDATE `tbl_preco_faixa_etaria` SET " \ f"`preco0_18`='{precos[0]}', " \ f"`preco19_23`='{precos[1]}', " \ f"`preco24_28`='{precos[2]}', " \ f"`preco29_33`='{precos[3]}', " \ f"`preco34_38`='{precos[4]}', " \ f"`preco39_43`='{precos[5]}', " \ f"`preco44_48`='{precos[6]}', " \ f"`preco49_53`='{precos[7]}', " \ f"`preco54_58`='{precos[8]}', " \ f"`preco_m59`='{precos[9]}', " \ f"`min_vidas`='{min_vidas}', " \ f"`max_vidas`='{max_vidas}', " \ f"`ultimo_reajuste`='{data_reajuste}' " \ f"WHERE `id`='{id}';" print(update) if salvar: res = cursor.execute(update) else: res = 1 if res == 1: if ultimo_reajuste == None or ultimo_reajuste == "null": insert = "insert into tbl_historico_precos_planos " \ "(id_preco_faixa_etaria, preco0_18, preco19_23, preco24_28, preco29_33, preco34_38, preco39_43, preco44_48, preco49_53, preco54_58, preco_m59 ) " \ "values " \ f"({id}, {select[8]}, {select[9]}, {select[10]}, {select[11]}, {select[12]}, {select[13]}, {select[14]}, {select[15]}, {select[16]}, {select[17]}); " else: insert = "insert into tbl_historico_precos_planos " \ "(id_preco_faixa_etaria, preco0_18, preco19_23, preco24_28, preco29_33, preco34_38, preco39_43, preco44_48, preco49_53, preco54_58, preco_m59, data_validade) " \ "values " \ f"({id}, {select[8]}, {select[9]}, {select[10]}, {select[11]}, {select[12]}, {select[13]}, {select[14]}, {select[15]}, {select[16]}, {select[17]}, '{ultimo_reajuste}'); " print(insert) if salvar: res = cursor.execute(insert) print(res, "sucesso") elif res == 0: print( "----------------------------- Cadastrar Novo --------------------------------" ) print(f'{sql} {values}') ref_plano = True for plan in planos_inseridos: if plan == plano: ref_plano = False if ref_plano: planos_inseridos.append(f"{plano}") if salvar: if not insertDados(sql, values): print( "ERROR: erro ao inserir precos no banco de dados!" ) else: inseridos += 1 elif res > 1: print("Mais de um plano cadastrado") # Colocar em uma lista os planos nao encontrados elif res == 0: print("Nao achou o plano!") ref_plano = True for plan in planos_sem_cadastros: if plan == plano: ref_plano = False if ref_plano: planos_sem_cadastros.append(f"{plano}") elif res > 1: print("Achou mais de um plano!") cursor.close() conn.commit() conn.close() num += 1 # except: # print("Acabou") # # pass finally: pass print(f"Total de preços de planos atualizados: {inseridos}")