node.js - 如何在 puppeteer 中使用会话 cookie 进行身份验证
问题描述
我想存储我的会话 cookie 并使用 puppeteer 验证我的帐户。
现在我直接使用我的用户名和密码进行身份验证。
const puppeteer = require('puppeteer');
(async ()=>{
const browser= await puppeteer.launch({
"headless": false,
"slowMo":20
});
const page= await browser.newPage();
await page.goto("https://www.linkedin.com/login");
await page.type('[id=username]','username');
await page.type('[id=password]','password');
await page.keyboard.press('Enter',{delay:2000});
await browser.close();
})();
解决方案
以下是如何使用 Puppeteer 登录 Web 应用程序的示例。您需要安装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.');
});
在 puppeteer 中保存会话 Cookie。
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
推荐阅读
- docusignapi - 一旦从批量发送中签名,是否可以得到一份一份的文件?
- powerbi - Power BI - 在图表中仅显示 > 0 的值
- java - 来自 mongoDB 的更改事件中的 updateDescription.updatedFields 为空
- java - 来自 Java 库的 C++ 主应用程序代码的 JNI 调用
- python - 两个不相等的列表显示相等的python
- java - JavaFX:调用方法时出现 NullPointerException
- angular - Angular - 为什么命令 NPM start --open 4300 不起作用?
- java - 如何使用 Corda-Spring-Webserver 实现查询过滤?
- spring-boot - 引起:java.lang.NoSuchMethodError: org.apache.tomcat.util.res.StringManager.getManager(Ljava/lang/Class;)
- python - OpenCV:为深度图调整视频帧大小时出错