【问题标题】:waitFor() doesn't find element which is displayed on the pagewaitFor() 找不到页面上显示的元素
【发布时间】:2020-02-10 07:46:33
【问题描述】:

我正在尝试在 puppeteer 上运行我的第一个代码。

Puppeteer v1.20.0

节点v8.11.3

Npm v5.6.0

这是一个基本示例,但它不起作用:

const puppeteer = require('puppeteer');

puppeteer.launch({headless: false}).then(async browser => {
  const page = await browser.newPage();

  await page.goto('https://www.linkedin.com/learning/login', { waitUntil: 'networkidle0' });

  console.log(0);
  await page.waitFor('#username');
  console.log(1);

  await browser.close();
});

当我运行脚本时,chromium 启动,我可以看到带有表单和 #username 表单字段的 Linkedin 登录页面,但 puppeteer 没有找到该字段。它显示0,但从不显示1,然后运行TimeoutError: waiting for selector "#username" failed: timeout 30000ms exceeded

增加超时不会改变任何事情,如果我在 chromium 中检查控制台,该字段就在那里。

Linkedin 登录页面用作 SPA,我不知道我在这里使用的方式是否正确。

提前谢谢你。

【问题讨论】:

标签: javascript node.js web-scraping web-crawler puppeteer


【解决方案1】:

用户名输入在iframe里面,你不能这样访问,你需要先访问iframe

    await page.goto('https://www.linkedin.com/learning/login');
    await page.waitForSelector('.authentication-iframe');

    var frames = await page.frames();
    var myframe = frames.find(
        f =>
            f.url().indexOf("uas/login") > 0);

    let username = '123456@gmail.com';
    const usernamefild = await myframe.$("#username");
    await usernamefild.type(username, {delay: 10});

【讨论】:

  • 我签入了开发工具,但没有看到框架。谢谢 :) 然后我尝试输入 await login_iframe.type('#username', email, {delay: 100});const username = await login_iframe.$("#username"); await username.type(email, {delay: 100}); 但没有使用值 123456@gmail.com 但适用于值 test@gmail.com123456,奇怪。我用await login_iframe.evaluate((text) => { (document.getElementById('username')).value = text; }, email); 修复它。你知道为什么吗?
  • @ElJackiste 123456@gmail.com 为我工作......你收到错误还是根本不输入?我已经更新了我的代码......试试我的代码看看
  • 你的新代码对我来说仍然是同样的问题。在该字段中仅键入第一个字母。如果我只是填写密码字段,这是同样的问题......找到上面描述的解决方案(getElementById)这个链接:github.com/GoogleChrome/puppeteer/issues/1648
猜你喜欢
  • 2017-08-02
  • 2021-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多