Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


CNPJ em Pythom -Codigo, Resumos de Informática

Fax o imput do CNPJ em Pythom, codigo em selenium que le uma lista e CNPJ e imput em sistemas web

Tipologia: Resumos

2024

Compartilhado em 04/03/2026

marcelo-lopes-dcs
marcelo-lopes-dcs 🇧🇷

1 documento

1 / 5

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException, NoSuchElementException
import time
import sys
from datetime import datetime
# Lista de CNPJs
cnpjs = [
"00000000000000",
]
# Configurações
WAIT_TIMEOUT = 10
SHORT_WAIT = 2
CNPJS_POR_LOTE = 3
INTERVALO_MINUTOS = 1
def setup_driver():
"""Configura e retorna o driver do Chrome"""
options = webdriver.ChromeOptions()
# options.add_argument('--headless') # Descomente para modo headless
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--start-maximized')
return webdriver.Chrome(options=options)
def fazer_login(driver):
"""Faz login no sistema"""
print("=== FAZENDO LOGIN ===")
driver.get("https://xxx/web/login")
# Preencher usuário
usuario = WebDriverWait(driver, WAIT_TIMEOUT).until(
EC.presence_of_element_located((By.ID, "login"))
)
usuario.clear()
usuario.send_keys("abc")
# Preencher senha
senha = driver.find_element(By.ID, "password")
senha.clear()
senha.send_keys("xyz")
# Clicar no botão de login
btn_login = driver.find_element(By.XPATH, "//button[@type='submit']")
btn_login.click()
# Aguardar login ser concluído
WebDriverWait(driver, WAIT_TIMEOUT).until(
EC.presence_of_element_located((By.CLASS_NAME, "o_main_navbar"))
pf3
pf4
pf5

Pré-visualização parcial do texto

Baixe CNPJ em Pythom -Codigo e outras Resumos em PDF para Informática, somente na Docsity!

from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import TimeoutException, NoSuchElementException import time import sys from datetime import datetime

Lista de CNPJs

cnpjs = [ "00000000000000", ]

Configurações

WAIT_TIMEOUT = 10 SHORT_WAIT = 2 CNPJS_POR_LOTE = 3 INTERVALO_MINUTOS = 1 def setup_driver(): """Configura e retorna o driver do Chrome""" options = webdriver.ChromeOptions()

options.add_argument('--headless') # Descomente para modo headless

options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') options.add_argument('--start-maximized') return webdriver.Chrome(options=options) def fazer_login(driver): """Faz login no sistema""" print("=== FAZENDO LOGIN ===") driver.get("https://xxx/web/login")

Preencher usuário

usuario = WebDriverWait(driver, WAIT_TIMEOUT).until( EC.presence_of_element_located((By.ID, "login")) ) usuario.clear() usuario.send_keys("abc")

Preencher senha

senha = driver.find_element(By.ID, "password") senha.clear() senha.send_keys("xyz")

Clicar no botão de login

btn_login = driver.find_element(By.XPATH, "//button[@type='submit']") btn_login.click()

Aguardar login ser concluído

WebDriverWait(driver, WAIT_TIMEOUT).until( EC.presence_of_element_located((By.CLASS_NAME, "o_main_navbar"))

print(" ✓ Login realizado com sucesso!") def aguardar_intervalo(lote_atual, total_lotes): """Aguarda o intervalo entre lotes""" if lote_atual < total_lotes: print(f"\n ⏰ AGUARDANDO {INTERVALO_MINUTOS} MINUTO(S) PARA PRÓXIMO LOTE...") for i in range(INTERVALO_MINUTOS * 60, 0, -1): minutos = i // 60 segundos = i % 60 sys.stdout.write(f"\r ⏳ Próximo lote em: {minutos:02d}:{segundos:02d}") sys.stdout.flush() time.sleep(1) print("\r ✓ Intervalo concluído! Continuando...") def processar_cnpj(driver, cnpj, index, total): """Processa um CNPJ individual""" print(f"\n=== PROCESSANDO CNPJ {index} de {total}: {cnpj} ===") url_formulario = "https://xxxx/web#menu_id=371&cids=1&action=162&model=sped.participante&view_typ e=form"

Ir para o formulário

driver.get(url_formulario) time.sleep(SHORT_WAIT)

Preencher CNPJ

campo_cnpj = WebDriverWait(driver, WAIT_TIMEOUT).until( EC.presence_of_element_located((By.ID, "cnpj_cpf_0")) ) campo_cnpj.clear() campo_cnpj.send_keys(cnpj) print(f" ✓ CNPJ preenchido: {cnpj}")

Clicar no botão Salvar

btn_salvar = WebDriverWait(driver, WAIT_TIMEOUT).until( EC.element_to_be_clickable((By.XPATH, "//button[contains(@class, 'o_form_button_save')]")) ) btn_salvar.click() print(" ✓ Botão Salvar clicado")

Aguardar e verificar resultado

time.sleep(SHORT_WAIT) return verificar_resultado(driver, cnpj) def verificar_resultado(driver, cnpj): """Verifica se o CNPJ foi salvo ou se já existe""" try:

Verificar se aparece mensagem de erro de CNPJ duplicado

Dividir CNPJs em lotes

total_cnpjs = len(cnpjs) lotes = [cnpjs[i:i + CNPJS_POR_LOTE] for i in range(0, total_cnpjs, CNPJS_POR_LOTE)] total_lotes = len(lotes) print(f"\n 📊 TOTAL: {total_cnpjs} CNPJs divididos em {total_lotes} lote(s) de {CNPJS_POR_LOTE}") print(f" ⏰ Intervalo: {INTERVALO_MINUTOS} minuto(s) entre lotes")

Processar cada lote

for lote_num, lote in enumerate(lotes, 1): print(f"\n{'='50}") print(f" 📦 PROCESSANDO LOTE {lote_num} de {total_lotes}") print(f" 🕒 Início: {datetime.now().strftime('%H:%M:%S')}") print(f" 📋 CNPJs no lote: {len(lote)}") print(f"{'='50}")

Processar cada CNPJ do lote atual

cnpjs_processados = 0 cnpjs_sucesso = 0 cnpjs_duplicados = 0 cnpjs_erro = 0 for i, cnpj in enumerate(lote, 1): cnpj_global_index = (lote_num - 1) * CNPJS_POR_LOTE + i resultado = processar_cnpj(driver, cnpj, cnpj_global_index, total_cnpjs) cnpjs_processados += 1 if resultado == "sucesso": cnpjs_sucesso += 1 elif resultado == "duplicado": cnpjs_duplicados += 1 else: cnpjs_erro += 1

Resumo do lote

print(f"\n 📊 RESUMO DO LOTE {lote_num}:") print(f" ✅ Sucesso: {cnpjs_sucesso}") print(f" ⚠ Duplicados: {cnpjs_duplicados}") print(f" ❌ Erros: {cnpjs_erro}") print(f" 📦 Total processado: {cnpjs_processados}")

Aguardar intervalo entre lotes (exceto no último lote)

if lote_num < total_lotes: aguardar_intervalo(lote_num, total_lotes)

Resumo final

print(f"\n{' 🎉 '*20}") print("PROCESSAMENTO CONCLUÍDO!") print(f"Total de CNPJs processados: {total_cnpjs}") print(f"Lotes processados: {total_lotes}")

print(f"Horário de conclusão: {datetime.now().strftime('%H:%M:%S')}") print(f"{' 🎉 '*20}") except Exception as e: print(f"\n ❌ ERRO CRÍTICO: {e}") print("Detalhes do erro:", type(e).name) finally: print("\nFechando navegador...") driver.quit() if name == "main": main()