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

405
Vistas
depuración en cromo / titiritero no completa el script de evaluación

Así que tengo el siguiente código de lanzamiento

 this.browser = await puppeteer.launch( { headless: false, devtools: true, slowMo: 200}); this.page = await this.browser.newPage(); await this.page.goto(pageUrl); let result = await this.page.evaluate(() => { const labels = document.querySelectorAll("li.product-item"); let productList = []; for(let product of labels) { productList.push(product); } debugger; //filter only product stacks that have a price const productStacks = productList.filter(product => product.querySelector("span.price-wrapper") !== null); let results = productStacks.map(product => { return product.querySelector("span.price-wrapper").getAttribute("data-price-amount"); }); return results; });

Entonces, Chrome se inicia y se detiene en el código apropiado (lo mejor que puedo decir), incluso puedo ver las variables locales poblarse con el resultado esperado y recorrer el código, sin embargo, el archivo abierto puppeteer_e Evaluation_script no se llena con el script de evaluación y Se queda con el contenido, por lo que estoy paso a paso a ciegas.

 //# sourceURL=__puppeteer_evaluation_script__

Ocasionalmente, después de muchos minutos, a veces se llena con el código. No tengo idea de qué está mal, he intentado actualizar los últimos lts de nodo y titiritero pero tengo el mismo comportamiento.

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

0

No sé qué causa este problema, pero aquí hay un par de posibles soluciones.

Para evitar conseguir:

//# sourceURL=__puppeteer_evaluation_script__

Puedes exponer una función:

 const puppeteer = require('puppeteer'); var browser = null; var page = null; (async () => { browser = await puppeteer.launch( { headless: false, devtools: true, }); page = await browser.newPage(); await page.goto("https://google.com/"); // Expose a function page.exposeFunction("nothing", () => null); await page.evaluate(async function() { debugger; console.log("Do task"); }); })();

En caso de que eso falle en el futuro. Hice un envoltorio para usar eval() ya que la fuente aparece usando eso. Funciona tanto con funciones de sincronización como asíncronas y admite el paso de argumentos y la devolución de valores.

 function evaluateFixed(page, realFunction) { return page.evaluate(async function(realFunction, args) { var func = eval(`(${realFunction})`); if(func.constructor.name === "AsyncFunction") return await func(...args); else return func(...args); }, realFunction.toString(), Array.from(arguments).slice(2)); } (async () => { browser = await puppeteer.launch( { headless: false, devtools: true, }); page = await browser.newPage(); await page.goto("https://google.com/"); console.log("Doing test"); let res = await evaluateFixed(page, async function(x, y, z) { debugger; console.log("Do task", x, y, z); function sleep(amount) { return new Promise((resolve) => setTimeout(resolve, amount)); } for(let i = 0; i < 10; i++) { console.log("on seconds", i); await sleep(1000); } return { "fee": "foo" }; }, 1, "two", { "three": 3}); console.log("Res 1", res); res = await evaluateFixed(page, () => { debugger; return 1 + 2; }); console.log("Res 2", res); })();
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