Перебирать ссылки на странице и нажимать в зависимости от условия

Я очищаю веб-страницу, и мне нужно загрузить с этой страницы только те файлы, которые соответствуют определенным критериям. Как я могу добиться этого в кукловоде?

Я могу найти элемент с помощью селектора и получить нужные мне атрибуты с помощью page.$$eval, но я не могу понять, как щелкнуть эту ссылку.

const sectionLinks = await page.$$eval('#mainsection a', aTags => aTags.map(a => a.innerText));
  for (const sectionLink of sectionLinks) {
    if (sectionLink.toUpperCase() == 'THEONEIWANT') {
      console.log('download');
      //this is where I want to click the link
    }
  }
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Сравнение структур данных: Массивы и объекты в Javascript
Сравнение структур данных: Массивы и объекты в Javascript
Итак, вы изучили основы JavaScript и хотите перейти к изучению структур данных. Мотивация для изучения/понимания Структур данных может быть разной,...
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Прошлая статья была первой из цикла статей о создании системы электронной коммерции с использованием Keystone.js, и она была посвящена главным образом...
Приложение для отслеживания бюджета на React js для начинающих
Приложение для отслеживания бюджета на React js для начинающих
Обучение на практике - это проверенная тема для достижения успеха в любой области. Если вы знаете контекст фразы "Практика делает человека...
Стоит ли использовать React в 2022 году?
Стоит ли использовать React в 2022 году?
В 2022 году мы все слышим о трендах фронтенда (React, Vue), но мы не знаем, почему мы должны использовать эти фреймворки, когда их использовать, а...
1
0
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не получаете дескрипторы элементов. Вы возвращаете только их значение innerText.

Что вы можете сделать, так это сначала получить все элементы, а затем перебрать их следующим образом:

const elements = await page.$$('#mainsection a');
for (const el of elements) {
    const innerText = await page.evaluate(el => el.innerText, el);
    if (innerText.toUpperCase() == 'THEONEIWANT') {
        await el.click();
    }
}

Это позволит просмотреть все элементы один за другим, прочитать их значение innerText, проверить, соответствует ли условие, а затем щелкнуть по нему.

Оптимизация

Это может занять некоторое время, если ссылок много. Вы можете улучшить этот код, используя селектор, который соответствует тексту, который вы ищете (проверьте этот вопрос для получения дополнительной информации), или используя выражение, подобное следующему, чтобы проверить, соответствует ли условие на стороне клиента. Это сделает проверку сразу для всех элементов:

const shouldElementBeClicked = page.evaluate((...args) => args.map(el => el.innerText === '...'), ...elements);

Это приведет к массиву с логическим значением, сигнализирующим о том, удовлетворяет ли элемент в той же позиции в массиве elements условию.

Другие вопросы по теме