Este código Meteor usa "titiritero 8.0.0", "titiritero-core 10.0.0", titiritero-extra 3.1.18" y "titiritero-extra-plugin-stealth 2.7.8", da este error:
Error: no se pudo encontrar el navegador esperado (chrome) localmente. Ejecute
npm install
para descargar la revisión de Chromium correcta (884014).
Intenté "instalar npm" sin éxito. Leyendo en línea, intenté eliminar "puppeteer-core": "^ 10.0.0" de las dependencias de package.json sin éxito.
Cualquier ayuda es muy apreciada. Gracias
const puppeteer = require('puppeteer-extra'); const nameH = require('./NameH'); const puppeteerOptions = { headless: true, ignoreHTTPSErrors: true, args: ['--no-sandbox', '--single-process', '--no-zygote', '--disable-setuid-sandbox'] } let browser; let pageNameH; const init = async () => { const StealthPlugin = require('puppeteer-extra-plugin-stealth'); console.log('1') //>>>>>>>>>>>> Prints 1 puppeteer.use(StealthPlugin()); console.log('2') //>>>>>>>>>>>> Prints 2 browser = await puppeteer.launch(puppeteerOptions); console.log('3') //>>>>>>>>> DID NOT PRINT <<<<<<<<<<<<<<< pageNameH = await browser.newPage(); console.log('4') await pageNameH.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'); await pageNameH.setViewport({ width: 1366, height: 768 }); await pageNameH.setRequestInterception(true); blockResources(pageNameH); } const blockResources = page => { page.on('request', (req) => { if (req.resourceType() == 'stylesheet' || req.resourceType() == 'font' || req.resourceType() == 'image') { req.abort(); } else { req.continue(); } }); } export const abc = async (nm, loc) => { try { console.log('name try') //>>>>>>>>>>>> Prints "name try" if (!(browser && pageNameH)) await init(); //use "required" nameh here } catch (error) { // print the error <<<<<<<<<<<<<<<<<<<<<<<<< console.log("Could not launch Puppeteer or open a new page.\n" + error); if (browser && browser.close === 'function') await browser.close(); } }
// included in package.json "dependencies": { "@babel/runtime": "^7.11.2", "axios": "^0.21.1", "check": "^1.0.0", "cheerio": "^1.0.0-rc.6", "jquery": "^3.5.1", "meteor-node-stubs": "^1.0.1", "nightmare": "^3.0.2", "pending-xhr-puppeteer": "^2.3.3", "puppeteer": "^8.0.0", "puppeteer-core": "^10.0.0", "puppeteer-extra": "^3.1.18", "puppeteer-extra-plugin-adblocker": "^2.11.11", "puppeteer-extra-plugin-block-resources": "^2.2.9", "puppeteer-extra-plugin-stealth": "^2.7.8" },
Yo tuve el mismo problema. Revisé mis variables env, y aunque PUPPETEER_SKIP_CHROMIUM_DOWNLOAD estaba configurado como falso, todavía no funcionaba. Después de eliminar la variable (no configurar PUPPETEER_SKIP_CHROMIUM_DOWNLOAD para Mac), funcionó.
dependencias relacionadas:
"dependencies": { "chrome-aws-lambda": "^10.0.0", "puppeteer-core": "^10.0.0", }, "devDependencies": { "puppeteer": "^10.0.0", }
Lanzamiento de cromo:
import chromium from "chrome-aws-lambda"; const browser = await chromium.puppeteer.launch({ executablePath: await chromium.executablePath, });
puede ser que puedas probar esto, funciona para mí en linux (centos), titiritero (10.2.0).
cd ./node_modules/puppeteer npm run install
descargará el cromo a ./node_modules/puppeteer/.local-chromium
si está probando localmente, asegúrese de tener titiritero instalado como dependencias de desarrollo. específicamente
npm install puppeteer --save-dev
https://github.com/alixaxel/chrome-aws-lambda/wiki/HOWTO:-Local-Development#workaround
este enfoque nos permite confiar en titiritero para el desarrollo local y titiritero-núcleo para los despliegues de producción.
Tuve el mismo problema. Lo que funcionó para mí fue especificar como la opción de lanzamiento de la ruta executablePath
Puppeteer la ruta completa al cromo local utilizado por Puppeteer.
Algo como esto:
const launchOptions = { // other options (headless, args, etc) executablePath: '/home/jack/repos/my-repo/node_modules/puppeteer/.local-chromium/linux-901912/chrome-linux/chrome' }
Como se señaló en otra respuesta , parece que también funcionaría hacer referencia a un binario local de cromo, pero creo que es una solución peor, ya que se garantiza que Puppeteer funcionará solo con la versión local de Chromium .
Lanzando mi respuesta, con la esperanza de que ayude a alguien a no perder toda la noche como lo hice yo.
Estaba escribiendo un servidor Typescript que usaba Puppeteer, y estoy usando ESBuild para transpilar de TS a JS. En el paso de compilación, esbuild intentaba agrupar todo en un solo archivo, pero tuve que indicarle que conservara la importación de Titiritero de node_modules.
Hice esto marcando al puppeteer
como externo. Ver documentos aquí .
Dado que npm i
descargó una versión compatible de Chromium en la carpeta node_modules, una vez que conservé esta importación, pude encontrar Chromium en la carpeta node_modules.
Mi archivo de compilación se parece a:
require("esbuild").buildSync({ entryPoints: ["src/index.ts"], outdir: "build", bundle: true, platform: "node", target: "node16", external: ["puppeteer"], });
Y lo ejecuto con node prod-build.js
.
Ahora en mi código, ¡solo puedo llamar al lanzamiento!
const browser = await puppeteer.launch()
Usé la versión instalada en mi PC (tal vez no sea lo que estás buscando)
const browser = await puppeteer.launch({headless:false, executablePath: 'C:/Program Files/.../chrome.exe' });