在调用page.evaluate执行js从页面取数据之前,需要先page.waitForSelector,waitForSelector的参数貌似和page.evaluate中要抓取的内容没关系也可以,关键是调用page.waitForSelector等待web页加载完成后再调用page.evaluate,否则有可能取不到数据。
//这儿好像select什么都可以,关键是等一会儿页面加载,
//否则下面执行page.evaluate时,页面好像还没有加载完。
await page.waitForSelector("meta[name='description']");
desc = await page.evaluate(
r'''resultsSelector => {
const metas = document.getElementsByTagName('meta');
for (let i = 0; i < metas.length; i++) {
if (metas[i].getAttribute('name') === 'description') {
return metas[i].getAttribute('content');
}
}
return null;
}''',
);