Groups keyboard shortcuts have been updated
Dismiss
See shortcuts

Upload de arquivos via Selenium

42 views
Skip to first unread message

Giovanni Magliano

unread,
Feb 26, 2025, 5:14:39 PMFeb 26
to Python Brasil
Prezados, tenho tentado automatizar o upload de apenas um arquivo exigido em um site.
O site possui um botão do tipo "Escolha seu Arquivo".
Ao clivar nesse botão, abre-se o explorador de arquivo sdo windows.
Bastaria eu automatizar a digitação do caminho do arquivo no computador, mas percebi que send_keys não interage com a tela de windows explorer.
Alguém tem alguma solução para isso?
Já virei a internet de cabeça para baixo e não achei nada...
A lógica seria que isso funcionasse, mas não dá certo:
upload_button=driver.find_element(By.XPATH,'xpath do botao de upload').click()
upload_button.send_keys("caminho da pasta no pc") 

Joao S. O. Bueno

unread,
Feb 26, 2025, 6:08:09 PMFeb 26
to python...@googlegroups.com
Se o site usar um upload via formulário, 'vleha guarda', pode ser mais
fácil gerar a requisição http que envia o arquivo
sem usar o selenium - usando requests ou httpx - - isso vai exigir
que você autentique
sua sessão http com essas libs também - uma parte do trabalho que
você já faz no selenium
vai ter que fazer programaticamente.

Mas basicamente é isso, e pode ser muito mais simples, e muito mais
rápido do que fazer via Selenium -
porem, só se o site tiver uma autenticação mais ou menos simples
(oauth já complica um pouco) - e
se ele não usar código especializado de frontend para o upload em si,
e simplesmente um form input
de arquivo, ou no máximo mandar o arquivo num campo json como base64
encoded (mas mesmo isso
já exigiria um pouco de engenharia reversa) .

Basta procurar entao na web, ou com os gpts para "file upload with
Python requests" e as coisas
devem caminhar bem.

MAS se o site tiver código especializado para mandar o arquivo de
outro jeito, aí só
o Selenium mesmo - e o remédio então será usar alguam outra lib que permita
simular eventos de teclado e mouse do sistema operacional, não só
dentro do browser.
Isso vai deixar você "continuar de onde está" - mas não é o mais
recomendado se funcionar
do outro jeito. Nesse caso, a lib que você tem que estudar é a
"pyautogui" - ela vai deixar
você mandar eventos de teclado para a janela do explorer.
> --
> --
> ------------------------------------
> 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 esta conversa, acesse https://groups.google.com/d/msgid/python-brasil/daa6f27d-5f21-475f-91f8-b758a61be886n%40googlegroups.com.

Giovanni Magliano

unread,
Feb 26, 2025, 8:30:03 PMFeb 26
to Python Brasil
Opa!
Tentei com pyautogui e não deu certo:
 #Tentativa PYAUTOGUI
driver.find_element(By.XPATH,'//*[@id="test-l-1"]/fieldset/div/div[8]').click() # Clica no botão de upload
pyautogui.write(" C:/Users/Lenovo/Downloads/Teste.pdf  ")
time.sleep(3)
pyautogui.press("enter")

Tentei via requests e também não passou:
# Fazer upload de Arquivo
arquivo={'arquivo':open('C:/Users/Lenovo/Downloads/Teste.pdf','rb')}
resposta=requests.post(url,files=arquivo)

Giovanni Magliano

unread,
Feb 27, 2025, 7:31:26 AMFeb 27
to python...@googlegroups.com
Começou a dar certo!!!!
Adicionei time.sleep(5) antes de pyautogui.write e o código conseguiu digitar o caminho no windows explorer e teclar ENTER!!!!
Contudo, surgiu mensagem de erro "O caminho não é válido". (Mas só dá erro na automação... Testei colar o mesmo caminho manualmente: a página aceita e carrega o arquivo).
#Tentativa PYAUTOGUI
driver.find_element(By.XPATH,'//*[@id="test-l-1"]/fieldset/div/div[8]').click() # Clica no botão de upload
time.sleep(5)
pyautogui.write(" C:/Users/Lenovo/Downloads/Teste.pdf  ")
time.sleep(3)
pyautogui.press("enter")


--
Atenciosamente,
Giovanni Magliano Jr

Joao S. O. Bueno

unread,
Feb 27, 2025, 8:37:40 AMFeb 27
to python...@googlegroups.com
no explorer acho que precisa da barra ao contrário pra separar diretorios.

No Python e no chrome, vai funcionar a barra universal "/' - mas o
windows usa a barra ao contrário "\"
Pra usar essa barra em programas Python, tem que colocar uma letrinha
"r" como prefixo da string,
antes das aspas:
|
` caminho = r"C:\Users\LeNovo\Downloads\teste.pdf" `
> Para ver esta conversa, acesse https://groups.google.com/d/msgid/python-brasil/CABgnet_ckiEBFJ-a8dL4eTeQSBEnOTJdC1CKmw3Da2bxiN2M-g%40mail.gmail.com.
Reply all
Reply to author
Forward
0 new messages