Arquivo da tag: Chrome

Selenium – Configurando download automático e caminho do arquivo

Pois é, o Selenium entrou na minha vida de uma maneira que é difícil até em pensar em fazer algo sem ele… ok, exagerei, mas vocês entenderam o que eu quis dizer.

Fazer download de um arquivo é uma tarefa até básica, mas a princípio não há controle de onde o arquivo vai parar ou qual seu nome, nem se vai aparecer aquela caixa de confirmação. Pois bem, ao menos Chrome, isso é relativamente simples de configurar isso a partir de suas preferências, que via Selenium é chamado de Capabilities ou ChromeOptions. Até onde sei o Firefox também suporta isso, mas o Chrome me pareceu mais flexível.

Para definir isso, utiliza-se o método “SetPreference” do driver, que deve ser configurado antes de iniciar a navegação, ou seja, antes de chamar o Get “http://endereco.do.seu.site”.

O trecho de código abaixo configura o Chrome para:

  1. Ativar o download automático (sem pedir confirmação)
  2. Alterar o caminho de download do arquivo para a mesma pasta do arquivo em execução
Private Sub AbreEConfiguraOChrome()
    Dim driver As New Selenium.ChromeDriver
    driver.SetPreference "download.default_directory", Replace(ThisWorkbook.FullName, ThisWorkbook.name, "")
    driver.SetPreference "download.directory_upgrade", True
    driver.SetPreference "download.prompt_for_download", False
    driver.Get "http://endereco.do.seu.site"
    'aqui começa seu código
End Sub

Simples! Ok, demorou um bocando para eu descobrir isso, mas aí está.

Bom proveito!

Selenium – Obtendo o nome do último arquivo baixado no Chrome 70+

Tem alguns dias postei um artigo muito “louco” sobre Selenium, ShadowRoot e Polymer, longo, controverso e cansativo.

Aqui, farei uso de tudo aquilo para resolver um simples problema. Obter o nome do último arquivo baixado no seu Chrome instanciado via Selenium. Sem complicações, vamos ao código:

'Estou assumindo que a variável driver é do WebDriver de está declarada globalmente
Public Function UltimoDownloadFeito() As String
    Dim shadowRoot As WebElement, _
        downloadsManager As WebElement, _
        downloadsItem As WebElement, _
        name As WebElement
 
    Set driver = New ChromeDriver
    driver.Get "chrome://downloads"
 
    Set downloadsManager = driver.FindElementByTag("downloads-manager")
    Set shadowRoot = driver.ExecuteScript("return arguments[0].shadowRoot", downloadsManager)
    Set downloadsItem = driver.ExecuteScript("return arguments[0].querySelectorAll('downloads-item')[0];", shadowRoot)
    Set shadowRoot = driver.ExecuteScript("return arguments[0].shadowRoot", downloadsItem)
    Set name = shadowRoot.FindElementById("name")
 
    UltimoDownloadFeito = name.Text
End Function

É claro, se você executar essa rotina diretamente, vai receber um erro, já que não haverão itens na lista. Fica como desafio implementar uma lógica para tratar esse erro. Para ver funcionar na íntegra, efetue um download antes. Abaixo faço isso com o Modelo de Cadastro:

Public Function UltimoDownloadFeito() As String
    Dim shadowRoot As WebElement, _
        downloadsManager As WebElement, _
        downloadsItem As WebElement, _
        name As WebElement
 
    Set driver = New ChromeDriver
    'faz o download do arquivo antes
    driver.Get "http://www.tomasvasquez.com.br/downloads/ModeloCadastrov3ListView.zip"
    driver.Get "chrome://downloads"
 
    Set downloadsManager = driver.FindElementByTag("downloads-manager")
    Set shadowRoot = driver.ExecuteScript("return arguments[0].shadowRoot", downloadsManager)
    Set downloadsItem = driver.ExecuteScript("return arguments[0].querySelectorAll('downloads-item')[0];", shadowRoot)
    Set shadowRoot = driver.ExecuteScript("return arguments[0].shadowRoot", downloadsItem)
    Set name = shadowRoot.FindElementById("name")
 
    UltimoDownloadFeito = name.Text
End Function

Bom proveito!

PS: Testei esse código na versão 70 do Chrome. Pode ser que ele funcione em algumas versões anteriores e/ou posteriores, mas não garanto. Teste antes de usar, ok? 🙂

Chrome – Limpando o cache local para um domínio específico

Mais um post da série “como pode ser assim tão simples?”. Ok, mais um não, já que é a primeira ver que menciono isso.

Procurando meios mirabolantes para um simples “Limpar o cache de um domínio específico”, cheguei a “googlear” quando não achei o recurso em menos de 1 minuto olhando as opções do Chrome (sim, 1 minuto é um parâmetro ótimo para tudo o que tento fazer atualmente até procurar na internet).

Inclusive, caí num post do stackexchange em que programadores discutiam como fazê-lo e até recomendando plugins. UAU! Precisa tanto?

É simples pimpolhos! Na página onde estiverem, cliquem com o botão direito em uma área livre da tela e selecionem a opção “Visualizar informações da página”.

Chrome - Informações da página

Na tela de opções que aparecer, vá no item “Mostrar cookies e dados do site”:

Mostrar cookies e dados do site

Para aparecer o seguinte:

Opções de cookies e dados da página

Aqui você terá acesso a apagar os dados de cache, localstore e websql do domínio em questão. Simples!

E tudo isso porque eu queria limpar o sqlite local de um app rodando via Ripple. 😉

Web – Aprendendo a dominar o Chrome DevTools (e porque você precisa saber disso!)

Google Developer

O Chrome definitivamente tomou seu espaço, tanto no coração dos usuários como no dos desenvolvedores.

Depois do Firefox com seus indispensáveis plugins Firebug e Web Developer, o Chrome (e outros navegadores) correram atrás para oferecer algo no mesmo nível. O fato é que a equipe do Google conseguiu. Pelo menos da experiência que tenho no desenvolvimento Web, o Firefox com seus plugins já facilitou um mundo com essas ferramentas, permitindo edição de CSS e HTML direto na página e também depuração (ou debug) de código Javascript, com a adição de mais alguns plugins.

Pois bem, o que com o Firefox se fazia depois de alguma configuração, o Chrome trouxe nativamente, fácil de acessar e tão completo quanto! A esse conjunto de funcionalidades ele deu o nome de Chrome DevTools. Se você está num Chrome neste momento(desktop), basta ir ao menu do mesmo, Ferramentas->Ferramentas para Desenvolvedor (Tools->Developer Tools).

Seu Chrome deverá mostrar uma barra de ferramentas na parte inferior do mesmo:

Chrome Dev Tools ativado

E é aqui que a brincadeira começa. Você tem domínio absoluto do conteúdo da página e pode praticamente alterar todo seu comportamento, fazer checagens, depurar código, controlar todos os arquivos que pertencem a esta página, quais as falhas, os erros, etc. A partir daqui, não me prolongarei, deixando apenas claro que se você é um desenvolvedor web, planeja ser ou se ao menos a estrutura de páginas web lhe interessam, como no caso de profissionais de usabilidade, acessibilidade e SEO, você PRECISA conhecer do Chrome DevTools!

Ele está praticamente se tornando um padrão na internet. É claro, um desenvolvedor web quer que seu site funcione em todos os navegadores, mas quando você coloca a disposição um conjunto tão poderoso de ferramentas, você faz que com a comunidade acabe preferindo sempre produzir conteúdo para tal. Aconteceu com o Internet Explorer. Prevejo que logo acontecerá com o Chrome.

Quer conhecer mais do Chrome DevTools? Deixarei abaixo links de duas séries de vídeos ótimos que ensinam os segredos dessa funcionalidade.

Explore and MasterChrome DevTools (vídeo, inglês, gratuito)

Criado em parceria com o Google e o Code School, um de meus sites de cursos de programação favorito, essa série passa quase todos os recursos da ferramenta, incluindo testes no final de cada lição.

Pode ser acessado em: http://discover-devtools.codeschool.com/

Segredos do Chrome DevTools (vídeo, português, gratuito)

O Google Developers tem um canal específico de vídeos no Youtube. Esta semana, em parceria com o Expert Zeno Rocha, o canal publicou em português uma série chamada “Segredos do Chrome DevTools”, onde é explicado rapidamente o funcionamento da ferramenta.

Pode ser acessado em: https://www.youtube.com/watch?v=XUgfwYzv-WQ

Concluindo

Como já escrevi acima, se você tem algum envolvimento com web, mesmo que seja uma linha de uma página, conhecer as capacidades do Chrome DevTools é uma obrigatoriedade atualmente.

Bons estudos!