Prezados, boa tarde
Estou montando um robô que tem a seguinte finalidade:
A partir de uma relação de CNPJ presente numa planilha Excel, o robô pegará CNPJ por CNPJ, fará o input do dado num campo de um formulário web, clicará no botão pesquisar e quando o site redirecionar para a página de pesquisa, ele irá copiar um dado específico presente na página, e irá colar esse mesmo dado numa planilha Excel.
Fará esse loop para cada linha presente na planilha.
Meio que aos trancos e barrancos consegui montar uma boa estrutura:
from playwright.sync_api
import sync_playwright
from selenium.webdriver.common.keys
import Keys
from bs4
import BeautifulSoup
from selenium
import webdriver
from selenium.webdriver.common.by import By
import requests
import pandas
as pd
import time
import openpyxl
nome_do_arquivo =
'Construtora.xlsx'
url_do_forms =
"https://cnpj.biz"
df = pd.read_excel(nome_do_arquivo)
headers = {
"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"}
for index, row
in df.iterrows():
print(
"Index: " +
str(index) +
str(row[
"Nome"]))
chrome = webdriver.Chrome(
executable_path=
'chromedriver.exe')
chrome.get(url_do_forms)
elemento_texto_nome = chrome.find_element(By.XPATH,
'/html/body/div/main/div/div[1]/div/form/div[1]/div/input')
elemento_texto_nome.send_keys(
str(row[
"Nome"]))
elemento_texto_nome = chrome.find_element(By.XPATH,
'/html/body/div/main/div/div[1]/div/form/div[2]/div/button').click()
elemento_texto_nome = chrome.find_element(By.XPATH,
'/html/body/div/main/div[3]/ul/li/a/div/div[1]/p').click()
requisicao = requests.get(url_do_forms,
headers=headers)
print(requisicao)
site = BeautifulSoup(requisicao.text,
"html.parser")
titulo = site.find(
"title")
print(titulo)
pesquisa = site.find_all(
"b",
class_=
"copy")
print(pesquisa)
pesquisa2 = site.find_all(
"p")
print(pesquisa2)
chrome.quit
Basicamente minha proposta inicial eu consegui atender, fiquei muito feliz por isso, principalmente por não ser um perito no assunto.
Meu código está realizado exatamente minha proposta, porém, com um único problema:
Problema: Pelo fato de a URL receber toda vez um número de CNPJ diferente faz com que meu código fique sempre engessado na URL: url_do_forms = "https://cnpj.biz"
Considerando esse mesmo problema, toda vez que faço a raspagem dos dados, e pelo fato da URL ser sempre a mesma, toda vez os dados coletados são exatamente os mesmos, o que não faz sentido algum, uma vez que cada CNPJ possui informações distintas.
Como eu já consegui fazer: 1 - com que meu robô leia os dados da planilha por meio do for, 2 - passe estes mesmos dados por meio do formulário web, 3 - ele esta fazendo a raspagem de acordo com a regra que eu criei (ainda que de forma errada) a única ponta que falta eu fechar é a questão da URL, pois preciso que ele entenda que a URL muda toda vez que um novo CNPJ é lido, aí vou conseguir fazer com que a raspagem seja feita de forma correta.
Observação: Eu cheguei a utilizar esse código inicialmente, onde utilizava a biblioteca playwright, porém estava caindo no problema de conseguir passar um parâmetro de CNPJ para consulta, nao estava conseguindo fazer o link das consultas dos dados presentes na planilha.
from playwright.sync_api
import sync_playwright
import time
with sync_playwright()
as p:
navegador = p.chromium.launch(
headless=
False)
pagina = navegador.new_page()
pagina.goto(
"https://cnpj.biz/")
pagina.fill(
'xpath=/html/body/div/main/div/div[1]/div/form/div[1]/div/input',
"82244971000141")
pagina.locator(
'xpath=/html/body/div/main/div/div[1]/div/form/div[2]/div/button').click()
pagina.locator(
'xpath=/html/body/div/main/div[3]/ul/li/a/div/div[1]/p').click()
time.sleep(
5)
Agradeço imensamente se alguem puder me ajudar, nao sei se estou complicando muito, é que parece ser algo tão fácil, e mesmo assim estou indo pelo caminho mais dificil. Obrigado a todos !!!!