Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

414
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!