Estoy tratando de usar un módulo de nodo en la función de devolución de llamada de evaluación de pesadilla, pero cada vez que ejecuto mi código aparece un error que dice que html2json is not defined . Intenté usar import y require para importar mi módulo, pero no funcionó. También intenté usar el cierre para pasar el módulo y devolver la función de devolución de llamada donde usé ese módulo específico, pero tampoco funcionó. Si uso este módulo fuera de la función de devolución de llamada, funciona perfectamente bien. Cualquier ayuda en esto es muy apreciada.
import Nightmare from "nightmare"; import html2json from "html2json"; const nightmare = Nightmare({ show: false }); async function startScrap() { let result = await nightmare .goto("https://duckduckgo.com") .evaluate(() => { const html = html2json.html2json( document.querySelector("#r1-0 a.result__a").innerHTML, ); console.log(html); return document.querySelector("#r1-0 a.result__a").href; }) .end() .then(function (result) { console.log(result); }); } startScrap();El error que me sale cada vez:
node:internal/process/promises:265 triggerUncaughtException(err, true /* fromPromise */); rogramming\Personal Projects\scrappers\animelist-scrapper\test.js" ^ ReferenceError: html2json is not defined at fn (<anonymous>:6:26) at javascript (<anonymous>:25:21) at <anonymous>:40:3 at EventEmitter.electron.ipcRenderer.on (d:\Programming\Personal Projects\scrappers\animelist-scrapper\node_modules\electron\dist\resources\electron.asar\renderer\web-frame-init.js:36:30) s\scrappers\animelist-scrapper\node_modules\electron\dist\resources\electron.asar\renderer\web-frame-init.js:36:30) at emitMany (events.js:147:13) at EventEmitter.emit (events.js:224:7) { code: -1 }La función que pasa en evaluar () se ejecuta en el navegador. Como ejecutar la función abriendo una página web en su navegador web. Por lo tanto, no tiene acceso a los módulos de nodo.
La forma de hacerlo es seleccionar y extraer los atributos de los elementos que le interesan y luego procesarlos en then().
then() tendrá acceso a los módulos de nodo.