如何获取 HTML 个自定义元素的子元素?

How to get children of HTML custom elements?

我正在用 puppeteer 写一个爬虫,我需要填写一个用 Aura js 构建的表单的字段。问题是我无法访问输入和密码字段,因为它们位于自定义元素内:

<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>

当我尝试时:

await page.type('#input-5', 'myusername');

它抛出错误:

Error: No node found for selector: #input-5

如果我在浏览器控制台中尝试 document.getElementById('#input-5') 即可确认。

那么我如何获得该输入?

编辑:添加显示此处发生情况的屏幕截图:带有子元素但无法访问它们的标记。

您要查找的元素被封装在 shadow DOM 中,从而使它们对正常的 DOM 查询方法隐藏。

您仍然可以这样查询它们:

document.querySelector("lightning-badge").shadowRoot.querySelector('#input-5')

示例:在 this Aura demo page 我可以使用以下代码获取闪电徽章的文本:

document.querySelector("lightning-badge").shadowRoot.textContent

"Start Position"

这个查询当然也可以用 puppeteer 在 page.evaluate 方法中执行。