我正在尝试运行以下代码:
var aaa = await page.$$eval(selector, list => (list, value) =>
{
return resolve(list.find(element => element.textContent === value));
}
,value);
但是我收到一个错误。
因此,我尝试在“列表”中打印项目(因为我假设存在问题),因此尝试了以下代码:
var aaa = await page.$$eval(selector, list => list);
然后我收到“ aaa”为空。
任何想法可能是什么问题吗?
答案 0 :(得分:3)
您正尝试从page.$$eval()
返回DOM元素,由于DOM元素不是undefined
,该元素将返回serializable。
如果您想返回page.$$()
数组,请尝试使用ElementHandle
。
在下面的page.$$eval()
中查看Puppeteer Documentation:
page。$$ eval(selector,pageFunction [,... args])
selector
<string>用于查询页面的selectorpageFunction
<function>要在浏览器上下文中评估的功能...args
<... Serializable | JSHandle>要传递给pageFunction
的参数- 返回:<Promise <Serializable >> Promise解析为
pageFunction
的返回值此方法在页面中运行
Array.from(document.querySelectorAll(selector))
,并将其作为第一个参数传递给pageFunction
。如果
pageFunction
返回一个Promise,那么page.$$eval
将等待该承诺解决并返回其值。示例:
const divsCounts = await page.$$eval('div', divs => divs.length);
答案 1 :(得分:1)
只需尝试将阵列映射到更多可序列化的阵列。
例如:
const links = await page.$$eval('h1 > a', e=>e.map((a)=>a.href))