Ниже приведен пример входа в веб-приложение с помощью Puppeteer. Вам необходимо установить apify (модуль npm).
const Apify = require('apify');
Apify.main(async () => {
const input = await Apify.getValue('INPUT');
const browser = await Apify.launchPuppeteer();
const page = await browser.newPage();
await page.goto('https://facebook.com');
// Login
await page.type('#email', input.username);
await page.type('#pass', input.password);
await page.click('#loginbutton input');
await page.waitForNavigation();
// Get cookies
const cookies = await page.cookies();
// Use cookies in other tab or browser
const page2 = await browser.newPage();
await page2.setCookie(...cookies);
await page2.goto('https://facebook.com'); // Opens page as logged user
await browser.close();
console.log('Done.');
});
Чтобы сохранить сессионные куки в кукловоде.
const cookiesObject = await page.cookies()
// Write cookies to temp file to be used in other profile pages
jsonfile.writeFile(cookiesFilePath, cookiesObject, { spaces: 2 },
function(err) {
if (err) {
console.log('The file could not be written.', err)
}
console.log('Session has been successfully saved')
})
Затем на следующем итерации перед использованием page.goto()
вы можете вызвать page.setCookie()
для загрузки файлов cookie из файла по одному.
const previousSession = fileExistSync(cookiesFilePath)
if (previousSession) {
// If file exist load the cookies
const cookiesArr = require(`.${cookiesFilePath}`)
if (cookiesArr.length !== 0) {
for (let cookie of cookiesArr) {
await page.setCookie(cookie)
}
console.log('Session has been loaded in the browser!')
return true
}
}
Экземпляры CDPSession используются для необработанного разговора Chrome Протокол Devtools:
- Методы протокола можно вызывать с помощью метода
session.send
. - На события протокола можно подписаться методом
session.on
.
Вот официальные ссылки на них:
https://github.com/puppeteer/puppeteer/blob/master/docs/api.md#pagecookiesurls https://github.com/puppeteer/puppeteer/blob/master/docs/api.md#pagesetcookiecookies