How to login in Puppeteer?

2019-01-25 23:15发布

问题:

I'm new to javascript and puppeteer. I tried a login code below and failed. In comparison, I added pages2 and succeeded. How can I solved it? Thanks in advance.

const CREDS = require('./creds');

async function main() {
const puppeteer = require('puppeteer');
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');
await page.waitForNavigation();
await page.type('#id', CREDS.username);
await page.type('#loginPw', CREDS.password);
await page.click('#loginSubmit');

const page2 = await browser.newPage();
await page2.setViewport({width: 1200, height: 720})
await page2.goto('https://google.com');
await page2.type('#lst-ib', 'Headless Chrome');
}

main();

回答1:

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.