Jump to content

Como automatizar o site Regularize usando Selenium e resolver captcha?


Ryan Zimerman Leite

Postagens Recomendadas

Olá Bom dia a todos, estou fazendo um script (rpa) para consulta ao site do regularize, a automação vai ser para realizar vários cadastros no site.

Porém o site tem captcha, eu consigo resolver com api paga anti captcha, que me retorna a resposta do captcha eu insiro a resposta nos 2 inputs escondidos, porém quando aperto em continuar ele da erro de captcha, acredito que tenha algum outro campo escondido de captcha ou precise enviar a resposta pro captcha para outro lugar e etc igual tem no site da B3. Os dados para realizar os cadastro vem de uma planilha em excel, a dificuldade mesmo é passar por essa primeira etapa de inserir o CNPJ nesta aba do site: https://www.regularize.pgfn.gov.br/cadastro, e apertar em CONTINUAR, para ir para a proxima aba.

Porém estou tentando fazer tudo via selenium, request não tentei pois não tenho muito conhecimento, Caso não consiga em selenium minha alternativa é fazer ele todo em PyAutoGUI e ver se o site não detecta e exibe o captcha, pois ao fazer as consultas na mão ele não aparece o captcha porem quando é automatizado via selenium ele pede o captcha. Segue o código abaixo caso precisem de algum função que está sendo chamada externamente me avisem que eu coloco no post. Obrigado pela ajuda.

erro_captcha_regularize.png

# -*- coding: utf-8 -*-
# ----------------------------------------------------------------------#
# Nome:     Cria Cadastro Regularize                                    #
# Arquivo:  cria_cadastro_regularize.py                                 #
# Versão:   1.0.0                                                       #
# Modulo:   Geral                                                       #
# Objetivo: Cria Cadastro no site do Regularize                         #
# Autor:    Ryan Zimerman Leite                                         #
# Data:     26/07/2024                                                  #
# ----------------------------------------------------------------------#
from selenium import webdriver
from selenium.webdriver.common.by import By
import datetime, os, time, re
from _comum.chrome_comum import _initialize_chrome, _send_input, _find_by_id, _find_by_path, send_input_xpath
from _comum.comum_comum import _concatena, _configura_dados, _time_execution_monitor, _envia_email, _get_host_name, _escreve_relatorio_csv, _escreve_header_csv, _open_lista_dados, _where_to_start, _indice
from _comum.captcha_comum import _solve_hcaptcha

def login_regularize(driver):
    print('>>> Acessando site')
    timer = 0
    while not _find_by_path('/html/body/app-root/div/div[2]/app-cadastro/main/app-cadastro/div/div/form/div[1]/div/input', driver):
        try:
            driver.get('https://www.regularize.pgfn.gov.br/cadastro')
        except:
            return driver, 'erro'
        time.sleep(1)
        timer += 1
        if timer > 60:
            return driver, 'erro'

    return driver, 'ok'

def resolve_captcha(driver):
    try:
        url = 'https://www.regularize.pgfn.gov.br/cadastro'
        recaptcha_data = {'sitekey': '3dce0060-7491-44a1-af53-c8b35a1f35c2', 'url': url}

        id_recaptcha = re.compile(r'id=\"(g-recaptcha-response-.+)\" name=\"g-recaptcha-response\"').search(
            driver.page_source).group(1)
        id_hcaptcha = re.compile(r'id=\"(h-captcha-response-.+)\" name=\"h-captcha-response\"').search(
            driver.page_source).group(1)

        captcha = _solve_hcaptcha(recaptcha_data, visible=True)

        # inserir captcha
        driver.execute_script("document.getElementById('{}').innerHTML='{}';".format(id_recaptcha, captcha))
        driver.execute_script("document.getElementById('{}').innerHTML='{}';".format(id_hcaptcha, captcha))
    except:
        return driver, 'erro'

    return driver, 'ok'
def cria_cadastro(nome, cnpj, cpf, data_nascimento, nome_mae, driver):
    send_input_xpath('/html/body/app-root/div/div[2]/app-cadastro/main/app-cadastro/div/div/form/div[1]/div/input', cnpj, driver)
    driver.find_element(by=By.XPATH, value="/html/body/app-root/div/div[2]/app-cadastro/main/app-cadastro/div/div/form/div[2]/div/button").click()
    
    # CASO FUNCIONE IRA ACESSAR O CNPJ E REALIZAR O CADASTRO
    
    #########################################################
    
    return driver, 'ok'


@_time_execution_monitor
def run(controle):
    options = webdriver.ChromeOptions()
    options.add_argument("--start-maximized")
    options.add_argument('--disable-blink-features=AutomationControlled')

    empresas = _open_lista_dados()
    if not empresas:
        return False

    index = _where_to_start(tuple(i[0] for i in empresas))
    if index is None:
        return False

    tempos = [datetime.datetime.now()]
    tempo_execucao = []
    total_empresas = empresas[index:]

    for count, empresa in enumerate(empresas[index:], start=1):
        # printa o indice da empresa que está sendo executada
        tempos, tempo_execucao = _indice(count, total_empresas, empresa, index, tempos=tempos,
                                         tempo_execucao=tempo_execucao, controle=controle)

        nome, cnpj, cpf, data_nascimento, nome_mae = empresa

        nome = nome.replace('/', '')
        cnpj = str(cnpj)
        cnpj = _concatena(cnpj, 14, 'antes', 0)

        while True:
            try:
                status, driver = _initialize_chrome(options)

                driver.set_page_load_timeout(60)

                driver, resultado = login_regularize(driver)

                if resultado != 'erro':
                    break
                driver.close()
            except:
                pass

        driver, resultado_captcha = resolve_captcha(driver)
        driver, resultado_cadastro = cria_cadastro(nome, cnpj, cpf, data_nascimento, nome_mae, driver)

        if resultado_cadastro != 'erro':
            continue
        print(f' {resultado_cadastro}')
        # Escreve os dados da consulta no excel

    _escreve_header_csv('NOME;CNPJ;CPF;DATA NASCIMENTO;NOME DA MAE',
                        nome='Cria Cadastro Regularize')
    driver.close()

if __name__ == '__main__':
    pasta_final = r'\\vpsrv03\Arq_Robo\Geral'
    andamentos = 'Cria Cadastro Regularize'
    controle = f'V:\\Setor Robô\\Scripts Python\\_comum\\_Monitoramento\\{andamentos} - {_get_host_name()}.txt'
    run(controle)

 

  • Curtir 1
Link to comment
Compartilhe em outros sites

  • Casa do Desenvolvedor mudou o título para Como automatizar o site Regularize usando Selenium e resolver captcha?

Crie uma conta ou entre para comentar 😀

Você precisa ser um membro para deixar um comentário.

Crie a sua conta

Participe da nossa comunidade, crie sua conta.
É bem rápido!

Criar minha conta agora

Entrar

Você já tem uma conta?
Faça o login agora.

Entrar agora


×
×
  • Create New...