Cuando se ejecuta la siguiente compilación, aparece el error "Error: la evaluación falló: ReferenceError: el fragmento no está definido" como respuesta de la consola. En la siguiente línea, puedo acceder a chunk[a] como console.log, pero ¿por qué no puedo acceder a él en frame.evaluate?
const puppeteer = require('puppeteer'); const chunk= ["google.com","facebook.com","gmail.com","stackoverflow.com"]; (async () => { for(var a=0;a<chunk.length;a++){ const browser = await puppeteer.launch({headless:false}) const page = await browser.newPage(); const iframeHandle = await page.$("frame[name='main']"); const frame = await iframeHandle.contentFrame(); console.log(chunk[a]); await frame.evaluate(() => { if(document.querySelector("#content > table").innerHTML.indexOf(chunk[a]) > -1){ console.log(chunk[a]); } }); } })()resultado: la evaluación de google.com falló: ReferenceError: el fragmento no está definido
Moví el trozo dentro del asíncrono y el chunk is not defined desapareció. Sin embargo, esta vez ocurrió otro error con respecto al elemento al que desea llegar. Traté de corregir esto también agregando .waitForSelector y eliminando page.$ pero ocurrió un tercer error que creo que se debe a una ruta de elemento mal escrita ("frame[name='main']") . Puede cambiarlo y probarlo con el siguiente código:
(async () => { const chunk= ["google.com","facebook.com","gmail.com","stackoverflow.com"]; for(var a=0;a<chunk.length;a++){ const browser = await puppeteer.launch({headless:false}) const page = await browser.newPage(); const iframeHandle = await page.waitForSelector("frame[name='main']"); const frame = await iframeHandle.contentFrame(); console.log(chunk[a]); await frame.evaluate(() => { if(document.querySelector("#content > table").innerHTML.indexOf(chunk[a]) > -1){ console.log(chunk[a]); } }); } })()