$ python modulo_3.py
Automação de navegador
Quando o HTML estático não basta: sites com JavaScript, login, CAPTCHA leve e interações. Playwright é a escolha moderna; Selenium ainda é útil em legados.
O que você vai aprender
- Instalar e usar Playwright (recomendado) e Selenium
- Navegar, clicar, preencher formulários e esperar elementos
- Tirar screenshots e extrair dados de páginas dinâmicas
- Headless vs headed e debugging
- Boas práticas de estabilidade (waits explícitos)
1. Playwright — instalação
pip install playwright
playwright install chromium
2. Exemplo básico com Playwright
playwright_basico.py
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page()
page.goto("https://quotes.toscrape.com")
page.wait_for_selector("div.quote")
quotes = page.query_selector_all("div.quote")
for q in quotes[:5]:
texto = q.query_selector("span.text").inner_text()
autor = q.query_selector("small.author").inner_text()
print(f"{autor}: {texto[:60]}...")
page.screenshot(path="quotes.png", full_page=True)
browser.close()
3. Login e formulários
page.goto("https://exemplo.com/login")
page.fill("input[name=email]", "usuario@empresa.com")
page.fill("input[name=password]", "senha-secreta")
page.click("button[type=submit]")
page.wait_for_url("**/dashboard**")
print("Login OK:", page.url)
ESTABILIDADE
Prefira wait_for_selector e wait_for_url em vez de time.sleep. Esperas explícitas tornam o script confiável.
4. Selenium (alternativa legada)
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
opts = Options()
opts.add_argument("--headless=new")
driver = webdriver.Chrome(options=opts)
driver.get("https://quotes.toscrape.com")
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "div.quote"))
)
print(driver.find_element(By.CSS_SELECTOR, "div.quote span.text").text)
driver.quit()
5. Script prático: monitorar preço
monitor_preco.py
from playwright.sync_api import sync_playwright
import json
from pathlib import Path
from datetime import datetime
URL = "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html"
def capturar_preco():
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page()
page.goto(URL)
page.wait_for_selector("p.price_color")
preco = page.query_selector("p.price_color").inner_text()
titulo = page.query_selector("h1").inner_text()
browser.close()
return {"titulo": titulo, "preco": preco, "quando": datetime.utcnow().isoformat()}
dados = capturar_preco()
historico = Path("precos.json")
lista = json.loads(historico.read_text()) if historico.exists() else []
lista.append(dados)
historico.write_text(json.dumps(lista, ensure_ascii=False, indent=2))
print(dados)
EXERCÍCIO
1. Automatize o login em um site de teste (ex.: the-internet.herokuapp.com).
2. Extraia uma tabela dinâmica e salve em CSV.
3. Adicione screenshot em caso de falha.
4. Compare Playwright e Selenium no mesmo fluxo e meça o tempo.
2. Extraia uma tabela dinâmica e salve em CSV.
3. Adicione screenshot em caso de falha.
4. Compare Playwright e Selenium no mesmo fluxo e meça o tempo.
CUIDADO
Automação de sites de terceiros pode violar termos. Use apenas em sites que você controla ou que permitem explicitamente.