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

Node.js 无头Chrome脚本使用相同会话并跳过双因素身份验证,node.js,puppeteer,headless-browser,google-chrome-headless,two-factor-authentication,Node.js,Puppeteer,Headless Browser,Google Chrome Headless,Two Factor Authentication,有一个网站使用双因素身份验证。在登录表单上有一个复选框,选中该复选框后,我可以在第一次成功登录后绕过双因素身份验证步骤(对于当前设备)。起初我希望手动完成,然后使用无头Chrome自动登录。我认为,通过将Puppeter指向我的Chrome应用程序,并将userDataDir指向我的个人资料,它将允许Puppeter访问已经登录的站点。但是当我使用Puppeter访问该站点时,它仍然显示了双因素身份验证步骤 是否有人知道可能缺少什么,使我能够在没有双重身份验证的情况下访问该站点?只是澄清一下:手

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

是否有人知道可能缺少什么,使我能够在没有双重身份验证的情况下访问该站点?只是澄清一下:手动使用Chrome和登录不会显示双因素身份验证步骤,但使用Puppeter会显示

请注意,在下面的代码中,
#记住我
是允许我跳过双因素身份验证的复选框

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
,并注释掉
wait browser.close()
行并执行脚本。在启动的Chrome实例中,我注意到我没有登录Google或Stack Overflow。看来我的饼干没有被送出去。这可能是什么原因造成的,或者我遗漏了什么

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

  • MacOS 10.13.2
  • 铬65.0.3325.181
  • 木偶演员1.3.0
  • 节点10.0.0

如果您的网站使用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');

据我所见,这是chrome中的一个bug,其中自定义数据目录不起作用。@Md.AbuTaher我检查了启动的chrome实例,它确实在chrome窗口的右上角显示了我的配置文件名。当我不传入
userDataDir
时,它只显示类似“匿名”的内容(我完全忘了它说了什么)。我们在本期中讨论这个问题