O RoboDiario é uma solução automatizada para realizar o download dos Diários Oficiais de Justiça do Estado do Rio de Janeiro (DJRJ). Este script utiliza o Selenium para interagir com o site do Tribunal de Justiça do RJ, acessando e baixando os arquivos em formato PDF, conforme os parâmetros configurados no arquivo de configuração YAML.
O projeto está organizado da seguinte forma:
├── configs
│ └── config_rj.yml # Arquivo de configuração YAML
├── dados # Diretório onde os PDFs baixados são salvos
├── logs # Diretório para armazenar os arquivos de log
├── RoboDiario.py # Script principal do robô
├── engine.py # Classe principal para automação e lógica
├── util
│ └── routes.py # Funções auxiliares para manipulação de caminhos
└── README.md # Documento de orientação do projeto
Certifique-se de que você tem os seguintes componentes instalados:
- Python (versão 3.8 ou superior)
- Bibliotecas Python:
seleniumpyyamlrequests
- Driver Selenium:
- Microsoft Edge WebDriver (compatível com a versão do seu navegador Edge)
- Os diários oficiais são baixados automaticamente para os diretórios correspondentes, organizados por estado, tipo de diário, ano e mês.
- O nome dos arquivos segue o padrão:
DJ<ESTADO>_<CADERNO>_<YYYY_MM_DD>.pdf.
- O robô mantém um histórico das datas já processadas e baixa apenas os arquivos que ainda não foram salvos.
- Os parâmetros de URLs, cadernos, tempos de espera, e logs são completamente personalizáveis via um arquivo de configuração YAML.
- Logs detalhados para registrar erros e operações realizadas durante a execução.
-
Validação do Nome dos Arquivos
- O script agora valida o nome dos arquivos PDF com um regex robusto antes de salvá-los.
- Caminhos são gerados automaticamente com base no estado, tipo do diário e data.
-
Organização por Subdiretórios
- PDFs são salvos em subdiretórios estruturados no formato:
./dados/<ESTADO>/<TIPO_DIARIO>/<ANO>/<MES>/.
- PDFs são salvos em subdiretórios estruturados no formato:
-
Funções Auxiliares Modulares
- A lógica para definir caminhos e verificar se arquivos já existem foi movida para o módulo
routes.pyemutil.
- A lógica para definir caminhos e verificar se arquivos já existem foi movida para o módulo
-
Melhor Tratamento de Exceções
- Logs mais detalhados para rastrear falhas em downloads ou na geração de URLs.
git clone <url-do-repositorio>
cd <nome-do-repositorio>pip install -r requirements.txtEdite o arquivo configs/config_rj.yml com as informações necessárias. Segue um exemplo do formato do arquivo de configuração:
nomeDiario:
nome: "DJRJ"
urls:
diario_url: "https://www3.tjrj.jus.br/consultadje/pdf.aspx?dtPub={data}&caderno={cad}&pagina=-1"
http:
timeout: 10
headers:
User-Agent: "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0"
Accept: "application/json, text/javascript, */*; q=0.01"
X-Requested-With: "XMLHttpRequest"
logs:
log_file: "log_robo_rj.txt"
error_file: "erro_robo_rj.txt"
captcha:
min_wait_time: 5
cadernos:
A: "Administrativo"
S: "Judicial_-_2_Instancia"
C: "Judicial_-_1_Instancia_Capital"
I: "Judicial_-_1_Instancia_Interior"
E: "Edital"
data:
limite: "2025-01-02"
etapas:
- descricao: "Baixar os diários oficiais por caderno e data"
metodo: "download_atualizacao_diaria"
parametros: {}
- descricao: "Obter a URL do diário oficial"
metodo: "_get_diario"
parametros:
driver: "Driver Selenium configurado"
data_url: "Data formatada no padrão dd/MM/yyyy"
cod: "Código do caderno"
- descricao: "Salvar o PDF da URL válida"
metodo: "_salva_pdf"
parametros:
nome: "Nome do arquivo PDF no formato NomeDiario_Caderno_Data.pdf"
url: "URL do diário oficial válido"- Microsoft Edge: Eu estou usando o nativo do windows, mas fique a vontade para escolher outro
python RoboDiario.py- Baixa os diários oficiais para cada caderno especificado no arquivo de configuração.
- O nome dos arquivos é gerado no formato:
DJRJ_<CADERNO>_<YYYY_MM_DD>.pdf.
- Identifica automaticamente a última data já baixada e continua o download a partir dessa data.
Para incluir novos cadernos no arquivo de configuração, basta adicioná-los na seção cadernos do YAML:
cadernos:
F: "Novo_Caderno"A data limite inicial pode ser alterada na seção data:
data:
limite: "YYYY-MM-DD"Para ajustar o tempo de espera entre as requisições HTTP, edite a seção http:
http:
timeout: 20Responsável por toda a lógica do robô.
- Métodos Principais:
__init__: Inicializa o robô e carrega a configuração YAML.executar_etapas: Executa as etapas definidas no arquivo de configuração.download_atualizacao_diaria: Realiza o download dos diários conforme as datas e cadernos especificados._get_diario: Interage com o site, verifica se o conteúdo é válido e salva os PDFs.verifica: Verifica se o conteúdo é válido (sem mensagens de erro).data_inicial: Identifica a última data de download realizada.gerar_url: Gera a URL para o download com base na data e caderno.data_limite: Define a data inicial para o processo.
ainda falta implementar
-
Arquivo de Log Principal:
- Nome: Definido em
logs.log_fileno YAML. - Exemplo:
log_robo_rj.txt - Descrição: Contém logs detalhados sobre o progresso das etapas.
- Nome: Definido em
-
Arquivo de Erros:
- Nome: Definido em
logs.error_fileno YAML. - Exemplo:
erro_robo_rj.txt - Descrição: Registra erros encontrados durante a execução do robô.
- Nome: Definido em
Como Habilitar Logs: Certifique-se de que a configuração logs no arquivo YAML esteja corretamente definida com os caminhos dos arquivos de log.
Se você deseja contribuir para este projeto, siga as etapas abaixo:
-
Fork o Repositório:
- Crie um fork do repositório para sua conta.
-
Crie uma Branch para sua Funcionalidade:
git checkout -b minha-funcionalidade
-
Submeta suas Alterações:
git commit -m 'Adicionando minha funcionalidade' -
Envie a Branch:
git push origin minha-funcionalidade
-
Abra um Pull Request:
- Crie um Pull Request no repositório original para revisar e fundir suas alterações.
Este projeto é licenciado sob a licença MIT - veja o arquivo LICENSE para detalhes.
Para dúvidas ou suporte, entre em contato:
- E-mail: jefferson.ti@hotmail.com.br
- GitHub: link-do-repositorio