How to login in Puppeteer?

page.waitForNavigation()

Logging in to a website using Puppeteer is generally as simple as using the following code:

await page.goto('https://www.example.com/login');

await page.type('#username', 'username');
await page.type('#password', 'password');

await page.click('#submit');

await page.waitForNavigation(); // <------------------------- Wait for Navigation

console.log('New Page URL:', page.url());

Note: Remember to use page.waitForNavigation() after clicking the submit button to wait for the home page to display before moving forward.


page.waitForNavigation(); waits for navigation after a click or any navigation action that triggers from the page.you should probably add the waitForNavigation after the page.click.

await Promise.all([
  page.click('#loginSubmit'),
  page.waitForNavigation({ waitUntil: 'networkidle0' }),
]);

It will wait until both promises resolves.

So now your initial code would look like this,

const puppeteer = require('puppeteer');

async function main() {
  const browser = await puppeteer.launch({headless: false});
  const page = await browser.newPage();
  await page.setViewport({width: 1200, height: 720});
  await page.goto('https://www.daum.net', { waitUntil: 'networkidle0' }); // wait until page load
  await page.type('#id', CREDS.username);
  await page.type('#loginPw', CREDS.password);
  // click and wait for navigation
  await Promise.all([
    page.click('#loginSubmit'),
    page.waitForNavigation({ waitUntil: 'networkidle0' }),
  ]);
}

main();

Note: Answer aside, I cannot test this since I don't have a login for daum.net and I cannot see the actual error you are facing. If you can try the solution provided above, and share the results, it'd be much more helpful.


There's another example without an id

await page.type("input[type=text]", "username");

await page.type("input[type=password]", "passwoord");

await page.click("button[type=submit]");