Скрипт Headless Chrome для использования одного сеанса и пропуска двухфакторной аутентификации - PullRequest
0 голосов
/ 26 апреля 2018

Существует сайт, который использует двухфакторную аутентификацию.В форме входа есть флажок, который, если этот флажок установлен, позволяет мне пропустить этап двухфакторной аутентификации (для текущего устройства) в будущем после успешного входа в первый раз.Я надеялся сначала сделать это вручную, а затем использовать безголовый Chrome для автоматизации входа в систему. Я подумал, что, указав кукловоду на мое приложение Chrome, а также указав userDataDir на мой профиль, это позволит кукловоду уже получить доступ к сайту.вошел в систему. Но когда я захожу на сайт с кукловодом, он все равно показывает шаг двухфакторной аутентификации.

Кто-нибудь знает, что может отсутствовать, что позволило бы мне получить доступ к сайту без двухфакторной аутентификации?Просто для пояснения: при использовании Chrome вручную и входе в систему не отображается шаг двухфакторной аутентификации, а при использовании puppeteer.

Обратите внимание, что в следующем коде #remember-me - это флажок, который позволяет мне пропустить два-фактор аутентификации

const puppeteer = require('puppeteer');

(async() => {
    const browser = await puppeteer.launch({
        executablePath: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome', 
        headless: true, 
        userDataDir: '/Users/xxxx/Library/Application Support/Google/Chrome'
    });
    const page = await browser.newPage();
    await page.goto('https://portal.insperity.com', {waitUntil: 'networkidle2'});
    await page.evaluate(() => {
        document.querySelector('#username').value = 'username';
        document.querySelector('#password').value = 'password';
        document.querySelector('#remember-me').checked = true;
        document.querySelector('#submit').click();
    })
    await page.waitFor(1000);
    await page.screenshot({path: 'page2.png'});
    await browser.close();
})();

Обновление: Я попытался изменить свойство headless на false и закомментировать строку await browser.close() и выполнить скрипт.В запущенном экземпляре Chrome я заметил, что я не вошел в Google или в Stack Overflow.Похоже, мои куки не отправляются.Что может быть причиной этого или чего мне не хватает?

Для справки, вот спецификации программного обеспечения, которое я использую:

  • MacOS 10.13.2
  • Chrome 65.0.3325.181
  • Кукловод 1.3.0
  • Узел 10.0.0

1 Ответ

0 голосов
/ 11 февраля 2019

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

await page.goto('https://youhomepage.com');

    let cookieObject ={
        name:"JSESSIONID",
        value:"9C8E6659B14C2963EDED73C16BB0868A",
        Expires:"Tue, 19 Jan 2038 03:14:07 GMT"
        }

await page.setCookie(cookieObject);
await page.waitFor(1000);
await page.goto('https://youhomepage.com');
...