# Entrar Web Humano

> Saltarse CUALQUIER protección anti-bot (DataDome, Cloudflare, PerimeterX) para extraer datos SIEMPRE. Dos vías, usa la que gane — proxy residencial de Apify (lo más fiable, la que pasó coches.net/mobile.de) o navegador humano con Playwright (perfil caliente, sigilo de huella, ratón/scroll humanos, IPv4 forzada) para sesiones logueadas. Úsalo cuando un portal bloquee el scraping ("eres un bot", "Access denied", 403, captcha) y haya que leer datos igualmente (coches.net, mobile.de, idealista, Adevinta, etc.). Incluye orden de ataque, diagnóstico IP/VPN y trucos de filtros de los actores.

- Skill: `elninotarifa-creator/entrar-web-humano` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add elninotarifa-creator/entrar-web-humano`
- Raw SKILL.md: https://api.skillmd.com/api/skills/elninotarifa-creator/entrar-web-humano/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: elninotarifa-creator (https://skillmd.com/u/elninotarifa-creator)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/elninotarifa-creator/entrar-web-humano

---


# 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)

1. **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.
2. **Si no hay actor** (o necesitas sesión logueada / clicar) → navegador humano
   con Playwright (sección "Técnica humana").
3. **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:

```sh
# ¿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:

1. **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 el `import 'playwright'` falla con MODULE_NOT_FOUND).
2. **Perfil persistente** (`launchPersistentContext('~/.car-scrape-profile', …)`): las
   cookies (incluida la de DataDome, si se gana) se quedan y las visitas siguientes
   van "calientes". `headless: false` siempre.
3. **Sigilo de huella** vía `addInitScript`: `navigator.webdriver=false`, `languages`,
   `plugins`, `window.chrome`, `permissions.query`, `hardwareConcurrency`, `deviceMemory`.
4. **Comportamiento humano**: `humanize()` mueve el ratón en pasos con pausas aleatorias
   y hace micro-scroll durante segundos. UA y `Chrome/XXX` coherentes con la versión.
5. **Navega como persona**: primero HOME → acepta cookies → dwell → LUEGO la sección.
   **No** hagas `goto` directo a la URL de listado profunda (es lo que más se marca).
6. **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 con `dig +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. Un
  `itemCount: 0` NO 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: COUPE` da 0. Mejor **`query` de texto libre**
  (`"cayenne coupe"`, `"Porsche Cayenne Coupe E-Hybrid"`) + `yearMin`/`kmMax` sueltos,
  y afina TÚ los resultados en código, no en el filtro del actor.
- **mobile.de:** `make`+`model` estricto puede fallar; `query` de texto + `category:CAR`
  + `yearMin` + `mileageMax` + `sort:price_asc` funcionó (33 resultados reales).
- **coches.net:** `make:Porsche` + `query:"cayenne coupe"` + `yearMin` + `kmMax` = 50
  resultados. El campo `year` a 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

```sh
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]].

