javascript - 使用 puppeteer js 按标题查找元素

标签 javascript node.js puppeteer

使用 puppeteer js 我循环遍历所有元素,如下所示:

  const getAllElements = await page.$$('._1Nk0C');

  for (let [i, link] of getAllElements.entries()) {
      await link.hover();
      await link.screenshot({path: `example${i}.png`});
  }

元素内部还有另一个元素,其标题为“download”。就像这样:

<a title="Download photo" href="https://example.com/df.jpg/download?force=true" rel="nofollow" download="" target="_blank" class="_1QwHQ"></a>

我需要获取该元素,以便可以单击它。 我试过这个:

  for (let [i, link] of getAllElements.entries()) {
      await link.hover();
      await link.screenshot({path: `example${i}.png`});
      const download = await page.evaluate(() => [...document.querySelector('a[title="Download photo"]')])
      console.log(download);
  }

这给了我一个错误:

UnhandledPromiseRejectionWarning: Error: Evaluation failed: TypeError: document.querySelector is not a function or its return value is not iterable

我该如何获取该元素?

最佳答案

您可以在 link 变量上调用 $:

let linkPhoto = await link.$('a[title="Download photo"]');

关于javascript - 使用 puppeteer js 按标题查找元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59867393/

相关文章:

node.js - 如何从导出环境变量的 npm 脚本运行 bash 脚本

javascript - Puppeteer 未拾取对话框

selenium - headless 谷歌浏览器 : How to prevent sites to know whether their window is focused or not

javascript - React - 将函数传递给子组件什么都不做

mysql - 使用 Node + Express + Sequelize +(Mysql 或 Postgres)构建 SaaS 产品

javascript - jquery .load() 和访问主机页面的脚本

javascript - karma : Continuous Integration mode shuts down browser

javascript - 抓取一些表格数据时得到奇怪的输出

javascript - jQuery - 函数未正确调用

javascript - 如何在更改事件时更改下拉列表的值?