如何像在量角器中那样在puppteer中链接查询选择器?
return this.page.$$(".stop.departed").$$eval(".station",el=>el.innerText)
我得到TypeError: this.page.$$(...).$$eval is not a function
我的HTML是
<div class="stop departed">
<div class="left">
<div class="station">London
</div>
<div class="scheduled">Dept. 10:47
</div>
</div>
</div>
<div class="stop departed">
<div class="left">
<div class="station">Paris
</div>
<div class="scheduled">Dept. 12:47
</div>
</div>
</div>
我想在列表[“ London”,“ Paris”]中获得所有电台名称。
答案 0 :(得分:0)
page.$$()
和elementHandle.$$eval()
这两种方法都返回承诺,因此您必须await
都使用它们。
这些函数也都在选择器上运行querySelectorAll()
,因此在运行下一个操作(或遍历所有索引)之前,必须按索引指定元素。
以下示例将在第一个站点返回第一个站点:
const first_station = await ( await page.$$( '.stop.departed' ) )[0].$$eval( '.station', el => el[0].innerText );
console.log( first_station ); // London
或者,您可以使用以下示例为每个停靠站获取一个站点阵列:
const stations = await Promise.all(
( await page.$$( '.stop.departed' ) ).map( el => el.$$eval( '.station', el => el.map( el => el.innerText ) ) )
);
console.log( stations.length ); // 2
console.log( stations[0].length ); // 1
console.log( stations[1].length ); // 1
console.log( stations[0][0] ); // London
console.log( stations[1][0] ); // Paris
或者如果每个停靠站只有一个车站,则可以使用:
const stations = await Promise.all(
( await page.$$( '.stop.departed' ) ).map( el => el.$$eval( '.station', el => el[0].innerText ) )
);
console.log( stations.length ); // 2
console.log( stations[0] ); // London
console.log( stations[1] ); // Paris