Javascript 如何在Puppeter中等待ElementHandle对象单击操作

Javascript 如何在Puppeter中等待ElementHandle对象单击操作,javascript,node.js,typescript,automation,puppeteer,Javascript,Node.js,Typescript,Automation,Puppeteer,我得到了一个“列表项”列表作为ElementHandle数组,现在我要做的是分别单击它们(这将在同一页面上加载更多数据,而无需导航到另一页面),然后单击在单击列表项后加载的另一个按钮 这就是我迄今为止所取得的成就: // get list of all li's let handles = await page.$$('div.listMiddle > div > div > ul > li'); for (let handle

我得到了一个“列表项”列表作为ElementHandle数组,现在我要做的是分别单击它们(这将在同一页面上加载更多数据,而无需导航到另一页面),然后单击在单击列表项后加载的另一个按钮

这就是我迄今为止所取得的成就:

       // get list of all li's
       let handles = await page.$$('div.listMiddle > div > div > ul > li');
        for (let handle of handles) {
            // get content of that li's
            let text = await page.evaluate(element => element.textContent, handle);
            // if they contains some specific string then click on them
            if (text.includes('something here')) {
                await handle.click();
                // this is where I am stucked at
            }
        }
因此,我标记了我坚持对上述代码进行注释的位置。单击列表项后,我想等待加载数据,然后单击新加载的按钮。这个按钮将导航到一个新的页面,但我会多次这样做。这意味着我需要返回并再次单击另一个列表项,然后再次单击按钮,然后它将导航到另一个页面在该页面上执行某些操作,然后返回

所有列表项都是这样。但是对于具有
ElementHandle
类型的句柄对象,没有
wait
方法。那我该怎么做呢?(顺便说一句,我是用打字稿写的,如果有关系的话,但我想没有)



编辑:如果问题太复杂,就回答这个问题;在
等待句柄。单击()
之后,如何才能获得此单击作为页面或元素的响应?

元素句柄是在执行上下文中创建的。这意味着如果导航到另一个页面,执行上下文将被破坏,因此
ElementHandle
将停止工作

所以,有几点建议。首先,您可以先获取您拥有的项目数量,然后导航到该页面,然后单击第一个项目,完成任务,导航回,单击第二个项目,依此类推,而不是在句柄数组中循环

因此,步骤是:
*转到页面。
*获取项目数。
*使用while(
while(currentIndex
)循环
*呼叫页面。$$
*使用
currentIndex

*单击
*waitForNavigation
*做事
*回去

其次,您可以等待单击导航到新页面

等待承诺([
page.waitForNavigation(),
句柄。单击(),
]);

谢谢您的回答。在Puppeter的文档页面中应该有一个关于这个场景的例子。因为获取项目列表、单击它们并获得结果似乎是非常普通的事情。