Парсинг данных после авторизации в Playwright

Playwright удобный инструмент, если нужно собрать данные с сайта, где требуется авторизация. В этой статье разберём на примере, как это работает.

Содержание:

Сбор статистики покупок на Amazon с Playwright

Разберём на примере, как автоматизировать сбор данных о наших покупках на Amazon: залогинимся в личный кабинет Amazon, выгрузим цены всех заказов за прошлый год и посчитаем общую сумму заказов.

Для решения этой задачи совместим два метода: UI-автоматизацию для входа в аккаунт и парсинг для получения информации о заказах.

БЕСПЛАТНО СКАЧАТЬ КНИГИ в телеграм канале "Библиотека тестировщика"
const { chromium } = require('playwright')
;(async () => {
  const currency = process.env.CURRENCY
  const amazonUrl = process.env.AMAZON_URL
  const amazonUser = process.env.AMAZON_USER
  const amazonPassword = process.env.AMAZON_PASSWORD

  const browser = await chromium.launch()
  const page = await browser.newPage()

  await page.goto(amazonUrl)

  await page.setViewportSize({ width: 1200, height: 1822 })

  await page.click(
    '#nav-signin-tooltip > .nav-action-button > .nav-action-inner'
  )

  await page.type('#ap_email', amazonUser)
  await page.click('#continue')
  await page.type('#ap_password', amazonPassword)

  await page.click('#signInSubmit')

  await page.click('#nav-link-accountList > .nav-long-width')

  await page.click(
    '.ya-card__whole-card-link > .a-box > .a-box-inner > .a-row > .a-column > div'
  )

  await page.click('#a-autoid-1-announce > .a-dropdown-prompt')

  await page.click('#orderFilter_2')

  let filteredPrices = []
  let prices = []

  await page.waitForSelector('.a-normal')
  const pages = await page.$$('.a-normal')

  for (const singlePage of pages) {
    await singlePage.waitForSelector('.a-last')
    prices = await singlePage.$$eval(
      '.a-column:nth-child(2) .a-color-secondary.value',
      (nodes) => nodes.map((n) => n.innerText)
    )

    filteredPrices = filteredPrices.concat(
      prices.filter((price) => price.includes(currency))
    )
    await singlePage.waitForSelector('li.a-last')
    await singlePage.click('li.a-last')
  }

  const cleanPrices = filteredPrices.map((x) => {
    return x.replace(',', '.').replace(/[^\d.,-]/g, '')
  })

  const totalExpense = cleanPrices.reduce(
    (a, b) => parseFloat(a) + parseFloat(b),
    0
  )
  console.log(`Total expense for the year: ${currency} ${totalExpense}`)

  await browser.close()
})()

⚠️ Это обучающий пример. Всегда проверяйте, разрешает ли сайт автоматический сбор данных.

Запускайте скрипты следующим образом. Не забудьте указать корректный URL Amazon и валюту:

macOS

CURRENCY=EUR AMAZON_URL=https://www.amazon.de AMAZON_USER=<YOUR_AMAZON_USERNAME> AMAZON_PASSWORD=<YOUR_AMAZON_PASSWORD> node scraping-example-purchases.js

Windows

SET CURRENCY=EUR
SET AMAZON_URL=https://www.amazon.de
SET AMAZON_USER=<YOUR_AMAZON_USERNAME>
SET AMAZON_PASSWORD=<YOUR_AMAZON_PASSWORD>
node scraping-example-purchases.js

Под капотом Amazon часто меняется, возможно, вам придётся немного подправить локаторы или логику скрипта, чтобы он работал корректно.

⚠️ Сайты могут блокировать headless-браузеры для защиты от мошенников. Если у вас включена двухфакторная аутентификация (2FA), это тоже может помешать работе скрипта.

Основные моменты

  1. Playwright позволяет парсить данные, защищенные авторизацией. Мы можем автоматизировать вход в аккаунт и сбор информации с закрытых разделов сайта.
  2. Не все сайты разрешают парсинг. Перед началом работы обязательно проверьте условия использования сервиса (Terms of Service), чтобы избежать блокировки или юридических проблем.

Перевод статьи «How to Scrape Data Behind a Login with Playwright».

🔥 Какой была ваша первая зарплата в QA и как вы искали первую работу? 

Мега обсуждение в нашем телеграм-канале о поиске первой работы. Обмен опытом и мнения.

Читать в телеграм

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *