木偶循环通过并单击元素

时间:2020-03-23 19:39:54

标签: javascript node.js puppeteer

我正在尝试编写一个Puppeteer Node JS应用程序,该应用程序将从网站获取信息并最终保存为JSON,但在尝试使Puppeteer遍历页面上的元素并单击它们时遇到了一些麻烦,更多具体来说,在我的目标网站的一部分中,有一个带有过滤器的侧边栏,每个过滤器都是一个<div>类,其类别为:.common-filters-FilterWrapper__container--3m4Qd,其中大约有7个部分,它们非常一致,但我只需要一些信息。

在每个部分中,都有多个复选框,我需要在页面加载的每个部分中选择一个特定的复选框,然后手动选择一个复选框将需要几秒钟的时间来更新它(页面不会刷新)。 / p>

这是我的代码:

// 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语句中的第一个成功执行了,其余语句却没有成功?

我每次都需要延迟吗?

0 个答案:

没有答案