Um dos trabalhos apresentados no Encontro da Comunidade no dia 27/05/23 por Altair Ribeiro
Muitas vezes precisamos obter endereços completos para a realização de testes de software, ou ainda para incluir dados em um formulário na Web.
O Selenium é uma biblioteca muito utilizada para testes de software e que pode ser utilizada a realização desse tipo de trabalho repetitivo.
Você precisa ter o geckodriver.exe (baixe aqui) ou o chromedriver.exe (baixe aqui) para que o código fonte em Python em conjunto com a biblioteca Selenium crie uma instância do Browser e controle todo o processo de execução.
Tanto o Geckodriver.exe quanto o Chromedriver.exe precisam estar na mesma pasta do código fonte.
Utilizamos um site muito utilizado por Analistas de Qualidade para a geração de massa de dados.
É um site muito conhecido nesse meio e também muito bem montado e que contribui muito para elevarmos o nível da disciplina de qualidade no Brazil.
É o site www.4devs.com.br!
Vamos ao código fonte.
# importar as bibliotecas necessárias
import os
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import random
import re
# Definir a quantidade de endereços que serão gravados no arquivo "ceps.txt"
qtde= 5
# Inclusão de um Try para obter o código de erro em caso de falha do código fonte e o código que será executado
try:
path_atual = os.getcwd()
print('path:' , path_atual)
# driver = webdriver.Chrome()
driver = webdriver.Firefox()
driver.maximize_window()
# URL que será acessada
url = 'https://www.4devs.com.br/gerador_de_cep'
driver.get(url)
time.sleep(2)
cont = 0
estado = driver.find_element(By.ID, 'cep_estado')
estado.send_keys('SP')
time.sleep(5)
estado = driver.find_element(By.ID, 'cep_cidade')
estado.send_keys('Santos')
time.sleep(5)
with open("ceps.txt",'a', newline="") as arquivo:
while cont <qtde:
submit = driver.find_element(By.ID,'btn_gerar_cep')
#time.sleep(3)
submit.click()
time.sleep(5)
cep = driver.find_element(By.ID, 'cep')
cep.click()
endereco = driver.find_element(By.ID, 'endereco')
endereco.click()
bairro = driver.find_element(By.ID, 'bairro')
bairro.click()
cidade = driver.find_element(By.ID, 'cidade')
cidade.click()
estado = driver.find_element(By.ID, 'estado')
estado.click()
time.sleep(5)
arquivo.write(re.sub("\-","",cep.text) + ';' + endereco.text + ';' + str(random.randint(1,1000)) + ';' + 'ap. ' + str(random.randint(1,100)) + ';' + bairro.text + ';' + cidade.text + ';' +estado.text + '\n')
cont += 1
#print(cont , ". ", cep.text + ';' + endereco.text + ';' + str(random.randint(1,1000)) + ';' + 'ap. ' + str(random.randint(1,100)) + ';' + bairro.text + ';' + cidade.text + ';' +estado.text)
print(cont , ". ", re.sub("\-","",cep.text) + ';' + endereco.text + ';' + str(random.randint(1,1000)) + ';' + 'ap. ' + str(random.randint(1,100)) + ';' + bairro.text + ';' + cidade.text + ';' +estado.text)
arquivo.close()
driver.close()
# Tratamentos dos erros para uma melhor identificação em caso de falha
except OSError as err:
#<aqui vai o erro de Sistema Operacional>
print("Erro de S.O. : {0}".format(err))
except ValueError:
# <aqui vai o erro do programa>
print("Não pode converter data para inteiro.")
except BaseException as err:
#<aqui vão exceções que aconteçam no programa>
print(f"Inesperado {err=}, {type(err)=}")
raise
Se tiver dúvidas no uso do código, entre na comunidade no Telegram (https://t.me/+aLIZYCmBJfH-qPGs).
Até a próxima!