app
user_0526174
python
5 months ago
3.8 kB
4
Indexable
import time from seleniumbase import SB import openpyxl def Extrair_email(): class Extracao: def __init__(self): self.workbook = openpyxl.load_workbook('URL.xlsx') self.sheet_Emails = self.workbook.active self.max_processos = 30 self.pausa_duracao = 10 * 60 # Pausa de 10 minutos em segundos def body_code(self, url, row): with SB(uc=True, incognito=True, headless=True) as sb: sb.open(url) time.sleep(3) # Aguarda o carregamento da página # Verifica e trata captcha, se presente if sb.is_element_visible('iframe[src*="hcaptcha"]'): with sb.frame_switch('iframe[src*="hcaptcha"]'): # Pausa para resolver o captcha manualmente time.sleep(5) time.sleep(5) # Aguarda a verificação do captcha emails = [] # Tenta o primeiro XPath email_elements_1 = sb.find_elements( '//td[@class="cell-emails"]') if email_elements_1: emails = [element.text for element in email_elements_1] print("") else: print("") # Se não encontrar emails no primeiro, tenta o segundo XPath if not emails: email_elements_2 = sb.find_elements( '//p[contains(text(), "E-mail:")]/span[@class="tooltip"]/b[@class="copy"]' ) if email_elements_2: emails = [element.text for element in email_elements_2] pass else: pass # Se não encontrar emails no segundo, tenta o terceiro XPath if not emails: try: first_element = sb.find_element( '//div/ul/li/a/span[2]') email = first_element.text if email: emails = [email] pass except Exception as e: pass if emails: print(f"Emails extraídos.") else: print("Nenhum email encontrado em nenhum dos XPaths.") # Coluna B (índice 2) em diante for col_index, email in enumerate(emails, start=2): self.sheet_Emails.cell( row=row, column=col_index, value=email) self.workbook.save('URL.xlsx') print(f"Processamento da URL {row} concluído.") def processar_emails(self): contador = 0 for row in range(2, self.sheet_Emails.max_row + 1): # Lê a URL da coluna A url = self.sheet_Emails.cell(row=row, column=1).value if url: print(f"Processando URL na linha {row}...") self.body_code(url, row) contador += 1 # Verifica se atingiu o número máximo de URLs processadas if contador >= self.max_processos: print(f"Processou { contador} URLs. Pausando por 10 minutos...") time.sleep(self.pausa_duracao) # Pausa de 10 minutos contador = 0 # Reseta o contador após a pausa print("Todas as URLs foram processadas.") extracao = Extracao() extracao.processar_emails()
Editor is loading...
Leave a Comment