单击多个选择器的最后一个元素
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.$$
来获取元素句柄。
我有多个 .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.$$
来获取元素句柄。