Изо всех сил пытается запросить определенный элемент среди других с тем же именем класса, используя .querySelector - PullRequest
0 голосов
/ 23 октября 2018

Итак, я пытаюсь сканировать сайт, используя Puppeteer.Все данные, которые я ищу, находятся в нескольких таблицах.В частности, я пытаюсь получить данные из одной таблицы.Я смог получить конкретную таблицу, используя очень подробный .querySelector(table.myclass ~ table.myclass), поэтому теперь моя проблема в том, что мой код захватывает первый элемент каждой таблицы (начиная с правильной таблицы, которая является 2-й таблицей), но я могу 'не найти способ заставить его просто собрать все данные только во 2-й таблице.

const puppeteer = require('puppeteer');
const myUrl = "https://coolurl.com";

(async () => {
  const browser = await puppeteer.launch({
    headless: true
  });
  const page = (await browser.pages())[0];
  await page.setViewport({
    width: 1920,
    height: 926
  });
  await page.goto(myUrl);

  let gameData = await page.evaluate(() => {
    let games = [];
    let gamesElms = document.querySelectorAll('table.myclass ~ table.myclass');
    gamesElms.forEach((gameelement) => {
      let gameJson = {};
      try {
        gameJson.name = gameelement.querySelector('.myclass2').textContent;
      } catch (exception) {
        console.warn(exception);
      }
      games.push(gameJson);
    });
    return games;
  })
  console.log(gameData);
  browser.close();
})();

1 Ответ

0 голосов
/ 23 октября 2018

Вы можете использовать любой из следующих методов для выбора второй таблицы:

let gamesElms = document.querySelectorAll('table.myclass')[1];
let gamesElms = document.querySelector('table.myclass:nth-child(2)');

Кроме того, вы можете использовать приведенный ниже пример, чтобы перенести все данные из таблицы в массив:

let games = Array.from(document.querySelectorAll('table.myclass:nth-child(2) tr'), e => {
  return Array.from(e.querySelectorAll('th, td'), e => e.textContent);
});

// console.log(games[rowNum][cellNum]); <-- textContent
...