我正在尝试运行此代码:
var aaa = await page.$$eval(selector, list => (list, value) =>
{
return resolve(list.find(element => element.textContent === value));
}
,value);
Run Code Online (Sandbox Code Playgroud)
但我收到一个错误。
因此,我尝试打印“列表”中的项目(因为我认为问题出在那里),我尝试了以下代码:
var aaa = await page.$$eval(selector, list => list);
Run Code Online (Sandbox Code Playgroud)
我收到“aaa”是空的。
知道可能是什么问题吗?
Gra*_*ler 14
您正在尝试从 返回 DOM 元素page.$$eval(),这将返回,undefined因为 DOM 元素不可序列化。
page.$$()如果您想返回一个ElementHandle数组,请尝试使用。
看看在木偶文档为page.$$eval()以下:
page.$$eval(selector, pageFunction[, ...args])
selector< string >查询页面的选择器pageFunction< function > 要在浏览器上下文中评估的函数...args<... 可序列化| JSHandle > 要传递的参数pageFunction- 返回:< Promise < Serializable >> Promise 解析为的返回值
pageFunction此方法
Array.from(document.querySelectorAll(selector))在页面内运行并将其作为第一个参数传递给pageFunction。如果
pageFunction返回Promise,page.$$eval则将等待承诺解决并返回其值。例子:
Run Code Online (Sandbox Code Playgroud)const divsCounts = await page.$$eval('div', divs => divs.length);
只需尝试将您的数组映射到更可序列化的数组。
例如:
const links = await page.$$eval('h1 > a', e=>e.map((a)=>a.href))
Run Code Online (Sandbox Code Playgroud)