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

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

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

puppeteer v1.20.0

Node 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,我不知道我在这里使用的方式是否正确。

提前谢谢你。

最佳答案

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

关于javascript - waitFor() 找不到页面上显示的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58363997/

相关文章:

javascript - 通过 Onclick 使用 appendChild/replaceChild 函数切换图像堆栈

Java 到 JavaScript 编译器

javascript - 检测到两个键盘按键同时按下

node.js - Mongodb更改流运行多次(有点): Node app running multiple instances

node.js - morgan 记录器并未记录所有要归档的内容

javascript - 使用 Next.js 中的 getStaticProps 对公共(public)文件夹中的静态图像进行编码

java - 尝试使用 Jsoup 从 Web 抓取动态数据到 Android 应用程序,但没有获取准确的数据

javascript - 为什么我不能在 Chrome 中使用 JavaScript 直接分配给 element.style?

python - HTML 数据对 urllib 隐藏

javascript - Xpath 函数在剧作家中不起作用