如何使用。$$ eval函数

时间:2018-07-11 08:43:33

标签: eval puppeteer

我正在尝试运行以下代码:

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”为空。

任何想法可能是什么问题吗?

2 个答案:

答案 0 :(得分:3)

您正尝试从page.$$eval()返回DOM元素,由于DOM元素不是undefined,该元素将返回serializable

如果您想返回page.$$()数组,请尝试使用ElementHandle

在下面的page.$$eval()中查看Puppeteer Documentation

  

page。$$ eval(selector,pageFunction [,... args])

           

此方法在页面中运行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))