如何通过无头chrome管理登录会话?

问题描述 投票:13回答:3

我需要刮刀:

打开无头浏览器,转到url,登录(有蒸汽oauth),填写一些输入,点击2按钮

问题是无头浏览器的每个新实例都清除我的登录会话,然后我需要一次又一次地登录...如何通过实例保存它?例如使用带无头镀铬的木偶操纵者

或者我如何打开已登录的chrome无头实例?如果我已经登录了我的主要Chrome窗口

javascript cookies web-scraping headless puppeteer
3个回答
19
投票

在木偶戏中,您可以通过qazxsw poi访问会话cookie。

因此,一旦您登录,您可以使用page.cookies()获取每个cookie并将其保存在json文件中:

jsonfile

然后,在使用// Save Session Cookies 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()逐个加载文件中的cookie:

page.setCookie()

查看文档:

  • 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 } }
  • https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pagecookiesurls

32
投票

启动puppeteer时,可以使用https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pagesetcookiecookies选项保存用户数据。这将存储会话以及与启动chrome相关的其他事项。

userDataDir

它没有详细介绍,但这里有一个文档的链接:puppeteer.launch({ userDataDir: "./user_data" });


9
投票

对于上述解决方案的实际工作版本并且不依赖于https://pptr.dev/#?product=Puppeteer&version=v1.6.1&show=api-puppeteerlaunchoptions(而是使用更标准的jsonfile),请查看以下内容:

建立:

fs

读取cookie(将此代码放在第一位):

const fs = require('fs');
const cookiesPath = "cookies.txt";

写饼干:

// If the cookies file exists, read the cookies.
const previousSession = fs.existsSync(cookiesPath)
if (previousSession) {
  const content = fs.readFileSync(cookiesPath);
  const cookiesArr = JSON.parse(content);
  if (cookiesArr.length !== 0) {
    for (let cookie of cookiesArr) {
      await page.setCookie(cookie)
    }
    console.log('Session has been loaded in the browser')
  }
}

0
投票

用于编写Cookies

// Write Cookies
const cookiesObject = await page.cookies()
fs.writeFileSync(cookiesPath, JSON.stringify(cookiesObject));
console.log('Session has been saved to ' + cookiesPath);

要读取Cookies,为此,您需要在项目中安装json文件:npm install json file

async function writingCookies() {
const cookieArray = require(C.cookieFile); //C.cookieFile can be replaced by ('./filename.json')
await page.setCookie(...cookieArray);
await page.cookies(C.feedUrl); //C.url can be ('https://example.com')
}

使用async function getCookies() { const cookiesObject = await page.cookies(); jsonfile.writeFile('linkedinCookies.json', cookiesObject, { spaces: 2 }, function (err) { if (err) { console.log('The Cookie file could not be written.', err); } console.log("Cookie file has been successfully saved in current working Directory : '" + process.cwd() + "'"); }) } 调用这两个函数,它将适合您。

© www.soinside.com 2019 - 2024. All rights reserved.