3
respostas

Ações do usuário - como capturar?

Tenho um painel de formulário que seta uma consulta. Há uma série de itens e de combinações entre eles, como dropdowns, caixas de texto e botões de opção. A ideia é o usuário setar a consulta da maneira que pretende, e o programa "entender" essa setagem pra fazer sozinho num segundo momento... tipo uma macro. "Consulta 1", e aí será a configuração que o usuário fez, e assim por diante. Onde clicou, que opção selecionou, o que escreveu em qual caixa, etc.

Estou usando Selenium para navegação no site em questão, e pyautogui em algumas situações.

Alguma dica? Grato!

3 respostas

Olá, Pedro.

Desculpa, mas não consegui entender a sua dúvida, você pode me explicar novamente?

Ah! Outra coisa, você também pode postar o código que você está fazendo pra entender qual é o raciocínio lógico que você está seguindo?

É que, na verdade, ainda não pensei num código propriamente!

É o seguinte: Acesso um site (eproc.jfpr.jus.br/eprocV2/) em que há uma miscelânea de consultas disponíveis, cada uma com um relatório diferente como resultado. Eu, até agora, vinha programando o Selenium pra setar essa consulta de maneira automática, de acordo com o relatório pretendido, algo como isso:

def SetaConsulta(): #Essa consulta cria a lista dos processos com prazo em status "aguardando abertura".
    global marcador
    menu = browser.find_elements_by_class_name('ms-choice')
    menu[0].click()
    opcoes = browser.find_elements_by_tag_name('label')
    opcoes[16].click() #Seleciona Curitiba na lista.
    opcoes[28].click() #Seleciona Paranagua na lista.
    grau = Select(browser.find_element_by_id('selGrauJudicial'))
    grau.select_by_index(1)
    prazo = Select(browser.find_element_by_id('selPrazo'))
    prazo.select_by_index(1)
    dtInicio = browser.find_element_by_id('txtDataInicio')
    dtInicio.send_keys(dataInicio)
    dtFim = browser.find_element_by_id('txtDataTermino')
    dtFim.send_keys(dataFim) #dataFim
    inclusao = browser.find_element_by_id('selInclusaoProcurador')
    opcoesInclusao = inclusao.find_elements_by_tag_name('option')
    checkbox1 = browser.find_element_by_id('optChkPoloOposto')
    testeCheckbox1 = browser.find_element_by_id('optChkPoloOposto').is_selected()
    if testeCheckbox1 == False:
        checkbox1.click()
    checkbox2 = browser.find_element_by_id('optChkProcuradoresAssociados')
    testeCheckbox2 = browser.find_element_by_id('optChkProcuradoresAssociados').is_selected()
    if testeCheckbox2 == False:
        checkbox2.click()
    checkbox3 = browser.find_element_by_id('optChkExibirApensos')
    testeCheckbox3 = browser.find_element_by_id('optChkExibirApensos').is_selected()
    if testeCheckbox3 == False:
        checkbox3.click()
    checkbox4 = browser.find_element_by_id('optChkCpfCnpjSeparado')
    testeCheckbox4 = browser.find_element_by_id('optChkCpfCnpjSeparado').is_selected()
    if testeCheckbox4 == False:
        checkbox4.click()
    botao = browser.find_element_by_id('btnConsultar')
    botao.click()

Esse método se transformou num problema conforme as necessidades de relatório foram se avolumando. São n checkboxes, menus dropdown com dezenas de opções, e assim por diante. Então pensei: posso usar o usuário como construtor dessa função! Ele vai fazer uma vez a configuração do formulário, eu gravo isso, depois é só chamar de novo essa configuração já identificada! Sei que o Selenium tem uma IDE pro Chrome que grava como se fosse uma macro, mas na máquina do usuário não tenho como instalar nem o Python, nem a IDE.

Queria capturar os cliques e inserções com algum tipo de lambda, pra salvar posições de ponteiro, digitações, e assim "montar" essa função. Mas fiquei confuso de como fazer isso, e depois desse texto todo espero não tê-lo confundido também!

Aliás, seria mais fácil capturar o POST do formulário?