const puppeteer = require('puppeteer'); const mapLimit = require('async/mapLimit'); const initPuppeteerPool = require('./genericPool');
let musicId = [1407551413, 1303289043, 1417862046];
const pool = initPuppeteerPool({ puppeteerArgs: { timeout: 15000, ignoreHTTPSErrors: true, devtools: true, headless: true, args: [ '-–disable-dev-shm-usage', '-–disable-setuid-sandbox', '-–no-first-run', '--no-sandbox', '-–no-zygote', '-–single-process' ] } })
mapLimit(musicId, 3, (item, callback) => { (async () => { let info = await selectInfo(item); callback(null, info); })(); }, (err, results) => { console.log(results); });
async function selectInfo(id) { return new Promise(async (resolve, reject) => { const page = await pool.use(async browser => { const page = await browser.newPage(); await page.goto(`https://music.163.com/#/song?id=${id}`); return page }) const iframe = await page.frames().find(f => f.name() === 'contentFrame'); const musicComment = await iframe.$('.cmmts.j-flag'); let commentList = await iframe.evaluate((e) => { let comment = Array.from(e.getElementsByClassName('cnt f-brk')); return comment.map((item) => item.innerText).filter((item, index) => index <= 5); }, musicComment); await page.close(); resolve(commentList); }) }
|