Estoy escribiendo un raspador con titiritero y necesito llenar los campos de un formulario construido con Aura js. El problema es que no puedo acceder a los campos de entrada y contraseña porque están dentro de un elemento personalizado:
<lightning-input class="input sfdc_usernameinput slds-form-element" data-aura-rendered-by="116:0" lightning-input_input-host=""><span lightning-input_input="" data-aria="" class="slds-assistive-text"></span><label lightning-input_input="" for="input-5" class="slds-form-element__label slds-no-flex slds-assistive-text">Username</label> <div lightning-input_input="" class="slds-form-element__control slds-grow"> <input lightning-input_input="" type="text" id="input-5" aria-invalid="false" placeholder="Username" class="slds-input"> </div> </lightning-input>Y cuando intento:
await page.type('#input-5', 'myusername');arroja el error:
Error: No node found for selector: #input-5
Esto se confirma si pruebo document.getElementById('#input-5') en la consola del navegador.
Entonces, ¿cómo obtengo esa entrada?
EDITAR: Agregar una captura de pantalla que muestra lo que sucede aquí: el marcado con elementos secundarios pero sin forma de acceder a ellos.
El elemento que está buscando está encapsulado en el DOM oculto, lo que lo oculta de los métodos de consulta DOM normales.
Todavía puedes consultarlos así:
document.querySelector("lightning-badge").shadowRoot.querySelector('#input-5')Ejemplo: en esta página de demostración de Aura puedo obtener el texto de un rayo con este código:
document.querySelector("lightning-badge").shadowRoot.textContent"Posición de salida"
Por supuesto, esta consulta puede ejecutarse en una page.evaluate método de evaluación también con titiritero.