Задать вопрос
@nicolaa

Как запомнить авторизацию сайта на nodejs?

Использую nightmare для парсинга сайта, но вся информация отдается только после авторизации

Я захожу на сайт и ищу форму авторизации, если нахожу, то авторизируюсь, если нет, то делаю нужные мне действия

let cookie_ = fs.readFileSync("cookies.json");//Ищу фаил с сохраненными куками
cookie = JSON.parse(cookie_);//Превращаю в json

nightmare
.goto('https://site.ru/login')//Захожу на сайт
.cookies.set(cookie)//Подставляю куки из файла
.evaluate(function () {
    return document.querySelector('input[id="email"]');//Ищу поле для ввода почты
})
.then(function (page) {
    if(page) {//Проверяю есть ли поле для ввода почты
        f().then(function (cookies) {//Получаем результат из функции
            require('fs').writeFileSync(//И записываем в фаил
                'cookies.json',
                JSON.stringify(cookies)
            );
        })

    } else {
        console.log('Вы авторизированы');
    }
})
async function f() {//Вызываю функцию в случаи если мы не авторизированы
        return new Promise((resolve, reject) => {
            nightmare
                .goto('https://site.ru/login')
                .type('input[id="email"]', 'login')//Вводим почту
                .type('input[id="password"]', 'passord')//Вводим пароль
                .click('.btn.btn-danger')//Нажимаем на кнопку авторизации
                .wait(2000)//Ждем 2 секунды
                .cookies.get()//Получаем куки
                .then(resolve)

        });
    }


Фаил создается, куки записываются, но при следующих попытках запуска скрипта, все равно появляется форма авторизации
  • Вопрос задан
  • 578 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@nicolaa Автор вопроса
К сожалению решить данную задачу через nightmare не получилось
Решил с помощью puppeteer

Пример - сохранение кук в фаил

const puppeteer = require('puppeteer')
const fs = require('fs');

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

  await page.goto('https://github.com/login')

  await page.type('#login_field', process.env.GITHUB_USER)
  await page.type('#password', process.env.GITHUB_PWD)

  await page.waitForSelector('.js-cookie-consent-reject')
  await page.click('.js-cookie-consent-reject')
  await page.$eval('[name="commit"]', (elem) => elem.click())
  await page.waitForNavigation()

  const cookies = await page.cookies()
  const cookieJson = JSON.stringify(cookies)

  fs.writeFileSync('cookies.json', cookieJson)

  await browser.close()
})()


Чтение кук из файла
const puppeteer = require('puppeteer')
const fs = require('fs');

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

  const cookies = fs.readFileSync('cookies.json', 'utf8')

  const deserializedCookies = JSON.parse(cookies)
  await page.setCookie(...deserializedCookies)

  await page.goto(`https://github.com/${process.env.GITHUB_USER}`)

  await browser.close()
})()

Статья
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы