gpt4 book ai didi

javascript - 从网站表格中提取特定列的内容

转载 作者:行者123 更新时间:2023-12-02 22:46:22 25 4
gpt4 key购买 nike

我正在尝试从网站 https://www.passwordrandom.com/most-popular-passwords 的表中提取所有密码。我只想提取每个 td 中的第二个元素,第一个 tr 除外。当我运行代码时,数组中的所有内容都变为空。

我尝试过摆弄选择器,但我不确定到底该如何处理它。我想也许这些论点是错误的,但不确定它应该是什么样子。

const puppeteer = require('puppeteer')
const fs = require('fs')

const baseURL = 'https://www.passwordrandom.com/most-popular-passwords'

async function scrape() {
const browser = await puppeteer.launch()

const page = await browser.newPage()
console.log('Puppeteer Initialized')

await page.goto(baseURL)

const allNodes = await page.evaluate(() => {
return document.querySelectorAll("#cntContent_lstMain tr:not(:first-child) td:nth-child(2)")
})

const allWords = []

for (let row in allNodes)
allWords.push(allNodes[row].textContent)

console.log(allWords)

await browser.close();
}

scrape()

本质上,结果应该是一个包含表中每个密码的数组。除了第一个 tr 之外,密码在每个 td 的第二个元素中都有帮助(就像我上面所说的那样)。

最佳答案

page.evaluate内部的代码在浏览器内部运行,外部的代码在node上运行。

当您使用 document.querySelectorAll 返回元素时,它会返回一个 NodeList,然后该 NodeList 会被序列化,并且数据会因序列化而丢失(或以不同方式引用)。这意味着 allNodes[row].textContent 将不起作用。

最简单的方法是从 page.evaluate 内部返回数据。

const allNodes = await page.evaluate(() => {
const elements = [...document.querySelectorAll("#cntContent_lstMain tr:not(:first-child) td:nth-child(2)")]
return elements.map(element=>element.textContent)
})

它将为您提供该选择器的所有可用元素的文本内容。

关于javascript - 从网站表格中提取特定列的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58384897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com