Как заставить скрипт Puppeteer / Node читать <div>по его классу? - PullRequest
0 голосов
/ 08 ноября 2018

Есть ли способ выбрать <div> по его классу в веб-браузере Node Puppeteer?

На веб-странице есть div, которое выглядит следующим образом: <div class="Body-body-qL80Q">

Я хочу, чтобы мой скребок взял текст с этого div. В настоящее время я просто пытаюсь записать его на консоль, чтобы убедиться, что он захватывает правильный текст.

Что не так с моим querySelector? (Ранее у меня был сценарий, чтобы перейти на правильную страницу и сделать снимок экрана, что он сделал правильно, поэтому я знаю, что остальная часть работает.)

const puppeteer = require('puppeteer');
const CREDS = require('./creds');

(async () => {
  const browser = await puppeteer.launch({ headless: true });

  const page = await browser.newPage();

  await page.goto('https://www.squarespace.com/login');

  const USERNAME_SELECTOR = '.username.Input-hxTtdt.ipapEE';
  const PASSWORD_SELECTOR = '.password.Input-hxTtdt.ipapEE';
  const BUTTON_SELECTOR = '.Button-kDSBcD.fATVqu';

  await page.click(USERNAME_SELECTOR);
  await page.keyboard.type(CREDS.username);

  await page.click(PASSWORD_SELECTOR);
  await page.keyboard.type(CREDS.password);

  await Promise.all([
    page.waitForNavigation(),
    page.click(BUTTON_SELECTOR),
  ]);

  await page.goto('https://triangle-oarfish-hk88.squarespace.com/config/analytics#activity-log');

  const textContent = await page.evaluate(() => document.querySelector('Body-body-qL80Q').className);

  console.log(textContent);

  await browser.close();
})();

Это ошибка:

(node:6116) UnhandledPromiseRejectionWarning: Error: Evaluation failed: TypeError: Cannot read property 'className' of null
(node:6116) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:6116) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

1 Ответ

0 голосов
/ 08 ноября 2018

Вы забыли добавить точку . перед селектором класса Body-body-qL80Q в вашей document.querySelector() функции внутри page.evaluate():

Кроме того, вы должны использовать свойство textContent вместо свойства className.

Ваша константа textContent должна быть инициализирована следующим образом:

const textContent = await page.evaluate(() => document.querySelector('.Body-body-qL80Q').textContent);
...