我正在使用puppeteer和函数page.$(selector(来获取值。该函数返回错误"预期获取 |string|或 |函数|作为第一个参数,但得到了"未定义"。 我已经在Chrome的控制台中测试了确切的选择器,它可以工作。
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://stackoverflow.com/', {waitUntil: 'networkidle0'});
try {
const x = await page.$eval("body > header > div > ol.list-reset.grid.gs4 > li > a")
console.log(firstArticle.text())
} catch(err){
console.log(err)
}
console.log(x.text())
await browser.close();
})();
这里有什么问题?
函数 page.$eval(( 必须接收两个参数,但你只发送一个。请参阅方法签名:
page.$eval(selector, pageFunction[, ...参数](
- 选择器(字符串(用于查询页面的选择器
- pageFunction (function(Element(( 要在浏览器上下文中计算的函数
- 。参数 (...可序列化|JSHandle(传递给
返回pageFunction
的参数- :(承诺(可序列化((解析为返回值
的承诺pageFunction
尝试将代码更改为:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://stackoverflow.com/', {waitUntil: 'networkidle0'});
try {
const elemText = await page.$eval("body > header > div > ol.list-reset.grid.gs4 > li > a", elem => elem.innerText)
console.log('element innerText:', elemText)
} catch(err){
console.log(err)
}
await browser.close();
})();
使用第二个参数 (页面函数 - 要在浏览器上下文中评估的函数(
await page.$eval(cssSelector, e => e.innerText);