Recentemente, tive a ideia de usar Selenium com Python para automatizar algumas tarefas repetitivas no SAP para um cliente. E como sempre acontece quando você suja as mãos com o código, Comecei a encontrar alguns desafios que nunca imaginei chegando. Depois de muito tempo navegando na Internet tentando encontrar a solução mais adequada para cada problema, pensar:
Quão bom teria sido se você tivesse encontrado tudo que você precisava reunido em um só lugar, pronto para usar?
Então, para tornar suas vidas mais fáceis, Eu reuni neste artigo, as respostas para os desafios mais frequentes um usuário pode encontrar usando Selenium em conjunto com Snippets de código prontos para uso escritos em Python.
PD: Se você ainda não se sente em casa com o básico de Selenium, Você pode verificar nosso Guia de introdução ao Selenium. Artigo primeiro.
E agora vamos entrar em ação!
Como baixar arquivos usando Selenium WebDriver
Ao usar o Selenium para automatizar a navegação, você pode precisar baixar arquivos. O problema é que, assim que selecionarmos e clicarmos no link de download, uma janela de diálogo nativa aparece exigindo intervenção manual. O Selenium não tem controle sobre as janelas de download de arquivos do seu navegador, não pode continuar com o processo de download. Felizmente, sempre há alternativas.
Para resolver este problema, você pode autorizar seu navegador a baixar arquivos automaticamente de antemão e definir um local padrão para o arquivo de download. Isso pode ser feito definindo as preferências para o perfil WebDriver (o código abaixo é para um navegador Firefox, você pode precisar adaptá-lo para funcionar em outros navegadores):
import os download_dir = os.getcwd()# diretório de trabalho atual profile = webdriver.FirefoxProfile() profile.set_preference("browser.download.folderList", 2) # o local personalizado especificado browser.download.dir é habilitado quando browser.download.folderList é igual a 2 profile.set_preference('browser.download.dir', download_dir) profile.set_preference("browser.download.manager.showWhenStarting", Falso) profile.set_preference("browser.download.dir", caminho) profile.set_preference('browser.helperApps.neverAsk.saveToDisk', TIPO DE CONTEÚDO) profile.set_preference("webdriver_enable_native_events", Falso) profile.set_preference("browser.download.manager.scanWhenDone",Falso) profile.set_preference("browser.download.manager.useWindow",Falso) profile.set_preference("browser.helperApps.alwaysAsk.force",Falso) profile.update_preferences() browser = webdriver.Firefox(firefox_profile = profile)
Você deve ter notado o CONTENT_TYPE
variável que você precisa substituir. Na realidade, corresponde ao tipo MIME do arquivo que você está baixando. Se você não está familiarizado com este termo, Tipo de Mimica é simplesmente um identificador usado para reconhecer um tipo de dados para conteúdo na Internet. Ele tem a mesma finalidade na Internet que extensões de arquivo em seu sistema operacional.
Para simplificar sua tarefa, Eu removi os tipos MIME das extensões mais comuns dos documentos da web da Mozilla, para facilitar o acesso. No widget abaixo, você encontrará o código que precisa usar para obter o tipo de conteúdo correspondente à sua extensão de arquivo. Você pode usar o console para testá-lo imediatamente!!
Você pode obter o arquivo JSON copiando e colando do widget acima ou baixando-o de Github.
Agora, seu WebDriver deve ser capaz de baixar sem pedir permissão ou mostrar janelas de diálogo 😉