def insertDados(sql, values): conn = conexao.myConexao() cursor = conn.cursor() res = cursor.execute(sql, values) cursor.close() conn.commit() conn.close() if res == 1: return True else: return False
def getOperadoraByName(nomeOperadora): conn = conexao.myConexao() cursor = conn.cursor() sqlOperadora = f"SELECT * FROM tbl_operadora WHERE titulo like '{nomeOperadora}%';" res = cursor.execute(sqlOperadora) if res == 0: print(f"Nenhum operadora encontrada para: \n{sqlOperadora}") return [] elif res == 1: return cursor.fetchone() print(sqlOperadora) return False
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 verificarAtualizacao(driver, num): global data_reajuste global id_operadora global id_area global nome_operadora global tipo_contratacao global coparticipacao global hospitalar global regional global id_tipo_contratacao global id_tipo_empresa conn = conexao.myConexao() cursor = conn.cursor() try: WebDriverWait(driver, 30).until( EC.presence_of_element_located( (By.XPATH, f'//*[@id="div-planos-loaded"]/table/tbody/tr[{num + 1}]/td[1]/p')) ) except: print('Nao achou o elemento da pagina! Tentando novamente') verificarAtualizacao(driver, num) finally: nome_operadora = driver.find_element_by_xpath( f'//*[@id="div-planos-loaded"]/table/tbody/tr[{num + 1}]/td[1]/p').text if re.search('HOSPITALAR', nome_operadora): tipo_contratacao = 2 try: WebDriverWait(driver, 30).until( EC.presence_of_element_located( (By.XPATH, f'//*[@id="div-planos-loaded"]/table/tbody/tr[{num + 1}]/td[1]/b')) ) except: tipo_contratacao = None finally: if not tipo_contratacao == None: tipo_contratacao = str(driver.find_element_by_xpath( f'//*[@id="div-planos-loaded"]/table/tbody/tr[{num + 1}]/td[1]/b').text) pass print(nome_operadora) print(tipo_contratacao, "\n") if re.search('BRADESCO', nome_operadora): tag_operadora = nome_operadora nome_operadora = str(nome_operadora).split(" ")[0] # Verificar de a area e de sao paulo if driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[25]').is_selected(): # Pegar a area do plano if re.search('INTERIOR 1', tag_operadora): area = 'SP INTERIOR 1' elif re.search('INTERIOR 2', tag_operadora): area = 'SP INTERIOR 2' else: area = 'SP CAPITAL' if driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[19]').is_selected(): area = 'RIO DE JANEIRO' if driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[24]').is_selected(): area = 'SANTA CATARINA' if driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[11]').is_selected(): area = 'MATO GROSSO' if driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[12]').is_selected(): area = 'MATO GROSSO DO SUL' if driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[13]').is_selected(): area = 'MINAS GERAIS' if driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[7]').is_selected(): area = 'ESPIRITO SANTO' if driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[3]').is_selected(): area = 'AMAPA' if driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[16]').is_selected(): area = 'PARANÁ' if driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[4]').is_selected(): area = 'AMAZONAS' coparticipacao = "" tipo_contratacao = str(tipo_contratacao).split("-") if len(tipo_contratacao) > 1: if tipo_contratacao[0].strip().upper() == "MEI": id_tipo_empresa = 1 if tipo_contratacao[0].strip().upper() == "MEI" and len(tipo_contratacao) == 3: coparticipacao = tipo_contratacao[2] tipo_contratacao = tipo_contratacao[1].strip() else: id_tipo_empresa = 2 coparticipacao = tipo_contratacao[1] tipo_contratacao = tipo_contratacao[0].strip() else: tipo_contratacao = tipo_contratacao[0].strip() id_tipo_empresa = 2 tipo_contratacao = list(tipo_contratacao.lower()) tipo_contratacao = f"{tipo_contratacao[0] + tipo_contratacao[1] + tipo_contratacao[2]}" if re.search('10', coparticipacao): coparticipacao = 1 elif re.search('20', coparticipacao): coparticipacao = 3 elif re.search('30', coparticipacao): coparticipacao = 5 else: coparticipacao = 2 # Verificar se e hospitalar if re.search('HOSPITALAR', tag_operadora): hospitalar = 2 coparticipacao = 2 else: hospitalar = 1 # Verificando apenas AMIL e Amil Facil if re.search('AMIL -', str(nome_operadora).upper()) \ or re.search('AMIL FÁCIL -', str(nome_operadora).upper()) \ or re.search('AMIL ONE -', str(nome_operadora).upper()): tag_operadora = nome_operadora if re.search('AMIL FÁCIL -', str(nome_operadora).upper()): nome_operadora = str(nome_operadora).split(" -")[0] elif re.search('AMIL ONE -', str(nome_operadora).upper()): nome_operadora = 'ONE HEALTH' else: nome_operadora = str(nome_operadora).split(" ")[0] # Verificar o estado if driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[25]').is_selected(): if re.search('INTERIOR', str(tipo_contratacao).upper()) or re.search('INTERIOR', str(tag_operadora).upper()): area = 'SP INTERIOR 1' else: area = 'SP CAPITAL' elif driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[19]').is_selected(): area = 'RIO DE JANEIRO' elif driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[26]').is_selected(): area = 'SERGIPE' elif driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[13]').is_selected(): area = 'MINAS GERAIS' elif driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[7]').is_selected(): area = 'ESPIRITO SANTO' elif driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[24]').is_selected(): area = 'SANTA CATARINA' elif driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[11]').is_selected(): area = 'MATO GROSSO' elif driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[12]').is_selected(): area = 'MATO GROSSO DO SUL' elif driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[16]').is_selected(): area = 'PARANÁ' elif driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[4]').is_selected(): area = 'AMAZONAS' if re.search('SEM COPART', str(tag_operadora).upper()): coparticipacao = 2 elif re.search('COM COPART', str(tag_operadora).upper()): coparticipacao = 1 # Verificar se e hospitalar if re.search('HOSPITALAR', tag_operadora): hospitalar = 2 else: hospitalar = 1 if re.search('LIVRE ADESÃO', str(tipo_contratacao).upper()): tipo_contratacao = 'OPCI' elif re.search('COMPULSÓRI', str(tipo_contratacao).upper()): tipo_contratacao = 'COMP' if re.search('SULAMÉRICA', str(nome_operadora).upper()) and not re.search('COM REMISSÃO', str(tipo_contratacao).upper()): tag_operadora = nome_operadora nome_operadora = nome_operadora.split(" ")[0] # Verificar de a area e de sao paulo if driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[25]').is_selected(): if re.search('TARIFA 1', str(tag_operadora).upper()): area = 'SP CAPITAL' elif re.search('TARIFA 2', str(tag_operadora).upper()): area = 'SP INTERIOR 1' elif re.search('TARIFA 3', str(tag_operadora).upper()): area = 'SP INTERIOR 2' else: area = 'SP CAPITAL' if re.search("CAMPINAS", str(tipo_contratacao).upper()): area = 'CAMPINAS' elif driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[13]').is_selected(): area = "MINAS GERAIS" elif driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[11]').is_selected(): area = 'MATO GROSSO' elif driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[12]').is_selected(): area = 'MATO GROSSO DO SUL' if re.search('SEM COPART', str(tag_operadora).upper()): coparticipacao = 2 elif re.search('COM COPART', str(tag_operadora).upper()): if re.search('10', tipo_contratacao): coparticipacao = 1 elif re.search('20', tipo_contratacao): coparticipacao = 3 elif re.search('30', tipo_contratacao): coparticipacao = 5 else: print("ATENÇAO PASSOU DIRETO PELA COPART") coparticipacao = 2 # Verificar se e hospitalar if re.search('HOSPITALAR', tag_operadora): hospitalar = 2 coparticipacao = 2 else: hospitalar = 1 if re.search('COMPULSÓRIO', str(tag_operadora).upper()): tipo_contratacao = 'COMP' elif re.search('FLEX', str(tag_operadora).upper()): tipo_contratacao = 'OPCI' else: tipo_contratacao = 'OPCI' if re.search('SOMPO', str(nome_operadora).upper()): tag_operadora = nome_operadora nome_operadora = "SOMPO SAÚDE" # Verificar de a area e de sao paulo if driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[25]').is_selected(): if re.search('SEM COPART', str(tag_operadora).upper()): coparticipacao = 2 elif re.search('COM COPART', str(tag_operadora).upper()): if re.search('10', tipo_contratacao): coparticipacao = 1 elif re.search('20', tipo_contratacao): coparticipacao = 3 elif re.search('30', tipo_contratacao): coparticipacao = 5 # Verificar se e hospitalar if re.search('HOSPITALAR', tag_operadora): hospitalar = 2 else: hospitalar = 1 if re.search('INTERIOR', str(tag_operadora).upper()): area = 'SP INTERIOR 1' else: area = 'SP CAPITAL' if re.search('REGIONAL', str(tipo_contratacao).upper()): regional = True else: regional = False if re.search('OPCIONAL', str(tipo_contratacao).upper()): tipo_contratacao = 'OPCI' else: tipo_contratacao = 'COMP' if re.search('PORTO SEGURO', str(nome_operadora).upper()): tag_operadora = nome_operadora nome_operadora = "PORTO SEGURO" # Verificar de a area e de sao paulo if driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[25]').is_selected(): if re.search('INTERIOR', str(tag_operadora).upper()): area = 'SP INTERIOR 1' else: area = 'SP CAPITAL' elif driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[19]').is_selected(): area = 'RIO DE JANEIRO' if re.search('SEM COPART', str(tag_operadora).upper()): coparticipacao = 2 elif re.search('COM COPART', str(tag_operadora).upper()): if re.search('10', tipo_contratacao): coparticipacao = 1 elif re.search('20', tipo_contratacao): coparticipacao = 3 elif re.search('30', tipo_contratacao): coparticipacao = 5 # Verificar se e hospitalar if re.search('HOSPITALAR', tag_operadora): hospitalar = 2 else: hospitalar = 1 if re.search('REGIONAL', str(tipo_contratacao).upper()): regional = True else: regional = False if re.search('OPCIONAL', str(tipo_contratacao).upper()): tipo_contratacao = 'OPCI' else: tipo_contratacao = 'COMP' if re.search('ALLIANZ', str(nome_operadora).upper()): tag_operadora = nome_operadora nome_operadora = "ALLIANZ" # Verificar de a area e de sao paulo if driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[25]').is_selected(): area = 'SP CAPITAL' elif driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[19]').is_selected(): area = 'RIO DE JANEIRO' elif driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[13]').is_selected(): area = 'MINAS GERAIS' if re.search('SEM COPART', str(tag_operadora).upper()): coparticipacao = 2 elif re.search('COM COPART', str(tag_operadora).upper()): if re.search('20% PARA CONSULTAS E EXAMES E 30% PARA PS', str(tipo_contratacao).upper()): coparticipacao = 3 elif re.search('20% PARA CONSULTAS E EXAMES, LIMITADO A', str(tipo_contratacao).upper()): coparticipacao = 3 elif re.search('30% PARA CONSULTAS E EXAMES, LIMITADO A', str(tipo_contratacao).upper()): coparticipacao = 5 else: coparticipacao = 0 # Verificar se e hospitalar if re.search('HOSPITALAR', tag_operadora): hospitalar = 2 else: hospitalar = 1 tipo_contratacao = 'COMP' if re.search('NOTREDAME', str(nome_operadora).upper()): tag_operadora = nome_operadora nome_operadora = "NOTREDAME" # Verificar de a area e de sao paulo if driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[25]').is_selected(): if re.search('INTERIOR', str(tag_operadora).upper()) or re.search('SOROCABA', str(tipo_contratacao).upper()): area = 'SP INTERIOR 1' else: area = 'SP CAPITAL' if re.search(' MEI', str(tag_operadora).upper()): id_tipo_empresa = 1 else: id_tipo_empresa = 2 elif driver.find_element_by_xpath('//*[@id="simulacao_regiao"]/option[19]').is_selected(): area = 'RIO DE JANEIRO' if re.search('SEM COPART', str(tag_operadora).upper()): coparticipacao = 2 elif re.search('COM COPART', str(tag_operadora).upper()): coparticipacao = 1 # Verificar se e hospitalar if re.search('HOSPITALAR', tag_operadora): hospitalar = 2 else: hospitalar = 1 tipo_contratacao = 'COMP' sql = f"SELECT " \ f"tbl_operadora.id AS id_operadora, " \ f"tbl_area.id as id_area, " \ f"tbl_tipo_contratacao.id as id_tipo_contratacao " \ f"FROM tbl_operadora, tbl_area, tbl_tipo_contratacao " \ f"WHERE tbl_operadora.titulo like '{nome_operadora}' " \ f"and tbl_area.area like '%{area}' " \ f"and tbl_tipo_contratacao.titulo like '%{tipo_contratacao}%';" print(sql) res = cursor.execute(sql) data_reajuste = driver.find_element_by_xpath( f'//*[@id="div-planos-loaded"]/table/tbody/tr[{num + 1}]/td[2]/ul/li[1]').get_attribute( 'title') data_reajuste = str(data_reajuste).split("/") data_reajuste = f'{data_reajuste[2]}-{data_reajuste[1]}-{data_reajuste[0]}' # Converter a string em objeto tipo Date data_reajuste = datetime.strptime(str(data_reajuste), '%Y-%m-%d').date() # print(data_reajuste) print(res) if res > 0: select = cursor.fetchall()[0] print(select) id_operadora = select[0] id_area = select[1] tipo_contratacao = select[2] id_tipo_contratacao = select[2] # print(id_operadora, id_area, tipo_contratacao) sql = f"select * from tbl_preco_faixa_etaria " \ f"where id_operadora = {id_operadora} " \ f"and id_area = {id_area} " \ f"and hospitalar = {hospitalar} " \ f"and id_tipo_contratacao = {id_tipo_contratacao} " \ f"and id_coparticipacao = {coparticipacao} " \ f"and ultimo_reajuste = '{data_reajuste}';" print(f"\n{sql}") res = cursor.execute(sql) print(res) cursor.close() conn.close() return True
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 obterDados(driver, tipo_tabela_option, administradora_option, operadora_option, entidade_option): global hospitalar global id_coparticipacao global id_operadora global min_vidas global nome_administradora_option global nome_operadora_option global nome_entidade_option global ultimo conn = conexao.myConexao() cursor = conn.cursor() # desmarcar as informaçoes opcionais for i in range(5): driver.find_element_by_id(f"simulacao_info_{str(i)}").click() # colocar no minimo uma vida por faixa_etaria for i in range(10): # driver.find_element_by_xpath(f'//*[@id="simulacao_faixas_{str(i)}_vidas"]').send_keys(Keys.DELETE) driver.find_element_by_xpath( f'//*[@id="simulacao_faixas_{str(i)}_vidas"]').clear() if min_vidas >= 29 and i == 5: driver.find_element_by_xpath( f'//*[@id="simulacao_faixas_{str(i)}_vidas"]').send_keys(30) else: driver.find_element_by_xpath( f'//*[@id="simulacao_faixas_{str(i)}_vidas"]').send_keys(1) # TIPO DE PLANO -> saude driver.find_element_by_xpath( '//*[@id="simulacao_tipoPlano"]/option[2]').click() # Tipo de Tabela driver.find_element_by_xpath( f'//*[@id="simulacao_tipoTabela"]/option[{tipo_tabela_option}]').click( ) while aguardandoCarregamento( "display: block; position: static; zoom: 1;", driver.find_element_by_id('div-adesao').get_attribute('style')): pass try: WebDriverWait(driver, 10).until( EC.presence_of_element_located(( By.XPATH, f'//*[@id="simulacao_adesao_administradora"]/option[{administradora_option}]' ))) except: print("Nao achou a administradora!") driver.close() exec() finally: pass # Selecionar a Adimistradora administradora = driver.find_element_by_xpath( f'//*[@id="simulacao_adesao_administradora"]/option[{administradora_option}]' ) nome_administradora_option = administradora.text if nome_administradora_option != '': administradora.click() while aguardandoCarregamento( "display: block; position: static; zoom: 1;", driver.find_element_by_id('div-adesao').get_attribute( 'style')): pass try: WebDriverWait(driver, 10).until( EC.presence_of_element_located(( By.XPATH, f'//*[@id="simulacao_adesao_opes"]/option[{operadora_option}]' ))) except: print("Nao achou a Operadora!") driver.close() exec() finally: pass # Selecionando a operadora operadora = driver.find_element_by_xpath( f'//*[@id="simulacao_adesao_opes"]/option[{operadora_option}]') nome_operadora_option = operadora.text # print("selecionando operadora") if nome_operadora_option != '': # variaçoes dos nomes AMIL if re.search('AMIL', operadora.text): nome_operadora = str(operadora.text).split('-')[0].strip() else: nome_operadora = str(operadora.text).split(' ')[0] sql = f"select * from tbl_operadora where titulo like '{nome_operadora}';" # print(sql) res = cursor.execute(sql) if res > 0: # print("Achou a operadora!") id_operadora = cursor.fetchall()[0][0] if re.search('COM COPART', operadora.text): id_coparticipacao = 1 elif re.search('SEM COPART', operadora.text): id_coparticipacao = 2 elif re.search('HOSPITALAR', operadora.text): id_coparticipacao = 2 hospitalar = 2 operadora.click() while aguardandoCarregamento( "display: block; position: static; zoom: 1;", driver.find_element_by_id('div-adesao').get_attribute( 'style')): pass try: WebDriverWait(driver, 10).until( EC.presence_of_element_located(( By.XPATH, f'//*[@id="simulacao_adesao_entidade"]/option[{entidade_option}]' ))) except: print("Nao achou a Entidade!") driver.close() exec() finally: pass # print("selecionando entidade") entidades_selecionada = driver.find_element_by_xpath( f'//*[@id="simulacao_adesao_entidade"]/option[{entidade_option}]' ) nome_entidade_option = entidades_selecionada.text entidades_selecionada.click() while aguardandoCarregamento( "display: block; position: static; zoom: 1;", driver.find_element_by_id('div-adesao').get_attribute( 'style')): pass # quantidade de entidades quantidade_operadoras = len( driver.find_element_by_id('simulacao_adesao_entidade'). find_elements_by_tag_name('option')) - 1 # print('Quantidade de Entidades:', quantidade_operadoras) # pesquisar driver.find_element_by_id('btn-get-planos').click() # while aguardandoCarregamento("position: static; zoom: 1; margin-top: 0px;", driver.find_element_by_id('div-planos').get_attribute('style')): # pass try: WebDriverWait(driver, 15).until( EC.presence_of_element_located( (By.CLASS_NAME, 'sim-op-planos'))) finally: time.sleep(1) quantidade_results = len( driver.find_elements_by_class_name('sim-op-planos')) print(f"Achou {quantidade_results} na pesquisa!") count = 0 for i in range(0, quantidade_results, 2): # print(f"\nLendo resultados {i} e {i + 1} ...") if i >= 0 and i <= 1000: print(f"\nLendo resultados {i + 1} e {i + 2} ...") if count > 0: simulacaoAdesao(driver, administradora_option, operadora_option, entidade_option) count = 1 try: WebDriverWait(driver, 15).until( EC.presence_of_element_located( (By.CLASS_NAME, 'sim-op-planos'))) finally: entidade_nome = driver.find_element_by_xpath( f'//*[@id="div-planos-loaded"]/table/tbody/tr[{i + 1}]/td[1]/span/strong' ).text sql = f"select * from tbl_sindicato where titulo like '%{entidade_nome}%';" res = cursor.execute(sql) if res > 0: id_sindicato = cursor.fetchall()[0][0] data_reajuste = driver.find_element_by_xpath( f'//*[@id="div-planos-loaded"]/table/tbody/tr[{i + 1}]/td[2]/ul/li[1]' ).get_attribute('title') data_reajuste = str(data_reajuste).split( "/") data_reajuste = f'{data_reajuste[2]}-{data_reajuste[1]}-{data_reajuste[0]}' tipo_area = str( driver.find_element_by_xpath( f'//*[@id="div-planos-loaded"]/table/tbody/tr[{i + 1}]/td[1]/b' ).text).split("-") if len(tipo_area) > 1: area_nome = str( driver.find_element_by_xpath( f'//*[@id="div-planos-loaded"]/table/tbody/tr[{i + 1}]/td[1]/b' ).text).split("-")[1].strip() sql = f"select * from tbl_area where area like '%{area_nome}%';" res = cursor.execute(sql) if res > 0: id_area = cursor.fetchall()[0][0] else: print( "Nao achou a area Selecionada") else: if str( driver.find_element_by_xpath( '//*[@id="simulacao_regiao"]/option[25]' ).text) == "São Paulo": id_area = 1 sql = f"select * from tbl_preco_faixa_etaria where id_operadora = {id_operadora} and id_sindicato = {id_sindicato} and ultimo_reajuste = '{data_reajuste}' and id_area = {id_area} and hospitalar = {hospitalar};" res = cursor.execute(sql) if res >= 0: # if res > 0: # print(f"Nome do sindicato '{entidade_nome}'") if i + 1 >= quantidade_results: driver.execute_script( f"document.getElementsByClassName('select-all')[{i}].click();" ) ultimo = True else: driver.execute_script( f"document.getElementsByClassName('select-all')[{i}].click();" f"document.getElementsByClassName('select-all')[{i + 1}].click();" ) time.sleep(0.5) driver.execute_script( "document.getElementById('btSubmit').click()" ) time.sleep(0.5) pegarDados(driver, cursor, id_sindicato, data_reajuste) driver.execute_script("history.back()") time.sleep(0.5) cursor.close() conn.commit() conn.close()
from datetime import datetime 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)
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}")
def notificacao(driver): conn = conexao.myConexao() try: WebDriverWait(driver, 5).until( EC.presence_of_element_located((By.ID, 'twitter-widget-0'))) except: driver.find_elements_by_class_name("icone exit extend")[0].click() login.login(driver) finally: try: WebDriverWait(driver, 5).until( EC.presence_of_element_located((By.ID, 'twitter-widget-0'))) finally: pass driver.switch_to.frame(driver.find_element_by_id('twitter-widget-0')) timeLine = driver.find_elements_by_class_name("timeline-Tweet-text") cursor = conn.cursor() sql = "SELECT * FROM tbl_operadora;" cursor.execute(sql) operadoras = cursor.fetchall() numbers = acesso.getNumbersWhatsNotificationPrice count = 0 for operadora in operadoras: nomeOperadora = operadora[1] for line in timeLine: if re.search(nomeOperadora.upper(), str(line.text).upper()): for number in numbers: # Enviar notificaçao pelo whats message = "*Notificaçao do simulador online*\n\n" \ f"{line.text}" select = f"select count(id) as qtt from tbl_log_whatsapp_msg " \ f"where numero like '%{number}%' and mensagem like '%{message}%';" cursor.execute(select) resSelect = cursor.fetchone() qtt = resSelect[0] if qtt == 0: res = apiWhats.sendMessageAlert(message=message, number=number) if res: if int(res.status_code) == 200: count += 1 print("Mensagem Enviada com Sucesso!") insert = f"INSERT INTO tbl_log_whatsapp_msg(numero, mensagem, retorno) " \ f"values ('{number}', '{message}', '{res.text}');" cursor.execute(insert) conn.commit() else: print( f"Erro ao enviar a mensagem! STATUS CODE -> {res}" ) else: print(f"Envio de mensagem (status): {res}") else: print( "Mensagem ja consta como enviada no sistema!") # CAso nao tenha nenhuma atualização de preços, parar o processo if count == 0: message = "*Nenhuma* notificaçao de atualização de preços!" print(message) # res = apiWhats.sendMessage(message=message, number=number) driver.switch_to.default_content() cursor.close() conn.commit() conn.close()
def simulador(driver): global count count += 1 try: WebDriverWait(driver, 5).until( EC.presence_of_element_located( (By.XPATH, '//*[@id="geral-content"]/nav/ul/li[2]/ul/li[1]/a'))) except: print("Nao achou a aba do simulador") if count == 3: driver.close() exit() simulador(driver) finally: # Notificaçao de atualizaçao de preços, Pagina de boas vindas do simulador notificacao.notificacao(driver=driver) # acessar area de simulacao driver.execute_script("document.getElementsByTagName('a')[5].click()") try: WebDriverWait(driver, 15).until( EC.presence_of_element_located((By.ID, 'simulacao__token'))) except: print("Nao abriu a pagina de simulacao") driver.close exit() # simulador(driver) finally: # SIMULAÇAO # TIPO DE PLANO -> saude driver.find_element_by_xpath( '//*[@id="simulacao_tipoPlano"]/option[2]').click() pesquisa = False if pesquisa: # Selecionar o tipo de tabela print("Seleciona o tipo de tabela!") while driver.find_element_by_xpath( '//*[@id="simulacao_tipoTabela"]/option[1]' ).is_selected(): time.sleep(0.5) for i, item in enumerate( driver.find_element_by_id('simulacao_tipoTabela'). find_elements_by_tag_name('option')): # print(i, item.get_attribute("selected")) if item.get_attribute("selected"): tipo_tabela_option = i + 1 if tipo_tabela_option == 5: # ADESAO # Selecionando a Administradora print("Seleciona a administradora!") while driver.find_element_by_xpath( '//*[@id="simulacao_adesao_administradora"]/option[1]' ).is_selected(): time.sleep(0.5) for i, item in enumerate( driver.find_element_by_id( 'simulacao_adesao_administradora'). find_elements_by_tag_name('option')): if item.get_attribute("selected"): nome_administradora = item.text administradora_option = i + 1 sql = f"select * from tbl_administradora where titulo like '%{nome_administradora}%';" conn = conexao.myConexao() cursor = conn.cursor() res = cursor.execute(sql) if res > 0: # print(cursor.fetchall()[0][0]) id_administradora = cursor.fetchall()[0][0] print(id_administradora) # Selecionando a Operadora print("Seleciona a Operadora!") while driver.find_element_by_xpath( '//*[@id="simulacao_adesao_opes"]/option[1]' ).is_selected(): time.sleep(0.5) for i, item in enumerate( driver.find_element_by_id('simulacao_adesao_opes'). find_elements_by_tag_name('option')): if item.get_attribute("selected"): operadora_option = i + 1 # Selecionando a Entidade print("Seleciona a Entidade!") while driver.find_element_by_xpath( '//*[@id="simulacao_adesao_entidade"]/option[1]' ).is_selected(): time.sleep(0.5) driver.implicitly_wait(15) for i, item in enumerate( driver.find_element_by_id( 'simulacao_adesao_entidade'). find_elements_by_tag_name('option')): if item.get_attribute("selected"): entidade_option = i + 1 print(tipo_tabela_option, administradora_option, operadora_option, entidade_option) selecaoAdesao.obterDados(driver, tipo_tabela_option, administradora_option, operadora_option, entidade_option) elif tipo_tabela_option == 4: simulacaoTradicional.obterDados(driver, tipo_tabela_option) else: tipo_tabela_option = 4 simulacaoTradicional.obterDados(driver, tipo_tabela_option)