app
user_0526174
python
a year ago
3.8 kB
15
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