Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

699
Vistas
Accediendo a la variable javascript en Puppeteer

Estoy tratando de representar una página usando titiritero, extraer el nombre de una variable javascript dinámica en la página y devolver la variable como un objeto. Estoy usando titiritero y node.js para hacer esto.

Puedo obtener el nombre de la variable javascript que se genera en la página, pero cada vez que intento imprimirla en la consola, aparece un error " indefinido ". He pasado la mayor parte de la mañana tratando de resolver esto, pero estoy perplejo. Aquí está el código a continuación.

 const puppeteer= require('puppeteer'); var url = 'https://www.website.com'; async function run () { try { const browser = await puppeteer.launch({ headless: true, args: ['--no-sandbox'] }); const page = await browser.newPage(); await page.goto(url); const flashVariableName = await page.evaluate( () => { var start = document.documentElement.innerHTML.indexOf('var flashvariable_') + 'var '.length; var tempDoc = document.documentElement.innerHTML.substr(start); var end = tempDoc.indexOf(' ='); return tempDoc.substr(0, end); }); console.log(await page.evaluate( (flashVariableName) => flashVariableName )); await browser.close(); } catch(e){ console.log("Error Occurred", e) } } run();

Salida de consola

flashVariableName está devolviendo el nombre correcto para la variable javascript en la página, pero ¿cómo puedo obtener acceso a la variable?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Tienes dos problemas.

Este es el primero:

 console.log(await page.evaluate( (flashVariableName) => flashVariableName )); // ^^^^^^^^^^^^^^^^^ // | // +--> this is undefined

Si observa la documentación de Page#evaluate

ingrese la descripción de la imagen aquí

Lo que te falta es el bit ...args que proporciona parámetros a pageFunction . Debería haber sido esto en su lugar:

 console.log(await page.evaluate( (flashVariableName) => flashVariableName, flashVariableName )); // ^^^^^^^^^^^^^^^^^

Pero eso no es suficiente porque flashVariableName es solo una cadena en este punto. Es el nombre de una variable pero no la variable en sí. Todavía necesita "evaluarlo":

 console.log(await page.evaluate( (varName) => window[varName], flashVariableName ));

Sin embargo, eso solo funciona si la variable que está tratando de leer está disponible en el alcance global (es decir window en su caso) Y se puede serializar (por ejemplo, si se refiere a una función o un elemento DOM que no será posible)

over 4 years ago · Santiago Trujillo Denunciar

0

El valor de retorno del método page.evaluate() debe ser serializable. Otras formas devolverá indefinido. En este momento solo está devolviendo un String . Puede ver la definición aquí https://pptr.dev/#?product=Puppeteer&version=v5.5.0&show=api-pageevaluatepagefunction-args

 let theVariableName = tempDoc.substr(0,end); return {theVariable: theVariableName}

Después de esto, puede acceder a su variable en su variable flashVariableName .

over 4 years ago · Santiago Trujillo Denunciar

0

He encontrado la mejor manera fácil. Vea el siguiente ejemplo

 const flatFormData = await page.evaluate("__platform_data__"); console.log(flatFormData);
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda