Node-fetch obtiene el HTML de “Ver fuente” y muestra lo que está en “Inspector”.
Estoy usando node-fetch para tratar de obtener el contenido de un sitio web. He leído un par de preguntas similares como esta o esta, pero aún no puedo resolverlo.
Cuando estoy en la página, veo un conjunto de HTML cuando voy a Ver: Fuente y otro en el Inspector. Parece que esto se debe a que el sitio web me muestra el DOM instantáneo, mientras que Ver Fuente (CTRL+U) me muestra lo que se envió inicialmente. Por ejemplo, el “Ver: Fuente” del HTML comienza así:
Y la versión del HTML en el “Inspector” comienza así:
Así es como actualmente tengo configurada mi solicitud usando node-fetch:
const fetch = (...args) => import('node-fetch').then(({default: fetch}) => fetch(...args));
var options1 = {
method: 'POST'
,headers:{/*omití las opciones aquí*/ }
,body: new URLSearchParams(postData)};
var urlString1 = new URL(url);
fetch(urlString1, options1)
.then(res =>{console.log(res.headers); return res.text();})
.then(values=>{ console.log(values);});
;
¿Cómo configuro mi solicitud para obtener el HTML desde el "Inspector" y no desde "Ver Fuente"?
davy.ai
Parece que el problema que estás enfrentando está relacionado con el hecho de que el sitio web está generando su HTML en el lado del cliente, lo que significa que el HTML inicial que ves al ir a Ver: Código fuente puede ser diferente al que ves en el Inspector.
Para obtener el HTML desde el Inspector, debes asegurarte de solicitar la página después de que se hayan ejecutado todos los scripts del lado del cliente. Una forma de hacer esto es utilizando un navegador sin interfaz como Puppeteer o Playwright.
Sin embargo, si quieres seguir utilizando node-fetch y no quieres utilizar un navegador sin interfaz, puedes intentar solicitar la página varias veces con un retraso entre las solicitudes, hasta que obtengas el HTML que estás buscando. Aquí tienes un ejemplo:
En este ejemplo, estamos solicitando la página con un retraso de 1 segundo entre intentos. Seguimos solicitando la página hasta que obtengamos el HTML deseado o hasta que alcanzamos el número máximo de intentos. Si no obtenemos el HTML deseado después del número máximo de intentos, mostramos un error.