如何登录 Puppeteer?
Posted
技术标签:
【中文标题】如何登录 Puppeteer?【英文标题】:How to login in Puppeteer? 【发布时间】:2018-10-09 00:44:43 【问题描述】:我是 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();
【问题讨论】:
【参考方案1】: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
的登录名,而且我看不到您面临的实际错误。如果您可以尝试上面提供的解决方案并分享结果,那将会更有帮助。
【讨论】:
出现错误消息“断言失败:没有找到选择器的节点:#id”,我已修复它,您的代码运行良好!!哇,非常感谢。 为什么我们需要添加 waitUntil: 'networkidle0'
我只看到page.waitForNavigation()
,它工作得很好。【参考方案2】:
page.waitForNavigation()
使用 Puppeteer 登录网站通常就像使用以下代码一样简单:
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());
注意:请记住在点击提交按钮后使用
page.waitForNavigation()
等待主页显示后再继续前进。
【讨论】:
提交按钮没有和id怎么办? 不要在这里waitForNavigation
和 click
承诺 need to be grouped using Promise.all
?以上是关于如何登录 Puppeteer?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Puppeteer 将文本输入到 Flash TextArea 中?
从 Puppeteer 中的 page.evaluate 获取元素?