20 de junho de 2020 ● 3 min de leitura
Automação de screenshot com Selenium
Gerar telas de páginas Web para testes Web com Selenium e Python
Fazer trabalhos repetivos é muito chato e um desperdício de tempo, felizmente robôs existem para facilitar nessas tarefas e para automatizar interfaces Web o Selenium é quase um padrão do mercado
Instalação
Para fazer a automatização precisamos escolher o navegador e o webdrive 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
Instalar o pacote no pelo pip
pip install selenium
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 para o Chrome
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("--headless")
driver = webdriver.Chrome(chrome_options = options)
ou com Firefox
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.binary = "/usr/bin/firefox"
options.add_argument("-headless")
driver = webdriver.Firefox(firefox_options = options)
Navegar e esperar construção da página
url = "https://www.google.com/"
driver.get(url)
Usnado 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]"))
)
Tirando uma foto
driver.save_screenshot("open.png")
Redimensionar janela do navegador
driver.set_window_size(1800, 1200)
Digitando texto na caixa
searchField.send_keys("orange")
searchField.send_keys(Keys.ENTER)
Clicando no elemento
imageTab = driver.find_element_by_css_selector("a.q.qs")
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
# Main
def main():
# Iniciar Webdriver
options = Options()
options.add_argument("--headless")
driver = webdriver.Chrome(chrome_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("a.q.qs")
imageTab.click()
# Tirar um screenshot das imagens
driver.save_screenshot("imagens.png")
# Fechar o navegador
driver.quit()
if __name__ == "__main__":
main()