Estoy usando dramaturgo en este momento, y quiero escribir una función que contenga una función de flecha interna, algo similar a
async function setSearchDate(startDate='2021-12-07') { ....do something... const startDateAttribute = await page.$(searchStartDate); await startDateAttribute.evaluate(node => node.setAttribute('value', startDate));pero de alguna manera la función de flecha interna no ve el valor de startDate. el error que recibo es "elementHandle.evaluate: ReferenceError: startDate no está definido".
El código funciona bien si codifico el valor startDate en la función de flecha. ¿Cómo puedo pasar ese valor?
evaluate evalúa su función en la página , no en el contexto de su código. Puede acceder a todo lo que existe en el entorno de ejecución de la página (por ejemplo, window , document , etc.) pero nada que exista en su entorno de ejecución (por ejemplo startDate ). Eso es porque en el contexto de la página, no hay una fecha de startDate variable (a menos que la página haya definido su propia window.startDate . fecha de inicio ...).
Para pasar parámetros, debe hacer uso de ...args : evaluate toma argumentos adicionales que se pasan a su función:
await startDateAttribute.evaluate( (node, startDate) => node.setAttribute('value', startDate), // ^^^^^^^^^ 2) extra argument(s) arrive here //vvvvvvvvv 1) extra argument(s) getting passed in here startDate ) Ver documentos: Evaluación de JavaScript (explicando este escollo exacto) y ElementHandle#evaluate .
await startDateAttribute.evaluate(function(node) { node.setAttribute('value', startDate) });