puppeteer page.evaluate() returns 空对象
puppeteer page.evaluate() returns empty object
我正在尝试抓取此网站 https://poe.ninja/challenge/builds?time-machine=day-6 using Puppeteer. I tried 并在此处看到很多类似的问题。但是 none 解决了我的问题。
这是我的代码:
const scrapeNinja = async () => {
const browser = await puppeteer.launch({headless: false})
const page = await browser.newPage()
await page.goto(`https://poe.ninja/challenge/builds?time-machine=day-6`, {
waitUntil: 'domcontentloaded',
})
const getArray = await page.evaluate(() => {
return Array.from(document.querySelectorAll(
'#openSidebar > div > section:nth-child(3) > div > div > div > ul li .css-1h2ruwl'
)).map(e => e.textContent)
})
console.log(getArray)
}
我知道 return 从 page.evaluate 编辑的值应该是可序列化的。这 Array.from(document.querySelectorAll('#openSidebar > div > section:nth-child(3) > div > div > div > ul li .css-1h2ruwl')).map(e => e.textContent)
不是可序列化的值吗?我尝试在开发工具部分使用它 return exacully 我想要什么,但回到 node.js,它只是 return 空数组...
我是不是做错了什么?
看来问题确实出在等待上,即使 dom 内容尚未完全加载,您仍在寻找元素。
const scrapeNinja = async () => {
const browser = await puppeteer.launch({headless: false})
const page = await browser.newPage()
await page.goto(`https://poe.ninja/challenge/builds?time-machine=day-6`, {
waitUntil: 'networkidle2',
})
const getArray = await page.$$eval('#openSidebar > div > section:nth-child(3) > div > div > div > ul li .css-1h2ruwl',
el => el.map(item => item.textContent))
console.log(getArray)
}
scrapeNinja()
这段代码非常适合我,即使您不必初始化数组。将来在 waitUntil
选项
中使用 networkidle2
我正在尝试抓取此网站 https://poe.ninja/challenge/builds?time-machine=day-6 using Puppeteer. I tried
这是我的代码:
const scrapeNinja = async () => {
const browser = await puppeteer.launch({headless: false})
const page = await browser.newPage()
await page.goto(`https://poe.ninja/challenge/builds?time-machine=day-6`, {
waitUntil: 'domcontentloaded',
})
const getArray = await page.evaluate(() => {
return Array.from(document.querySelectorAll(
'#openSidebar > div > section:nth-child(3) > div > div > div > ul li .css-1h2ruwl'
)).map(e => e.textContent)
})
console.log(getArray)
}
我知道 return 从 page.evaluate 编辑的值应该是可序列化的。这 Array.from(document.querySelectorAll('#openSidebar > div > section:nth-child(3) > div > div > div > ul li .css-1h2ruwl')).map(e => e.textContent)
不是可序列化的值吗?我尝试在开发工具部分使用它 return exacully 我想要什么,但回到 node.js,它只是 return 空数组...
我是不是做错了什么?
看来问题确实出在等待上,即使 dom 内容尚未完全加载,您仍在寻找元素。
const scrapeNinja = async () => {
const browser = await puppeteer.launch({headless: false})
const page = await browser.newPage()
await page.goto(`https://poe.ninja/challenge/builds?time-machine=day-6`, {
waitUntil: 'networkidle2',
})
const getArray = await page.$$eval('#openSidebar > div > section:nth-child(3) > div > div > div > ul li .css-1h2ruwl',
el => el.map(item => item.textContent))
console.log(getArray)
}
scrapeNinja()
这段代码非常适合我,即使您不必初始化数组。将来在 waitUntil
选项
networkidle2