Подпишитесь на наш ТЕЛЕГРАМ КАНАЛ ПО АВТОМАТИЗАЦИИ ТЕСТИРОВАНИЯ
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».