wake-up-neo.net

wie verwaltet man die Anmeldesitzung über Headless Chrome?

Ich muss Schaber machen, um:

Öffnen Sie den headless Browser, gehen Sie zu url , loggen Sie sich ein (es gibt Steam oauth), füllen Sie einige Eingaben aus und klicken Sie auf die 2 Schaltflächen

problem ist, dass jede neue Instanz des Headless-Browsers meine Anmeldesitzung löscht, und dann muss ich mich immer wieder anmelden ... Wie kann ich die Instanz durch Instanzen speichern?

oder wie kann ich bereits eingeloggte Chrom-Headless-Instanzen öffnen? Wenn ich mich bereits in meinem Hauptfenster einlogge

9
Anton Kurtin

In puppeter haben Sie über page.cookes() Zugriff auf die Session-Cookies.

Sobald Sie sich angemeldet haben, können Sie jedes Cookie abrufen und in einer Json-Datei speichern, indem Sie jsonfile verwenden:

// 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')
})

Bei der nächsten Iteration direkt vor dem Laden der URL mit page.goto() können Sie page.setCookie() verwenden, um die Cookies nacheinander aus der Datei zu laden:

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
  }
}

Überprüfen Sie die Dokumente:

10
Ecovirtual

Es gibt eine Option, um Benutzerdaten mit der Option userDataDir zu speichern, wenn Sie den Puppenspieler starten. Dies speichert die Sitzung und andere Dinge, die mit dem Starten von Chrome zusammenhängen. 

puppeteer.launch({
  userDataDir: "./user_data"
});

Es geht nicht sehr ins Detail, aber hier ist ein Link zu den Dokumenten dafür: https://pptr.dev/#?product=Puppeteer&version=v1.6.1&show=api-puppeteerlaunchoptions

12
meatherly

Für eine Version der obigen Lösung, die tatsächlich funktioniert und nicht auf jsonfile angewiesen ist (stattdessen die Standardvariable fs), überprüfen Sie Folgendes:

Konfiguration:

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

Lesen der Cookies (geben Sie zuerst diesen Code ein):

// 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')
  }
}

Cookies schreiben:

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

Zum Schreiben von Cookies

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

Um Cookies lesen zu können, müssen Sie jsonfile in Ihrem Projekt installieren: npm install jsonfile

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() + "'");
  })
}

Rufen Sie diese beiden Funktionen mit await auf und es wird für Sie funktionieren.

0
Meet Mahajan