有一个有用的helper实用程序
page.$$eval
:
此方法运行
Array.from(document.querySelectorAll(selector))
在页面中,并将其作为第一个参数传递给pageFunction。
因为它将一个数组传递给我们可以使用的计算函数
.map()
在它上提取所需属性:
const strongs = await page.$$eval('strong', items => items.map( item => item.innerText));
更新
以下是测试的完整工作脚本:
const puppeteer = require('puppeteer');
const input_val = '[puppeteer]';
const items_selector = '.question-hyperlink';
(async() => {
const browser = await puppeteer.launch({
headless: false,
})
const page = await browser.newPage()
await page.goto('https://stackoverflow.com/', { waitUntil: 'networkidle2' })
await page.waitFor('input[name=q]')
await page.type('input[name=q]', input_val + '\r');
await page.waitForNavigation();
const items = await page.$$eval(items_selector, items => items.map( item => item.innerText));
console.log(items);
await browser.close();
})();
更新2
位于的沙盒脚本的修改版本
https://diplodata.shinyapps.io/puppeteer-test/
const puppeteer = require('puppeteer');
const input_val = 'puppeteer';
(async() => {
const browser = await puppeteer.launch({
headless: false,
})
const page = await browser.newPage()
await page.goto('https://diplodata.shinyapps.io/puppeteer-test/', { waitUntil: 'networkidle2' })
await page.waitFor('#query')
await page.type('#query', input_val);
await page.click('#go');
await page.waitFor(500);
const items = await page.$$eval('strong', items => items.map( item => item.innerText));
console.log(items);
await browser.close();
})();
产生以下结果:
['单击下面应该显示:','<query>','puppeter']