【问题标题】:Puppeteer check through website content/elements [closed]Puppeteer 通过网站内容/元素检查 [关闭]
【发布时间】:2020-05-22 22:47:58
【问题描述】:

我需要检查网站的元素以获取我的代码,但我不明白如何在 Node.JS 上使用 puppeteer
这是我尝试过的代码:

if(page.content('input[data-kwimpalaid="1580983806648-1"]'))
    found = true
if(found = true)
console.log("I found it")
if(found = false)
console.log("I didn't found it")

所以我基本上需要的是,我有一个元素 ID 以 1 到 20 结尾的网站,它可以是随机的、连续的。例如,它可能从 1 开始,然后有 6 个 id (1,2,3,4,5,6),或者它可以从 5 (5,6,7,8,9,10) 开始。我想检查每个 ID,如果存在,则将 ''found'' 的值更改为 true。如果页面没有 id 1,请尝试 id 2、id 3、id 4 等。直到它找到该网站上存在的具有该 ID/CLASS 的输入。



简而言之,我需要检查我使用的选择器元素是否存在于网站上(内容)。

【问题讨论】:

  • 首先,使用===== 进行比较。
  • 据我从文档中得知,page.content() 返回一个解析为整个 HTML 文本的 Promise。您需要运行 page.$(selector).then(result) 来查找元素。
  • 上面是我正在尝试做的一个例子。 @ChrisG 我会检查你告诉我的内容并告诉你是否有问题。
  • 听起来你的问题是一个“给我代码”的问题,恐怕我们这里不这样做。
  • 我没有要代码,我只是想更好地了解 puppeteer,我不确定这个动作是否可行。没有理由不喜欢我的问题,它可能会帮助很多木偶新手。

标签: javascript node.js puppeteer


【解决方案1】:

嗯,这个呢?在我的头上!

let found = false;
const allInputs = page.content('input[data-kwimpalaid]');  // Assuming an Array of elements here

for (let i = 1; i < 6; i++) {
    if (allInputs.find((input) => input.dataset.kwimpalaid.startsWith(i))) {
        found = true;
        break;
    }
}

if (found) {
    console.log("I found it");
} else {
    console.log("I didn't found it")
}

所以基本上扫描文档一次以查找具有 ID 的所有元素。 然后分别查看每个元素。 for 循环尊重您的偏好。 如果找到一个元素 Array.prototype.find 将返回它。否则,它的返回值为undefined

我在这里假设 puppeteer 的行为类似于浏览器中的 DOM。如果不是这样,其他人可能会纠正我。

【讨论】:

  • 我收到了错误''allInputs.find is not a function''
  • 嗯,刚刚检查了docspage.content() 正在返回一个完整的字符串(我认为它类似于 querySelectorAll()。你可以使用 $$ 方法吗?const allInputs = page.$$('input[data-kwimpalaid]');
猜你喜欢
  • 2019-12-31
  • 1970-01-01
  • 2020-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-19
  • 2017-11-06
  • 2012-06-19
  • 2021-02-13
相关资源
最近更新 更多