Получение всех кук

Puppeteer — это мощный инструмент для автоматизации браузера на базе Chromium, широко используемый для тестирования веб-приложений и скриптов на JavaScript. Одной из его ключевых функций является возможность работы с cookies. В этом разделе рассматривается, как с помощью Puppeteer можно получить все cookies, сохраненные браузером для текущей страницы.

Основы работы с cookies в Puppeteer

Cookies (куки) — это небольшие текстовые файлы, которые веб-сайт сохраняет на устройстве пользователя. Они содержат информацию о предпочтениях пользователя, сессиях и других важных данных. В процессе автоматизации тестов с Puppeteer может возникнуть необходимость в извлечении всех cookies, чтобы проверить их корректность или использовать их для дальнейших запросов.

Получение cookies

Чтобы получить все cookies с текущей страницы, необходимо использовать метод page.cookies(). Этот метод возвращает массив объектов, каждый из которых представляет собой cookie. Если вы хотите получить cookies только для определенного домена, можно передать в метод URL домена, для которого нужно извлечь cookies.

Пример получения всех cookies для текущей страницы:

const puppeteer = require(&

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  
  await page.goto('https://example.com');
  
  // Получаем все cookies для текущей страницы
  const cookies = await page.cookies();
  console.log(cookies);
  
  await browser.close();
})();

В данном примере Puppeteer запускает браузер, открывает страницу и извлекает все cookies, связанные с доменом example.com. Метод page.cookies() возвращает массив объектов cookie, где каждый объект содержит такие поля как:

  • name — имя cookie;
  • value — значение cookie;
  • domain — домен, к которому принадлежит cookie;
  • path — путь, для которого cookie является действительным;
  • expires — время истечения срока действия cookie (если применимо);
  • httpOnly — флаг, указывающий, доступен ли cookie только через HTTP-запросы (не через JavaScript);
  • secure — флаг, указывающий, что cookie передается только через HTTPS-соединение.

Получение cookies для конкретного домена

Если на странице содержатся cookies для разных доменов, можно передать параметр с нужным доменом, чтобы получить cookies только для него.

Пример:

const cookies = await page.cookies('https://example.com');

Этот код возвращает только cookies, связанные с доменом example.com.

Особенности работы с cookies

  1. Cookie без срока действия Если cookie не имеет срока действия, поле expires в объекте cookie будет равно -1. В этом случае cookie остается действительным до тех пор, пока не будет удален браузером или до завершения сессии.

  2. HttpOnly и Secure cookies Cookie, помеченные как HttpOnly, не могут быть доступны через JavaScript. Это сделано для повышения безопасности. Однако они все равно могут быть получены через Puppeteer, так как Puppeteer работает с браузером на уровне HTTP-запросов.

  3. Путь (Path) Каждое cookie может иметь свой путь (path), что ограничивает его использование только определенными страницами. Если путь cookie совпадает с текущим путем страницы, cookie будет возвращен.

Пример работы с cookies в тестах

Использование cookies для тестирования приложений может быть полезно, например, при авторизации пользователя. Для этого можно получить cookies после успешной авторизации, а затем использовать их в следующих запросах для эмуляции авторизованного пользователя без необходимости проходить процедуру логина каждый раз.

Пример:

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  // Открытие страницы и логин
  await page.goto('https://example.com/login');
  await page.type('#username', 'user');
  await page.type('#password', 'password');
  await page.click('#login-button');
  await page.waitForNavigation();

  // Получаем cookies после логина
  const cookies = await page.cookies();
  console.log('Cookies after login:', cookies);

  // Сохраняем cookies для дальнейшего использования
  // Например, сохраняем в файл или в переменную для использования в другом тесте

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

В этом примере после выполнения логина на сайте мы получаем все cookies, которые могут содержать информацию о сессии пользователя. Эти cookies могут быть использованы в дальнейшем для выполнения автоматических запросов или для тестирования поведения системы с уже авторизованным пользователем.

Удаление cookies

Поскольку в некоторых случаях необходимо очистить cookies перед выполнением теста, Puppeteer предоставляет метод для удаления cookies — page.deleteCookie(). Метод принимает объект cookie и удаляет его. Например, чтобы удалить все cookies, можно пройтись по массиву и удалить каждый элемент.

Пример удаления cookies:

const cookies = await page.cookies();
for (const cookie of cookies) {
  await page.deleteCookie(cookie);
}

Заключение

Puppeteer предлагает мощные инструменты для работы с cookies, что делает его незаменимым инструментом при тестировании и автоматизации работы с веб-приложениями. Использование метода page.cookies() позволяет извлекать cookies для анализа и дальнейшего использования, а также контролировать работу с cookies в автоматических тестах.