为了账号安全,请及时绑定邮箱和手机立即绑定

waitFor() 找不到页面上显示的元素

waitFor() 找不到页面上显示的元素

回首忆惘然 2021-11-18 20:27:49
我正在尝试在 puppeteer 上运行我的第一个代码。傀儡师 v1.20.0节点v8.11.3NPM 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();});当我运行脚本时,chrome 启动,我可以看到带有表单和 #username 表单字段的 Linkedin 登录页面,但 puppeteer 找不到该字段。它显示0但从不显示1,然后运行TimeoutError: waiting for selector "#username" failed: timeout 30000ms exceeded.增加超时不会改变任何东西,如果我检查铬中的控制台,该字段就在那里。Linkedin 登录页面用作 SPA,我不知道我在这里使用的方法是否正确。先感谢您。
查看完整描述

1 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

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


查看完整回答
反对 回复 2021-11-18
  • 1 回答
  • 0 关注
  • 244 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信