我是JavaScript和Puppeteer的新手。我在下面尝试了登录代码,但失败了。相比之下,我添加page2并成功。我该如何解决?
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触发任何导航操作之后等待导航。您可能应该在页面之后添加waitForNavigation。单击。
page.waitForNavigation();
click
await Promise.all([ page.click('#loginSubmit'), page.waitForNavigation({ waitUntil: 'networkidle0' }), ]);
它将等到两个诺言都解决。
所以现在您的初始代码应如下所示:
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也无法看到您面临的实际错误。如果您可以尝试上面提供的解决方案并分享结果,它将大有帮助。
daum.net