我有多个Active code page: 1252
元素,我想单击最后一个元素
这是我写的:
.home
但是它不起作用。相反,我收到以下错误:
await page.waitForSelector('.home');
const el = await page.$eval('.home', (elements) => elements[elements.length - 1]);
el.click();
答案 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.$$
来获取元素句柄。