Automação de screenshot com Selenium

Armazenar telas de páginas Web com Selenium e Python

Fazer trabalhos repetitivos é desperdício de tempo, felizmente robôs existem para facilitar nessas tarefas e para automatizar interfaces Web podemos usar o Selenium, com Python

Instalação de pacotes

Instalar os pacotes selenium e webdriver-manager no pelo pip

pip install selenium webdriver-manager

Realizar o passo a passo

Geração do código para nosso pequeno robô

Abrir o navegador

Importação do WebDrive da biblioteca do Selenium

from selenium import webdriver

Podemos criar o drive como Google Chrome driver = webdriver.Chrome() ou Mozilla Firefox driver = webdriver.Firefox() juntamente com a opção de não apresentar a interface gráfica

Adicionando a chamada para o webdriver_manager instalar o webdrive automaticamente

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager

options = Options()
options.add_argument("--headless")
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()), options = options)

ou com Firefox

from selenium import webdriver

from selenium.webdriver.firefox.service import Service as FirefoxService
from webdriver_manager.firefox import GeckoDriverManager

fireFoxOptions = webdriver.FirefoxOptions()
fireFoxOptions.add_argument('-headless')
driver = webdriver.Firefox(service=FirefoxService(GeckoDriverManager().install()), options=fireFoxOptions)

Navegar e esperar construção da página

url = "https://www.google.com/"
driver.get(url)

Usando as opções disponíveis em Query By com o Query Selector para encontrar o campo de busca na página do Google

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

searchField = WebDriverWait(driver, 10).until(
  EC.presence_of_element_located((By.CSS_SELECTOR, "[name=q]"))
)

Redimensionar janela do navegador

driver.set_window_size(1800, 1200)

Tirando uma foto

driver.save_screenshot("open.png")

Digitando texto na caixa

searchField.send_keys("orange")
searchField.send_keys(Keys.ENTER)

Clicando no elemento

Localizando o link para as imagens pelo seletor de CSS

imageTab = driver.find_element(By.CSS_SELECTOR, "#top_nav a")
imageTab.click()

Compilado

Compilado para executar de forma invisível (headless) no Chrome

import time

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager

# Main
def main():
  # Iniciar Webdriver
  options = Options()
  options.add_argument("--headless")
  driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()), options=options)

  # Acessar endereço
  driver.get("https://www.google.com/")

  # Esperar até a caixa de busca aparecer
  searchField = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, "[name=q]"))
  )

  # Tirar um screenshot
  driver.save_screenshot("open.png")

  # Alterar o tamanho da tela
  driver.set_window_size(1800, 1200)

  # Tirar um screenshot da tela ampliada
  driver.save_screenshot("max.png")

  # Digitar a palavra "orange" na caixa de busca e digitar <Enter>
  searchField.send_keys("orange")
  searchField.send_keys(Keys.ENTER)
  # Esperar por 10 segundos
  time.sleep(10)
  # Tirar um screenshot do resultado da busca
  driver.save_screenshot("search.png")

  # Clicar para a aba de Imagens
  imageTab = driver.find_element(By.CSS_SELECTOR, "#top_nav a")
  imageTab.click()
  # Tirar um screenshot das imagens
  driver.save_screenshot("imagens.png")

  # Fechar o navegador
  driver.quit()

if __name__ == "__main__":
  main()

Instalação manual do drive

Podemos usar um WebDrive próprio no lugar de deixar o webdriver-manager fazer download, buscando para a versão do navegador por exemplo do Chrome Driver e Firefox Driver colocando eles em um dos caminhos dependendo do sistema

# Windows
echo %PATH%
# Linux
echo $PATH

Substituir a iniciação do drive por

driver = webdriver.Chrome(options = options)

Possíveis problemas

No sistema Linux é necessário alguns pacotes para a execução do Chrome Driver

Se for necessário executar sudo apt install libnss

Se a continuar com problemas de execução tentar sudo apt install libnss3-dev libgdk-pixbuf2.0-dev libgtk-3-dev libxss-dev

Se necessário adicionar sudo apt install libgconf-2-4 libatk1.0-0 libatk-bridge2.0-0 libgdk-pixbuf2.0-0 libgtk-3-0 libgbm-dev libnss3-dev libxss-dev

Para adicionar libasound2 sudo apt install libasound2

Referências

Python Selenium

PyPi - Webdriver Manager

Compartilhe:

Algumas recomendações

{JWA}

Johny W. Alves | Web Developer