El problema
Los scripts de Playwright y Puppeteer que scrapean motores de búsqueda y marketplaces se rompen regularmente cuando los sitios cambian su estructura HTML. Un cambio en el diseño de SERP de Google rompe selectores en todo tu pipeline. Rediseños de páginas de producto en Amazon requieren actualizaciones de emergencia en los scripts. Cada fallo causa vacíos de datos, alertas de guardia y 2-8 horas de tiempo de ingeniería para reparar. El equipo pasa más tiempo manteniendo scrapers que construyendo funcionalidades del producto.
La solucion de Scavio
Reemplaza scripts de automatización de navegador con llamadas a la API de Scavio para todos los datos de motores de búsqueda y marketplaces. La API devuelve JSON estructurado cuyo formato nunca cambia por rediseños del sitio. Tu pipeline envía solicitudes POST en vez de lanzar navegadores. El esquema de respuesta está documentado y versionado. Mantén Playwright solo para sitios que requieran interacción con el navegador (login, checkout, envío de formularios).
Antes
Antes de la migración, el pipeline ejecutaba 12 scripts de Playwright en Google, Amazon y Walmart. Tiempo promedio entre fallos de selectores: 2-3 semanas. Mantenimiento mensual: 10 horas. La rotación de guardia incluía 'cuidar scrapers' como responsabilidad permanente.
Después
Después de la migración, 8 de 12 scripts fueron reemplazados con llamadas a la API de Scavio. Los fallos de selectores pasaron de quincenales a cero para los scripts migrados. El mantenimiento mensual bajó de 10 horas a 2 horas (4 scripts restantes de Playwright para sitios fuera de búsqueda). Las alertas de guardia por scrapers desaparecieron.
Para quien es
Equipos de ingeniería que mantienen scrapers de Playwright/Puppeteer para motores de búsqueda y marketplaces. Cualquiera cuya rotación de guardia incluya el mantenimiento de scrapers como responsabilidad habitual.
Beneficios clave
- Cero mantenimiento de selectores para datos de búsqueda y marketplaces
- Esquema JSON documentado y versionado en vez de selectores DOM frágiles
- Ejecución más rápida: llamada API de 1s vs carga de página en navegador de 3-10s
- Sin instancias de navegador que gestionar, sin fugas de memoria que depurar
- Mantén Playwright solo para sitios que realmente necesitan interacción con el navegador
Ejemplo en Python
import requests
API_KEY = "your_scavio_api_key"
# Before: Playwright script (breaks every 2-3 weeks)
# async with async_playwright() as p:
# browser = await p.chromium.launch()
# page = await browser.new_page()
# await page.goto(f"https://www.google.com/search?q={query}")
# results = await page.query_selector_all("div.g") # breaks on layout changes
# for r in results:
# title = await r.query_selector("h3") # breaks on heading changes
# link = await r.query_selector("a") # breaks on link structure changes
# After: Scavio API (never breaks from site changes)
def search(query: str, platform: str = "google") -> list[dict]:
res = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": platform, "query": query, "ai_overview": True},
timeout=15,
)
res.raise_for_status()
data = res.json()
return [{
"title": r.get("title", ""),
"link": r.get("link", ""),
"snippet": r.get("snippet", ""),
"position": r.get("position", i + 1),
} for i, r in enumerate(data.get("organic", []))]
results = search("best search api 2026")
for r in results[:5]:
print(f"#{r['position']} {r['title']}")
print(f" {r['link']}")Ejemplo en JavaScript
const API_KEY = "your_scavio_api_key";
// Before: Playwright (breaks biweekly)
// const page = await browser.newPage();
// await page.goto(`https://www.google.com/search?q=${query}`);
// const results = await page.$$eval("div.g", ...) // fragile selectors
// After: Scavio API (stable JSON schema)
async function search(query, platform = "google") {
const res = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST",
headers: { "x-api-key": API_KEY, "content-type": "application/json" },
body: JSON.stringify({ platform, query, ai_overview: true }),
});
if (!res.ok) throw new Error(`scavio ${res.status}`);
const data = await res.json();
return (data.organic ?? []).map((r, i) => ({ title: r.title ?? "", link: r.link ?? "", snippet: r.snippet ?? "", position: r.position ?? i + 1 }));
}
const results = await search("best search api 2026");
for (const r of results.slice(0, 5)) console.log(`#${r.position} ${r.title}\n ${r.link}`);Plataformas utilizadas
Búsqueda web con grafo de conocimiento, PAA y resúmenes de IA
Amazon
Búsqueda de productos con precios, calificaciones y reseñas
Walmart
Búsqueda de productos con precios y datos de cumplimiento
YouTube
Búsqueda de videos con transcripciones y metadatos