javascript - 如何登录 Puppeteer?

标签 javascript node.js google-chrome-devtools puppeteer headless

我是 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/

相关文章:

javascript - 如何根据用户输入更改动态生成的列表框的宽度?

javascript - 在 React 中状态改变时重新渲染组件

node.js - 如何删除为 Nodejs 和 npm 安装创建的整个文件和文件夹

angular - 在 chrome 开发工具中调试导入的 Angular 库

javascript - 在 chrome devtools 网络控制台中复制多个网络响应

php - php中如何在不刷新页面的情况下获取cookie?

javascript indexOf/替换多个搜索词

javascript - 删除 Angular-Node-Passport 身份验证中的浏览器历史记录

arrays - 如何在 Node.js 应用程序中保存 MongoDB 中的对象数组

javascript - 在 Chrome 的 F12 控制台中创建上下文菜单?