单击多个选择器的最后一个元素

Clicking on the last element of multiple selectors

我有多个 .home 元素,我想点击最后一个

这是我写的:

await page.waitForSelector('.home');
const el = await page.$eval('.home', (elements) => elements[elements.length - 1]);
el.click();

但是不行。相反,我收到以下错误:

TypeError: Cannot read property 'click' of undefined
    at open_tab (C:\wamp64\www\home_robot\robot.js:43:12)
    at process._tickCallback (internal/process/next_tick.js:68:

最简单的方法是使用 page.$$ 获取 .home 元素的所有元素句柄,然后单击数组中的最后一个元素:

const elements = await page.$$('.home');
await elements[elements.length - 1].click();

为什么你的代码不起作用

您不能将 page.$eval 用于 return 元素句柄,因为您 return 那里的数据在从浏览器发送到您的 Node.js环境。

引用上面链接的文档:

returns: Promise<Serializable> Promise which resolves to the return value of pageFunction

由于无法序列化 DOM 元素,因此您无法在 Node.js 脚本中单击它,反而会收到错误消息。您必须使用 page.$page.$$ 来获取元素句柄。