如何登录Puppeteer?

Joo*_*Lee 10 javascript headless puppeteer

我是javascript和puppeteer的新手.我尝试了下面的登录代码并失败了.相比之下,我添加了pages2并成功了.我怎么解决呢?提前致谢.

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();
Run Code Online (Sandbox Code Playgroud)

Md.*_*her 21

page.waitForNavigation();click从页面触发的任何导航操作之后等待导航.您应该在page.click之后添加waitForNavigation.

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

它将等到两个承诺结算.

所以现在你的初始代码看起来像这样,

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();
Run Code Online (Sandbox Code Playgroud)

注意:回答一下,我无法测试,因为我没有登录daum.net,我看不到你面临的实际错误.如果您可以尝试上面提供的解决方案并分享结果,那将会更有帮助.

  • 有一条错误消息“断言失败:没有找到选择器的节点:#id”,我修复了它,你的代码运行得很好!!哇,非常感谢。 (2认同)

Gra*_*ler 9

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());
Run Code Online (Sandbox Code Playgroud)

注意:记得page.waitForNavigation()点击提交按钮后使用,等待首页显示后再前进。

  • 如果提交按钮没有 和 id 我该怎么办? (2认同)

小智 9

这是另一个没有 id 的示例:

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

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

await page.click("button[type=submit]");
Run Code Online (Sandbox Code Playgroud)