Webscraping e Login com certificado digital A1

1,366 views
Skip to first unread message

Cristiano Gross

unread,
Oct 9, 2023, 12:24:12 PM10/9/23
to Python Brasil
Olá pessoal,
Gostaria de saber se alguém já teve a necessidade ao fazer login em alguma pagina usando um certificado digital.
Estou tentando realizar o processo com selenium, porém sem sucesso, pois a popup aberta para selecionar o certificado é um elemento do windows so e não do navegador.  Já tentei com a lib pyautogui porém também sem sucesso.

Moisés Abel

unread,
Oct 9, 2023, 12:28:28 PM10/9/23
to Python Brasil

A integração de certificados digitais em automação de login com Selenium pode ser um desafio, pois as pop-ups de seleção de certificados geralmente são geradas pelo sistema operacional e não pelo navegador em si. Aqui estão algumas etapas que você pode tentar seguir para automatizar o processo de login com um certificado digital:

  1. Configurar o Selenium: Certifique-se de que o Selenium está corretamente configurado em seu ambiente Python.

  2. Lidar com a Pop-up: Você mencionou que a pop-up para selecionar o certificado é um elemento do Windows. Para interagir com elementos fora do navegador, você pode usar uma biblioteca como o pyautogui. No entanto, para interagir com elementos do sistema operacional, você pode precisar de permissões administrativas e talvez precise executar seu script como administrador.

    Você pode usar o pyautogui para automatizar o processo de seleção do certificado digital. Você precisa determinar a posição dos botões e campos relevantes na pop-up e, em seguida, usar o pyautogui para clicar e inserir informações conforme necessário. Algo semelhante ao seguinte:


  3. import pyautogui
    import time

    # Espera até que a pop-up do certificado esteja visível
    while not pyautogui.locateOnScreen('path/to/certificate_popup.png'):
        time.sleep(1)

    # Supondo que você tenha a localização dos botões e campos
    # Selecione o certificado
    pyautogui.click(x=cert_x, y=cert_y)

    # Insira a senha (se necessário)
    pyautogui.write('sua_senha')

    # Clique no botão de login
    pyautogui.click(x=login_button_x, y=login_button_y)


  4. Lembre-se de substituir 'path/to/certificate_popup.png', cert_x, cert_y, login_button_x e login_button_y com os valores corretos para o seu caso.



  1. Lidar com Segurança e Permissões: Certifique-se de que seu script tenha as permissões necessárias para interagir com elementos do sistema operacional, como a pop-up do certificado. Dependendo do sistema operacional e das políticas de segurança, você pode precisar executar seu script como administrador ou conceder permissões especiais.

  2. Teste e Depuração: Teste seu script cuidadosamente em um ambiente de desenvolvimento e faça ajustes conforme necessário. A automação de processos de login com certificados digitais pode variar muito dependendo do sistema e das configurações específicas em uso.

Lembre-se de que a automação de interações fora do navegador pode ser sensível e pode não ser a abordagem mais segura ou confiável em todos os casos. Certifique-se de que está agindo de acordo com as políticas e regulamentos aplicáveis ao uso de certificados digitais e automação de login.


Nunca testei, vê se te ajuda... abraço.


Moisés Abel

Eric Chiesse

unread,
Oct 10, 2023, 1:00:22 AM10/10/23
to python...@googlegroups.com
Selenium não é a melhor opção para scrapping. 
Tem ferramentas como Scrappy, Beautifulsoup ou meu combo preferido: requests + lxml
Essas ferramentas vão te dar mais agilidade que o selenium.
---
Eric


--
--
------------------------------------
Grupo Python-Brasil
https://wiki.python.org.br/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com
---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/python-brasil/9acc2984-63f4-4df5-a3ef-3906577dd1a6n%40googlegroups.com.

Cristiano Gross

unread,
Oct 10, 2023, 9:20:48 AM10/10/23
to Python Brasil
Bom dia pessoal, agradeço as respostas!
Como havia mencionando com  pyautogui   não funcionou pois quando abre a popup para selecionar o certificado o script ficar aguardando uma ação minha nessa popup para que
prossiga executando o script, seja ações de click ou de ações com telclado (enter por exempo) com o  pyautogui  

Eric eu sei trabalhar com Scrappy e Beautifulsoup, porém não achei um forma de com eles passar essa parte da seleção do certificado digital, ou se existe alguma outra forma 
de fazer isso. Talvez "inserindo" o certificado de alguma forma na sessão da requisição que está sendo feita para a página.  

Eric Chiesse

unread,
Oct 10, 2023, 9:46:15 AM10/10/23
to python...@googlegroups.com
Vc tem que olhar o form da página (inspeciona no navegador) pra ver o nome do campo que pede o certificado. Daí vc tb precisa saber como o servidor espera a requisição (JSON, urlencoded, multi-part, ...)
Se for pra subir um arquivo vê na documentação da tua ferramenta como fazer um upload.
E no final faz uma requisição POST com os dados do formulário (Imagino que não seja um PUT)
Provavelmente vc tb vai precisar pegar e reenviar um token de CSRF. Normalmente é só fazer primeiro um GET pra pegar o token.

Se liga que algumas páginas na verdade conversam com uma API estilo REST. Se esse for o caso, o seu trabalho pode ser muito mais simples.
---
Eric


Paul Eipper

unread,
Oct 10, 2023, 9:58:23 AM10/10/23
to python...@googlegroups.com
Se for fazer com a lib requests, pode dar uma olhada nessa sugestão aqui:


att,
--
Paul Eipper


Moisés Abel

unread,
Oct 10, 2023, 12:14:35 PM10/10/23
to Python Brasil

Uma alternativa que você pode considerar é usar uma ferramenta de automação de nível mais baixo, como o pywinauto, que é especificamente projetado para automatizar aplicativos do Windows. Com o pywinauto, você pode tentar encontrar e interagir com os controles da janela de seleção de certificado.

Aqui está um exemplo de como você pode usar o pywinauto para lidar com a popup de seleção de certificado:

vc pode tentar isso:

from pywinauto import Application

# Caminho do executável do certificado (pode variar dependendo do sistema)
cert_exe_path = "C:\\Caminho\\Para\\Seu\\Programa\\De\\Certificados.exe"

# Inicie o aplicativo do certificado
app = Application(backend="uia").start(cert_exe_path)

# Selecione a janela de seleção de certificado (talvez você precise ajustar o título da janela)
cert_window = app.window(title="Selecione um Certificado Digital")

# Interaja com os controles na janela, por exemplo, clicar no botão "OK"
cert_window.OK.click()

# Se necessário, insira a senha do certificado
cert_window.type_keys("sua_senha")

# Clique no botão de login (se houver)
# cert_window.botao_login.click()

# Feche a janela (se necessário)
# cert_window.close()

# Feche o aplicativo do certificado
app.kill()


Sem mais,


Moisés

João Batista

unread,
Oct 13, 2023, 9:07:26 AM10/13/23
to Python Brasil
Bom dia,

Eu estava enfrentando o mesmo problema. Após algumas pesquisas, encontrei a solução utilizando uma chave de registro do Windows para selecionar automaticamente o certificado. Essa chave é específica para o navegador.

No link abaixo, você encontrará a documentação da chave. Não é necessário baixar o Chrome Enterprise, basta criar a chave e configurar o filtro para selecionar o certificado automaticamente, de acordo com a sua escolha:
https://chromeenterprise.google/policies/#AutoSelectCertificateForUrls

Andre Fonseca

unread,
Oct 23, 2023, 8:10:15 AM10/23/23
to python...@googlegroups.com
Cristiano, 

Creio que a solução seja essa que voce comentou: inserir o certificado na requisição que está fazendo.  Dá uma lida de como realizar request nas bibliotecas usando o HTTPS 
Paginas com autenticação sempre são tarefas dificieis para gente ler e obter dados delas. 

Abraços 
Andre Fonseca

Em ter., 10 de out. de 2023 às 10:20, Cristiano Gross <cristia...@outlook.com> escreveu:


--
----------------------
Andre Fonseca
http://andrefonseca.net
Reply all
Reply to author
Forward
0 new messages