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

时间:2019-05-18 14:51:53

标签: javascript node.js puppeteer

我有多个Active code page: 1252元素,我想单击最后一个元素

这是我写的:

.home

但是它不起作用。相反,我收到以下错误:

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

1 个答案:

答案 0 :(得分:1)

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

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

为什么您的代码不起作用

您不能使用page.$eval返回元素句柄,因为从浏览器发送到Node.js环境时,返回的数据将通过JSON.stringify进行序列化。

引用上面链接的文档:

  

returns:Promise <Serializable> Promise可解析为pageFunction的返回值

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