未找到 Puppeteer 选择器

Puppeteer selector not being found

我在调试为什么未单击查询选择器时遇到问题 - 我可以在 chrome 中搜索它,如果在开发工具中使用 document.querySelector(),它会找到查询,这让我相信它是正确的,但是它没有按下它并且只是超时

点击方式:

async function click(page, selector, timeout) {
await beforeAction(page, timeout);
await page.waitForSelector(selector);
await page.waitFor(200);
await page.click(selector);
}

执行的主要方法:

async function existingStart(page) {
await loadCookies(page);
await page.goto(
    "https://mc.s7.exacttarget.com/cloud/#app/Email/C12/Default.aspx?entityType=none&entityID=0&ks=ks%23Content"
    , {
        waitUntil: 'load',
        timeout: 0
    }
);
await page.waitFor(200);
const contentBuilderFrame = await findFrame(page, "contentbuilder");
const searchField = await contentBuilderFrame.$(".contentsearch > input");
searchField.focus();
await page.keyboard.type("20200903");
await page.waitFor(500);
await page.keyboard.press('Enter');
await page.waitFor(5000);
// Screenshot to check page state
await page.screenshot({

    path: "./screenshot.png",

    fullPage: true

});
await page.waitFor(500);
// Times out
await click(page, '#contentRepeater > div.repeater-viewport > div.repeater-canvas.scrolling > div > div > table > tbody > tr:nth-child(1) > td:nth-child(3) > div > div > div > div')

}

如果我在单击选择器之前调用 find Iframe 方法:

await findFrame(page, "contentbuilder");

什么都没发生,它因 JSHandler 问题而出错,有人遇到过类似的事情吗?难道问题出在 Iframe 上?奇怪的是 searchField 输入和按键都正常。而且,它是同一个iframe,所以我不应该调用两次findFrame。

操作前:

async function beforeAction(page, timeout) {
if (timeout != null) {
await page.waitFor(timeout);
}

var isLoading = await isPageLoading(page);

while (isLoading) {
await new Promise((resolve) => setTimeout(resolve, 1000));
isLoading = await isPageLoading(page);
 }
}

由于我们在评论中得出了答案,所以我将其张贴在这里以供遇到此问题的其他人使用。

由于目标选择器在 iframe (contentbuilder) 中,作为参数传递给函数 click 的上下文不是 page,而是 iframe 元素:contentBuilderFrame.