Кукловод l oop сквозь и щелкает по элементам - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь написать приложение Puppeteer Node JS, которое будет получать информацию с веб-сайта и в конечном итоге сохранять на JSON. У меня возникают проблемы при попытке перевести Puppeteer на l oop через элементы на и щелкните их, более конкретно, с разделом моего целевого веб-сайта, у него есть боковая панель с фильтрами, каждый фильтр - <div> с классом: .common-filters-FilterWrapper__container--3m4Qd, есть около 7 из этих разделов, они довольно непротиворечиво, но мне нужна информация только от нескольких.

В каждом разделе есть различные флажки, и мне нужно выбрать определенный c один из каждого раздела при загрузке страницы, затем вручную установите флажок Обновление займет несколько секунд (страница не обновляется sh).

Вот мой код:

// require Puppeteer
const puppeteer = require('puppeteer');

// launch Puppeteer with options, wait for it to launch
puppeteer.launch({
  headless: false
}).then(async browser => {

  // go to our page of choice, and wait for the body to load
  const page = await browser.newPage();
  await page.goto('https://www.tripadvisor.co.uk/Restaurants-g186458-Bridgend_Bridgend_County_South_Wales_Wales.html');
  await page.waitForSelector('body');

  // wait before evaluating the page
  await page.evaluate(() => {

    // get filters
    const filters = document.querySelectorAll('.restaurants-filters-Filters__wrapper--3z-oK .common-filters-FilterWrapper__container--3m4Qd')

    // loop through filters and select them
    for (let filter of Array.from(filters)) {
      const filterLabel = filter.querySelector('.common-filters-FilterWrapper__headerText--1G5Z1')

      if (filterLabel.innerText === 'Establishment Type') {
        filter.querySelector('._3kI1z_wP.v8kb8R34').click() // expand options
        filter.querySelector('input[type="checkbox"][value="11776"]').click() // Bars & Pubs
      }

      if (filterLabel.innerText === 'Restaurant features') {
        filter.querySelector('._3kI1z_wP.v8kb8R34').click() // expand options
        filter.querySelector('input[type="checkbox"][value="10862"]').click() // Serves Alcohol
      }

      if (filterLabel.innerText === 'Good for') {
        filter.querySelector('._3kI1z_wP.v8kb8R34').click() // expand options
        filter.querySelector('input[type="checkbox"][value="10608"]').click() // Bar Scene
      }

    }


  });

  // browser.close();

});

Это выглядело бы так, как будто первый из 3 if операторов успешно выполняются, а остальные нет?

Нужна ли задержка после каждого?

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