我是 JavaScript 和 Puppeteer 的新手。
我尝试了下面的登录代码,但失败了。
相比之下,我加了page2
就成功了。
我该如何解决?
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();
最佳答案
page.waitForNavigation();
在 click
或从页面触发的任何导航操作后等待导航。您应该在 page.click 之后添加 waitForNavigation .
await Promise.all([
page.click('#loginSubmit'),
page.waitForNavigation({ waitUntil: 'networkidle0' }),
]);
它将等到两个 promise 都解决。
所以现在您的初始代码如下所示,
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();
注意:除了回答,我无法对此进行测试,因为我没有 daum.net
的登录名,而且我看不到您面临的实际错误。如果您可以尝试上面提供的解决方案并分享结果,将会更有帮助。
关于javascript - 如何登录 Puppeteer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50074799/