Использование кукловода для очистки аналитики Squarespace - PullRequest
0 голосов
/ 05 ноября 2018

Я новичок в Puppeteer. Я пытаюсь почистить страницу аналитики на своем сайте Squarespace, чтобы увидеть, как люди используют мой сайт.

В качестве первого теста я просто пытаюсь сделать скриншот нужной страницы.

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


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

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

  const USERNAME_SELECTOR = '<input class="username Input-hxTtdt ipapEE" type="email" placeholder="Email Address" name="email" autocapitalize="none" autocorrect="off">';
  const PASSWORD_SELECTOR = '<input class="password Input-hxTtdt ipapEE" type="password" placeholder="Password" name="password">';
  const BUTTON_SELECTOR = '<button class="Button-kDSBcD fATVqu" data-test="login-button"><span>Log In</span></button>';

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

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

  await page.click(BUTTON_SELECTOR);

  await page.waitForNavigation();

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

  await page.screenshot({path: 'example.png'});

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

Я получаю эту ошибку:

UnhandledPromiseRejectionWarning: ReferenceError: page is not defined
    at /Users/reallymemorable/Documents/scripts.scrapers/squarespace.ip.scraper/squarespace.js:8:3
    at process.internalTickCallback (internal/process/next_tick.js:77:7)
(node:16200) 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:16200) [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 голосов
/ 05 ноября 2018
  • Вы забыли создать объект страницы const page = await browser.newPage();
  • селекторы в page.click имеют неправильную форму. Используйте это так const USERNAME_SELECTOR = '.username.Input-hxTtdt.ipapEE';
  • Нажатие кнопки и ожидание навигации должно быть заключено в Promise.all

Вот исправленный твой пример:

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-hk21.squarespace.com/config/analytics#activity-log');

  await page.screenshot({ path: 'example.png' });

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