Javascript waitFor()不';无法找到页面上显示的元素

Javascript waitFor()不';无法找到页面上显示的元素,javascript,node.js,web-scraping,web-crawler,puppeteer,Javascript,Node.js,Web Scraping,Web Crawler,Puppeteer,我正在试着在木偶演员身上运行我的第一个代码 木偶演员v1.20.0 节点v8.11.3 Npmv5.6.0 这是一个基本示例,但不起作用: const puppeteer = require('puppeteer'); puppeteer.launch({headless: false}).then(async browser => { const page = await browser.newPage(); await page.goto('https://www.link

我正在试着在木偶演员身上运行我的第一个代码

木偶演员v1.20.0

节点v8.11.3

Npmv5.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启动,我可以看到Linkedin登录页面上的表单和#username表单的字段,但是Puppeter找不到该字段。它显示
0
,但从不显示
1
,然后运行
超时错误:等待选择器“#username”失败:超过超时30000ms

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

Linkedin登录页面就像一个SPA,我不知道我在这里使用的方式是否正确


提前谢谢。

用户名输入在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});

. 正确的选择器似乎是
”。登录表单输入[name=session\u key]。
我检查了开发工具,但没有看到框架。谢谢:)然后我尝试键入
等待登录\u iframe.type('username',email,{delay:100})
const username=wait login_iframe.$(“#username”);wait username.type(电子邮件,{delay:100})但未使用值
123456@gmail.com
但为价值而工作
test@gmail.com
123456
,奇怪。我用
wait login\u iframe.evaluate((text)=>{(document.getElementById('username')).value=text;},email)修复它。你知道为什么吗?@ElJackiste
123456@gmail.com
适合我。。。您是否收到错误或根本无法键入?我已经更新了我的代码一点。。。试试我的代码,你的新代码仍然存在同样的问题。字段内只键入第一个字母。如果我只是填写密码字段,这是同样的问题。。。通过此链接找到上面描述的解决方案(getElementById):