Acabo de resolver un problema usando "elementHandle.contentFrame()", pero realmente no sé qué sucede detrás de él. Entonces, estaba tratando de seleccionar un elemento DOM y hacer clic en él. Pero me di cuenta de que no podía simplemente hacerlo así cuando el elemento está envuelto dentro de un marco:
{ await page.click('<element>'); }
Entonces, apliqué este método ("elementHandle.contentFrame()") ¡y funcionó!
{ const handle = await page.$('frame'); const contentFrame = await handle.contentFrame(); await contentFrame.click('<selector>'); }
¿Alguien puede explicarme el concepto detrás de esto? ¡Gracias!
No tiene que usar contentFrame
, page.frame('frame-name')
también puede darle una instancia de marco.
Básicamente, puede pensar que iframe es una página dentro de otra página, por lo que primero debe encontrar ese marco si desea seleccionar el elemento dentro de un iframe
El identificador que tiene en la variable de handle
representa el elemento iframe
dentro de la página. Con esa variable, puede leer o manipular ese elemento de la misma manera que puede hacerlo con cualquier otro elemento DOM en esa página. Pero no puede acceder al contenido HTML que representa el iframe.
Por eso, si desea interactuar con el contenido dentro de ese marco, debe obtener el frame
usando contentFrame
.