const _ = require('lodash'); module.exports = function(config) { return async function (page) { const vinSelector = config.vinElementSelector; const vinRegex = config.vinRegex || /(?A\d\w\d{3}\w\d{6})/i; const possibleVinElements = await page.$$(vinSelector); const evaluatedVinElements = await Promise.all(possibleVinElements.map(async element => await page.evaluate(el => el.textContent, element))); const correctElement = _.find(evaluatedVinElements, element => vinRegex.test(element)); return correctElement ? vinRegex.exec(correctElement).groups.vin : null; } }