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), это тоже может помешать работе скрипта.
Основные моменты
- Playwright позволяет парсить данные, защищенные авторизацией. Мы можем автоматизировать вход в аккаунт и сбор информации с закрытых разделов сайта.
- Не все сайты разрешают парсинг. Перед началом работы обязательно проверьте условия использования сервиса (Terms of Service), чтобы избежать блокировки или юридических проблем.
Перевод статьи «How to Scrape Data Behind a Login with Playwright».