Estoy usando Node.js y Puppeteer y lo tengo configurado para cargar una página específica. Esta página muestra nuevos elementos cada segundo y estoy agregando un MutationObserver para escuchar y activar una función cuando se agregan nuevos elementos.
Si, por ejemplo, pruebo getItem(mutation) , registrará {} , un objeto vacío
Pero si intento getItem(mutation.addedNodes[0].textContent) registrará 'NewElement' , que es el contenido de texto del nuevo elemento.
También probar cualquier cosa entre la mutation hasta la mutation.addedNodes[0].textContent da como resultado objetos/matrices vacíos.
¿Por qué el primer ejemplo no registra nada, el objeto tiene valores ya que puedo alcanzarlos siendo más específico? ¿Por qué no registra los valores que tiene y la estructura del objeto?
const runPuppeteer = async (url: string) => { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.setViewport({ width: 1920, height: 1080 }) await page.goto(url); await page.exposeFunction('getItem', (a: any) => { console.log(a) }) await page.evaluate(() => { let observer = new MutationObserver((mutations) => { for (const mutation of mutations) { getItem(mutation.addedNodes[0].textContent) // <--- My question } }) observer.observe(document.querySelector('#chatDiv'), { attributes: false, childList: true, subtree: true }) }) } let myPage = 'http://localhost:3000/home' runPuppeteer(myPage)No todas las propiedades de todos los objetos se imprimirán con console.log, particularmente con los elementos integrados. Si desea conocer todas las propiedades de un objeto, puede probar Object.keys(o) o Reflect.ownKeys
También hay bibliotecas de serialización y bibliotecas de "objetivación" que intentarán convertir una instancia de clase compleja en un objeto explícito similar a json.
A veces, las clases tendrán captadores, un número se envolverá como un objeto, los objetos serán enviados por proxy, etc., por lo que, en general, la salida de console.log puede ser extremadamente incompleta.