Нажатие на последний элемент нескольких селекторов - PullRequest
1 голос
/ 18 мая 2019

У меня есть несколько .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:

1 Ответ

1 голос
/ 18 мая 2019

Самый простой способ - использовать page.$$, чтобы получить все дескрипторы элементов .home элементов, а затем щелкнуть последний элемент в массиве:

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

Почему ваш код не работает

Вы не можете использовать page.$eval для возврата дескриптора элемента, поскольку возвращаемые вами данные будут сериализованы через JSON.stringify при отправкеиз браузера в вашу среду Node.js.

Цитата из документов, указанных выше:

возвращает: Обещание <<a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#Description" rel="nofollow noreferrer"> Сериализуемый > Обещание, которое разрешается ввозвращаемое значение pageFunction

Поскольку элемент DOM не может быть сериализован, вы не можете щелкнуть по нему в скрипте Node.js и вместо этого вы получите ошибку.Вы должны использовать page.$ или page.$$, чтобы получить дескрипторы элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...