Soy nuevo en Titiritero. Estoy usando titiritero para tratar de obtener un lienzo y ejecutar el método toDataUrl(). Cuando registro en la consola lo que espero que sea el lienzo, parece estar obteniendo el elemento dom correcto
_remoteObject: { type: 'object', subtype: 'node', className: 'HTMLCanvasElement', description: 'canvas', objectId: '-861002856273230536.3.2' },pero cualquier intento de ejecutar una función usando $eval (¿no está seguro de que sea correcto?) falla.
const dataUrl = await page.$eval('canvas', (cnv) => { return cnv.toDataUrl() });¿Alguien podría verificar mi código para ver qué está pasando?
const chromium = require('chrome-aws-lambda'); const puppeteer = require('puppeteer-core'); exports.handler = async function (event, context) { const browser = await puppeteer.launch({ args: chromium.launch, executablePath: process.env.CHROME_EXECUTABLE_PATH || (await chromium.executablePath), headless: true, }); const page = await browser.newPage(); await page.goto('https://qifi.org/'); await page.focus('#ssid'); await page.keyboard.type('homebase'); await page.focus('#key'); await page.keyboard.type('tubulargagy'); await page.click('#generate'); const dataUrl = await page.$$eval('#qrcode + canvas', (cnv) => { return cnv.map((canvas) => { return { data: canvas.toDataUrl(), }; }); }); // const data = await page.$('canvas'); console.log('data', dataUrl); // const title = await page.title(); await browser.close(); return { statusCode: 200, body: JSON.stringify({ status: 'Ok', page: { data: dataUrl, }, }), }; };#qrcode + canvas es un selector incorrecto. El <canvas> es el hijo del elemento #qrcode , no el siguiente hermano. Puede usar #qrcode canvas para seleccionar el elemento deseado.
Solo hay un QR en la página, por lo que $$ parece que debería ser $ , aunque esto no debería causar una falla. El código se ve bien aparte del percance del selector.
Aquí hay un ejemplo mínimo y ejecutable:
const puppeteer = require("puppeteer"); // ^13.5.1 let browser; (async () => { browser = await puppeteer.launch({headless: true}); const [page] = await browser.pages(); await page.goto("https://qifi.org/"); await page.type("#ssid", "homebase"); await page.type("#key", "tubulargagy"); await page.click("#generate"); console.log(await page.$eval("#qrcode canvas", el => el.toDataURL())); })() .catch(err => console.error(err)) .finally(() => browser?.close()) ;