-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathautomatiSEI-download_zip.py
117 lines (91 loc) · 4.17 KB
/
automatiSEI-download_zip.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# Atualizado - SEI v4.0.12
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import csv
import os
import chromedriver_autoinstaller
chromedriver_autoinstaller.install()
diretorio_projeto = os.getcwd()
# Solicita ao usuário o nome da pasta para os downloads
nome_pasta = "SETI"
# Verifica se o nome da pasta foi fornecido
if not nome_pasta:
raise ValueError("A pasta de downloads não foi informada.")
diretorio_downloads = os.path.join(diretorio_projeto, nome_pasta)
if not os.path.exists(diretorio_downloads):
os.makedirs(diretorio_downloads)
# Função para iniciar o navegador no modo headless (sem interface gráfica)
def iniciar_chrome_headless():
opcoes_chrome = Options()
opcoes_chrome.add_argument("--headless")
opcoes_chrome.add_argument("--disable-gpu")
opcoes_chrome.add_argument("--no-sandbox")
opcoes_chrome.add_argument("--disable-dev-shm-usage")
opcoes_chrome.add_argument("--disable-webgl")
# Configura o diretório de download
prefs = {"download.default_directory": diretorio_downloads}
opcoes_chrome.add_experimental_option("prefs", prefs)
driver = webdriver.Chrome(options=opcoes_chrome)
return driver
def iniciar_chrome_gui():
opcoes_chrome = Options()
prefs = {"download.default_directory": diretorio_downloads}
opcoes_chrome.add_experimental_option("prefs", prefs)
driver = webdriver.Chrome(options=opcoes_chrome)
return driver
# Descomente a linha do modo que deseja rodar, comente a outra
# driver = iniciar_chrome_headless() # Modo headless
driver = iniciar_chrome_gui() # Modo GUI (padrão)
driver.get("https://sei.ufcat.edu.br/sip/login.php?sigla_orgao_sistema=UFCAT&sigla_sistema=SEI") # Adicione o link do SEI desejado
# Credenciais de login
usuario = ''
senha = ''
campo_usuario = driver.find_element(By.ID, "txtUsuario")
campo_senha = driver.find_element(By.ID, "pwdSenha")
campo_usuario.send_keys(usuario)
campo_senha.send_keys(senha)
botao_login = driver.find_element(By.ID, "sbmAcessar")
botao_login.click()
# Abre o arquivo CSV e lê os dados (ignora o cabeçalho)
with open(nome_pasta + '_processo.csv', 'r') as arquivo:
leitor = csv.reader(arquivo)
next(leitor)
# Para cada linha no arquivo CSV
for linha in leitor:
# Obtém o número do processo
numero_processo = linha[0]
# Verifica se o número do processo foi fornecido
if not numero_processo:
raise ValueError("O número do processo não foi fornecido.")
# Localiza e preenche o campo de pesquisa rápida com o número do processo
campo_pesquisa_rapida = driver.find_element(By.ID, "txtPesquisaRapida")
campo_pesquisa_rapida.clear()
campo_pesquisa_rapida.send_keys(numero_processo)
campo_pesquisa_rapida.send_keys(Keys.RETURN)
driver.implicitly_wait(10)
# Muda para o frame de visualização do processo
campo_visualizacao = WebDriverWait(driver, 30).until(
lambda d: d.find_element(By.ID, "ifrVisualizacao")
)
driver.switch_to.frame(campo_visualizacao)
# Localiza o campo de árvore de ações e seus elementos
campo_arvore_acoes = WebDriverWait(driver, 30).until(
lambda d: d.find_element(By.XPATH, '//*[@id="divArvoreAcoes"]')
)
elementos = campo_arvore_acoes.find_elements(By.XPATH, "*")
# Itera sobre os elementos da árvore de ações
for elemento in elementos:
outer_html = elemento.get_attribute("outerHTML")
if 'procedimento_gerar_zip' in outer_html:
elemento.click()
btn_gerar = WebDriverWait(driver, 30).until(
EC.presence_of_element_located((By.NAME, "btnGerar"))
)
btn_gerar.click()
break
driver.switch_to.default_content()
driver.quit()