Estoy tratando de implementar auditorías personalizadas usando el faro de la biblioteca del faro y ejecutando algunos comandos de Javascript dentro del Recolector. Obtengo el siguiente error:
Protocol error (Runtime.evaluate): Object reference chain is too longEn detalle tengo el siguiente Recolector:
'use strict'; const { Gatherer } = require('lighthouse'); class customGatherer extends Gatherer { afterPass(options, loadData) { const expression = `window.document.getElementsByTagName('*')`; const driver = options.driver; return driver.evaluateAsync(expression); } } module.exports = customGatherer; Que con la expression definida anteriormente se dispara el problema. Parece que hay demasiada información y no puedo manejarla. Estoy probando el comando en una página web y devuelve 1059 colecciones ( HTMLCollection(1059) ).
Cuando ejecuto el comando lighthouse para inspeccionar una página, se crea la advertencia y el resultado no se puede manipular dentro de la auditoría:
LH:Runner:warn customGatherer, required by audit my-custom-audit, encountered an error: Protocol error (Runtime.evaluate): Object reference chain is too long +0msNB: en el registro del faro también puedo ver este error:
LH:method <= browser ERR:error Runtime.evaluate +24msNecesito tener un recopilador que devuelva todos los elementos HTMLCollection para calcularlos y obtener todas las fuentes en la página. ¿Cómo puedo evitar este problema?
Ya existe un artefacto que recopila toda la información de fuentes en una página: https://github.com/GoogleChrome/lighthouse/blob/master/types/artifacts.d.ts#L139
En cuanto al error real, necesitaría escribir una función más compleja que pasaría para evaluar para procesar el DOM y devolver solo los datos que desea. Si escribe algo más que una expresión de una sola línea, sugiero usar driver.evaluate en su lugar (consulte el repositorio de Lighthouse para ver ejemplos).