Me gusta hacer un seguimiento de los resultados de la lotería de Massachusetts (asegúrate de que los resultados sean realmente aleatorios). Puedo abrir la página de resultados en cualquier navegador y copiar y pegar las líneas de texto, y ejecutar el texto a través de un filtro escrito en php o gawk para extraer los números de cada fecha. Pero pensé que sería mejor automatizar el proceso usando phantomJS para obtener las fechas y los números directamente del DOM.
No he podido hacer que esto funcione porque los elementos que contienen los resultados no parecen estar en el DOM accesible a través de phantomJS. No sé si estoy haciendo algo mal (probablemente lo estoy) o si es un problema con phantomJS (que sé que ya no se mantiene). Pero también intenté usar el ejemplo de renderizar una URL en una imagen .png directamente desde el ejemplo de Carga de página en el inicio rápido , y la imagen apareció como color de fondo sin texto, así que creo que es un problema con phantomJS. ¿O ese ejemplo necesita algún código adicional para esperar a que se completen todos los scripts incluidos?
Aquí está el javascript de ejemplo con la URL en cuestión y el nombre de archivo de la imagen cableado:
var page = require('webpage').create(); page.open('https://www.masslottery.com/tools/past-results/mega-millions?start_date=2021-09-03&end_date=2021-09-28', function(status) { console.log("Status: " + status); if(status === "success") { page.render('example.png'); } phantom.exit(); }); Ejecutar phantomjs en el javascript anterior produce este archivo llamado ejemplo.png de la siguiente manera: 
Pero al ejecutar foxshot veo lo siguiente:
$ foxshot 'https://www.masslottery.com/tools/past-results/mega-millions?start_date=2021-09-03&end_date=2021-09-28' no valid dimensions provided, defaulting to 1024x768 loading site... 1024x768 Y produce un archivo llamado screenshot_1024x768.png de la siguiente manera: 
Por supuesto, foxshot no proporciona una forma de acceder al DOM o acceder al texto que se muestra en la imagen. ¿Alguna sugerencia?
Va así con titiritero
//npm i puppeteer const puppeteer = require('puppeteer') !(async () => { //open browser const browser = await puppeteer.launch() //open browser page const page = await browser.newPage() //open url await page.goto('https://www.masslottery.com/tools/past-results/mega-millions?start_date=2021-09-03&end_date=2021-09-28') //wait for table to appear await page.waitForSelector('.multi-col-stacking-table') //iterate over table rows on page const data = await page.$$eval('.multi-col-stacking-table tbody tr', d => d.map(d => ({ //format date as YYYY-MM-DD date: new Date(d.querySelector('.past-results-row-draw-date').innerText).toJSON().slice(0, 10), //collect winning numbers winningNumber: Array.from(d.querySelectorAll('.winning-number-ball-circle, .winning-number-ball-circle-no-border')).map(d => +d.innerText), //get multiplier as number multiplier: +d.querySelector('.winning-number-ball-multiplier').innerText.slice(0, -1), //parse jackpot into number - remove all non-digits and multiply by 1M jackpot: +d.querySelector('.jackpot').innerText.replace(/[^\d]/g, '') * 1e6 })) ) console.log(data) //optional screenshot await page.screenshot({path: 'screenshot.png'}) await browser.close() })() //output /* [ { date: '2021-09-27', winningNumber: [ 18, 30, 43, 68, 69, 22 ], multiplier: 4, jackpot: 22000000 }, { date: '2021-09-23', winningNumber: [ 17, 21, 27, 43, 56, 15 ], multiplier: 3, jackpot: 20000000 }, ... ] */