app

 avatar
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