$ 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

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]", "[email protected]")
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.
CUIDADO Automação de sites de terceiros pode violar termos. Use apenas em sites que você controla ou que permitem explicitamente.

Sumário do curso

Precisa de algo assim, sob medida pro seu negócio?

agendar diagnóstico gratuito →