Puppeteer — это мощный инструмент для автоматизации браузера на базе Chromium, широко используемый для тестирования веб-приложений и скриптов на JavaScript. Одной из его ключевых функций является возможность работы с cookies. В этом разделе рассматривается, как с помощью Puppeteer можно получить все cookies, сохраненные браузером для текущей страницы.
Cookies (куки) — это небольшие текстовые файлы, которые веб-сайт сохраняет на устройстве пользователя. Они содержат информацию о предпочтениях пользователя, сессиях и других важных данных. В процессе автоматизации тестов с Puppeteer может возникнуть необходимость в извлечении всех 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 только для него.
Пример:
const cookies = await page.cookies('https://example.com');
Этот код возвращает только cookies, связанные с доменом
example.com.
Cookie без срока действия Если cookie не имеет срока
действия, поле expires в объекте cookie будет равно
-1. В этом случае cookie остается действительным до тех
пор, пока не будет удален браузером или до завершения сессии.
HttpOnly и Secure cookies Cookie, помеченные как
HttpOnly, не могут быть доступны через JavaScript. Это
сделано для повышения безопасности. Однако они все равно могут быть
получены через Puppeteer, так как Puppeteer работает с браузером на
уровне HTTP-запросов.
Путь (Path) Каждое cookie может иметь свой путь
(path), что ограничивает его использование только
определенными страницами. Если путь cookie совпадает с текущим путем
страницы, cookie будет возвращен.
Использование 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 перед
выполнением теста, 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 в автоматических тестах.