无头Chrome脚本使用相同的会话并跳过双因素身份验证

时间:2018-04-26 00:33:59

标签: node.js puppeteer headless-browser google-chrome-headless two-factor-authentication

有一个网站使用双因素身份验证。在登录表单上有一个复选框,当选中该复选框后,允许我在第一次成功登录后绕过双因素身份验证步骤(对于当前设备)。我希望首先手动执行此操作,然后使用无头Chrome自动登录。我认为通过将木偶操作员指向我的Chrome应用程序并将userDataDir指向我的个人资料,它将允许木偶操作者访问网站已经登录。但是当我用puppeteer访问该网站时,它仍然显示双因素身份验证步骤。

有没有人知道可能会遗漏哪些内容可以让我在没有双因素身份验证的情况下访问该网站?只是为了澄清:手动使用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。所以看起来我的cookie没有被发送。可能导致这种情况或我遗失的是什么?

供参考,以下是我使用的软件的规格:

  • MacOS 10.13.2
  • Chrome 65.0.3325.181
  • Puppeteer 1.3.0
  • 节点10.0.0

1 个答案:

答案 0 :(得分:0)

如果您的网站使用cookie进行身份验证,则最好设置cookie并绕过两因素身份验证。但这意味着您必须从某个地方获取Cookie。

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');