Entrar en webs con anti-bot: saltarse TODAS las protecciones
Objetivo: sacar los datos SIEMPRE, cueste lo que cueste. Hay dos vías; usa la que gane. Si el navegador humano se estrella contra el muro, NO te rindas: pasa a proxy residencial (Apify), que es lo que resuelve el caso.
Orden de ataque (probado 13/09/2026, coches.net + mobile.de)
- Si existe un actor de Apify para ese portal → EMPIEZA POR AHÍ. Es lo más fiable y lo que funcionó cuando Playwright quedó bloqueado por DataDome. El proxy RESIDENTIAL + huella real del actor pasa el muro sin pelear. Ver sección "Proxy residencial (Apify)" abajo — trae los datos estructurados directamente.
- Si no hay actor (o necesitas sesión logueada / clicar) → navegador humano con Playwright (sección "Técnica humana").
- Diagnostica solo si vas a insistir con el navegador (IP/VPN, ver abajo).
Regla mental: el navegador humano es para entrar logueado y clicar; Apify es para extraer datos en volumen sin que te bloqueen. Para "dame los coches/pisos/lo que sea" la respuesta casi siempre es Apify primero.
Cuando un portal capa el acceso automático, este es el procedimiento para intentar entrar "como una persona" desde tu máquina, y saber cuándo no se puede y hay que pasar a proxy residencial.
Regla de oro: diagnostica ANTES de insistir
El 90% de los bloqueos no son por "comportamiento", son por reputación de IP o huella del navegador. Antes de escribir mil movimientos de ratón, comprueba la causa:
# ¿Qué IP ve el sitio? ¿IPv4 residencial o IPv6 de datacenter?
curl -4 -s https://ipinfo.io/json | grep -E '"(ip|city|country|org)"'
curl -6 -s https://api64.ipify.org # si sale una IPv6, MUCHOS anti-bot la marcan
# ¿Hay VPN activa?
ifconfig | grep -E "^(utun|tun|ppp|wg|ipsec)"; scutil --nc list
Caso real (portal Adevinta con DataDome): la IPv4 era residencial limpia, pero Chromium salía por una IPv6 que DataDome trataba como VPN/datacenter → bloqueo con "Estás usando una VPN". La home y la sección general cargaban; solo el listado filtrado profundo se bloqueaba. Muchos operadores domésticos asignan rangos IPv6 que los anti-bot marcan aunque tu IPv4 sea limpia: por eso el forzado de IPv4 (abajo) suele desatascarlo.
Técnica humana (Playwright)
scripts/human_browse.mjs es la plantilla. Claves:
- Chrome real si existe (
channel: 'chrome'), si no el Chromium de Playwright (en este Mac Playwright vive en~/vimeo-upload/node_modules; ejecuta el script desde ahí o elimport 'playwright'falla con MODULE_NOT_FOUND). - Perfil persistente (
launchPersistentContext('~/.car-scrape-profile', …)): las cookies (incluida la de DataDome, si se gana) se quedan y las visitas siguientes van "calientes".headless: falsesiempre. - Sigilo de huella vía
addInitScript:navigator.webdriver=false,languages,plugins,window.chrome,permissions.query,hardwareConcurrency,deviceMemory. - Comportamiento humano:
humanize()mueve el ratón en pasos con pausas aleatorias y hace micro-scroll durante segundos. UA yChrome/XXXcoherentes con la versión. - Navega como persona: primero HOME → acepta cookies → dwell → LUEGO la sección.
No hagas
gotodirecto a la URL de listado profunda (es lo que más se marca). - Forzar IPv4 cuando la IPv6 esté marcada:
--host-resolver-rules=MAP www.coches.net <A_RECORD_IPv4>, MAP coches.net <IPv4>(saca los A records condig +short A host).
El truco que SÍ suele funcionar en SPAs (Adevinta/coches.net)
La página general (/segunda-mano/) no está bloqueada y su listado carga por XHR
a la API interna. En vez de cargar la URL profunda marcada, filtra dentro de la SPA:
entra en /segunda-mano/, y con clics humanos abre "Marca y modelo" → Porsche → Cayenne
(o escribe en su buscador). Los resultados llegan por XHR sin disparar el interstitial.
Es lo más "humano" y lo último a probar antes de rendirse.
Proxy residencial (Apify) — la vía que SIEMPRE pasa el muro
Cuando el muro es IP + JA3/huella TLS (te sale "eres un bot"/"Access denied" pese a IPv4 + perfil caliente + humano), no se salva de forma fiable desde esta máquina. Usa Apify con proxy RESIDENTIAL — resuelve el caso. Actores probados:
- coches.net →
blackfalcondata/coches-scraper - mobile.de →
blackfalcondata/mobile-de-scraper - autoscout24 →
blackfalcondata/autoscout24-scraper(agrega 9 países EU, va sin bloqueo)
Vía MCP: mcp__apify__fetch-actor-details (para ver el input schema) →
mcp__apify__call-actor (waitSecs 45) → mcp__apify__get-dataset-items (con fields=
para proyectar solo lo útil). El proxy residencial ya va incluido; no hace falta
configurar proxyConfiguration a mano.
Trucos de filtros aprendidos (13/09/2026, Cayenne Coupé E-Hybrid)
- Filtros estrictos devuelven 0 con falso "SUCCEEDED". El schema acepta
bodyType,fuelType,yearMin/Max… pero combinarlos todos suele vaciar el resultado. UnitemCount: 0NO significa "no hay coches", significa "afiné de más". - El body/tipo miente. El Cayenne Coupé lo clasifican como SUV "5p", no como
"Coupé" → filtrar por
bodyType: COUPEda 0. Mejorqueryde texto libre ("cayenne coupe","Porsche Cayenne Coupe E-Hybrid") +yearMin/kmMaxsueltos, y afina TÚ los resultados en código, no en el filtro del actor. - mobile.de:
make+modelestricto puede fallar;queryde texto +category:CARyearMin+mileageMax+sort:price_ascfuncionó (33 resultados reales).
- coches.net:
make:Porsche+query:"cayenne coupe"+yearMin+kmMax= 50 resultados. El campoyeara veces no cuadra con el año del anuncio: reconfirma en la URL/título si el año es crítico. - Empieza laxo, mira cuántos vuelven, y estrecha. Si vuelve 0, quita el filtro más
agresivo (casi siempre
bodyType/fuelType) y reintenta.
Reporta con honestidad: "entré como humano hasta donde el anti-bot lo permite; el resto lo saqué por proxy residencial (Apify)".
Ejecutar
cd ~/vimeo-upload && node ~/.claude/skills/entrar-web-humano/scripts/human_browse.mjs
# captura en /tmp/human_coches.png ; ajusta target/selectores por portal
Ver también memoria [[reference_scraping_apify]] y [[reference_chromium_cdp_sesiones]].