当前位置: 首页 > 面试题库 >

如何登录Puppeteer?

柴晔
2023-03-14
问题内容

我是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触发任何导航操作之后等待导航。您可能应该在页面之后添加waitForNavigation。单击。

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也无法看到您面临的实际错误。如果您可以尝试上面提供的解决方案并分享结果,它将大有帮助。



 类似资料:
  • 问题内容: 我正在使用ADO.NET来访问SQL Server 2005,并且希望能够从我正在调用的T-SQL存储过程中进行登录。有可能吗? 使用ADO.NET时,我看不到’print’语句的输出,因为我只想使用日志记录进行调试,所以理想的解决方案是从SysInternals向DebugView发出消息。 问题答案: 我通过按照Eric Z Beard的建议编写一个SQLCLR过程来解决此问题。程

  • 我的控制台被来自ChromeDriver和IEDriver的不想要的日志消息填满了。 我尝试过:但是不起作用。我尝试了的各种实现,但都不起作用。

  • 问题内容: 我正在一个springMVC项目中,其中用户身份验证基于Spring安全性。 这个想法是要拥有一个移动(android)应用程序,以便能够将某种数据发送到后端。 因此,在开始开发android之前,我决定使用cURL模拟登录表单的情况。 我们网站上的登录表单如下: 我使用以下命令: 但是我将获得登录页面,换句话说,我无法根据模拟情况通过用户身份验证。 只需注意:对于每一个请求,spri

  • 我正在使用Larave Jetstream livewire,我想修改登录名。 从初始值为1的隐藏输入字段“is_admin”登录 当用户提交登录表单后端检查时,使用数据库表字段的is\u admin=1 表结构:名称、电子邮件、密码、is_admin is_admin=0或1 我想检查is_admin标志,如果提供的凭据与电子邮件、密码和is_admin=1匹配,则只有用户可以登录。

  • 我已经创建了使用grails作为示例的rest应用程序,并使用Spring Security rest插件添加了安全性。我正在尝试使用rest客户端POSTMAN测试它,但是当我在原始数据中以json的身份发送用户名和密码的post请求时,会得到404到$MYAPP/api/login和401到$MYAPP/api/login。我已经关注了所有的博客和stackoverflow,但没有一件事对我有

  • 问题内容: 我正在使用具有log4j.xml配置的第三方库-关闭日志记录的最佳方法是什么? 问题答案: 我认为所需要做的就是将阈值参数设置为OFF