Pārlūka Chrome kļūdas “Nevarēja atrast pārlūku Chrome (versija 130.0.6723.116)” labošana, izvietojot Vercel.

Temp mail SuperHeros
Pārlūka Chrome kļūdas “Nevarēja atrast pārlūku Chrome (versija 130.0.6723.116)” labošana, izvietojot Vercel.
Pārlūka Chrome kļūdas “Nevarēja atrast pārlūku Chrome (versija 130.0.6723.116)” labošana, izvietojot Vercel.

Kāpēc jūsu leļļu izvietošana Vercelā neizdodas (un kā to labot)

Tīmekļa skrāpēšanas vai ekrānuzņēmumu rīka palaišana vietējā iestatījumā parasti norit gludi, līdz ir pienācis laiks to izvietot. Es nesen saskāros ar šo problēmu, mēģinot palaist savu Leļļu tēlotājs skripts ieslēgts Vercel. 🚀 Lai gan manā vietējā datorā viss darbojās lieliski, Vercel izvietošana turpināja atgriezt kļūdu: "Nevarēja atrast pārlūku Chrome (ver. 130.0.6723.116)".

Šī kļūda var būt nomākta, jo īpaši tāpēc, ka tā netiek parādīta vietējās testēšanas laikā. Problēma parasti norāda uz trūkstošu pārlūkprogrammas versiju izvietotajā vidē vai uz nepareizu konfigurāciju kešatmiņas ceļš ko Puppeteer izmanto Vercelā.

Vercel pēc noklusējuma ne vienmēr ietver konkrēto Chrome izpildāmo failu, kas nepieciešams Puppeteer, kas nozīmē, ka jūsu skripts to nevar atrast izpildlaikā. Šajā rokasgrāmatā ir izskaidrots, kāpēc šī kļūda rodas, un dažas stratēģijas tās novēršanai.

Neatkarīgi no tā, vai esat Puppeteer iesācējs izstrādātājs vai vienkārši veicat izvietošanas problēmu novēršanu, šo nianses izpratne var ietaupīt vairākas stundas atkļūdošanas. 🛠️ Iedziļināsimies risinājumā, lai jūsu Puppeteer iestatīšana nevainojami darbotos Vercel.

Pavēli Lietošanas piemērs un detalizēts apraksts
puppeteer.launch({ ... }) Šī komanda palaiž Puppeteer gadījumu ar īpašām konfigurācijas opcijām, piemēram, ignoreHTTPSErrors un executablePath. Šīs opcijas palīdz novērst kļūdas ar Chrome versijām tādās izvietošanas platformās kā Vercel, iestatot precīzu Chrome izpildāmā faila atrašanās vietu un pārvaldot drošības iestatījumus.
executablePath Izmantotais failā puppeteer.launch, executablePath norāda ceļu uz Chrome bināro failu. Iestatot šo ceļu, tiek nodrošināts, ka Puppeteer attālajos serveros izmanto pareizo Chrome versiju, kas ir būtiski bezserveru vidēs, piemēram, Vercel, kur Chrome pēc noklusējuma var nebūt instalēts.
args: ['--no-sandbox', '--disable-setuid-sandbox'] Šie karodziņi atspējo Chrome smilškastes funkciju, kas ir nepieciešama, lai Puppeteer darbotos daudzos mākoņa mitināšanas pakalpojumu sniedzējos. Smilškaste parasti ir atspējota, lai izvairītos no atļauju kļūdām koplietotajos serveros, taču tas jādara uzmanīgi drošības apsvērumu dēļ.
cacheDirectory Puppeteer konfigurācijas failā cacheDirectory iestata pielāgotu direktoriju pārlūkprogrammas kešatmiņai. Tas ir īpaši noderīgi Vercel, jo tas ļauj kontrolēt, kur Puppeteer glabā lejupielādētos Chrome bināros failus, novēršot ar kešatmiņu saistītas kļūdas.
await page.goto(url, { waitUntil: 'networkidle2' }) Šī komanda ielādē URL un gaida, līdz ir izveidoti ne vairāk kā divi tīkla savienojumi, lai lapa tiktu uzskatīta par pilnībā ielādētu. Opcija Networkidle2 nodrošina, ka visi resursi ir ielādēti pirms ekrānuzņēmuma uzņemšanas, padarot to ideāli piemērotu sarežģītu lapu tveršanai.
page.setViewport({ width: 1920, height: 1080 }) Iestata Chrome instances skatvietas izmērus, imitējot norādītā izmēra ekrānu. Tas ir būtiski ekrānuzņēmumiem un vizuālai pārbaudei, jo tas kontrolē uzņemtās tīmekļa lapas izskatu.
path.join(__dirname, '..', 'public', fileName) Šī komanda izveido faila ceļu, savienojot pašreizējo direktoriju ar publisko mapi, izveidojot īpašu direktoriju ekrānuzņēmumu glabāšanai. Tas ir būtiski, lai sakārtotu izvades failus, it īpaši, ja tiek rādīts ekrānuzņēmuma ceļš atpakaļ klientam.
uuid() Katram ekrānuzņēmumam ģenerē unikālu identifikatoru, nodrošinot, ka katra faila nosaukums ir unikāls un izvairoties no pārrakstīšanas. Šī funkcija ir īpaši noderīga lietojumprogrammām, kas vienlaikus saglabā vairākus attēlus vai datu failus.
chai.request(app) Šī komanda, kas ir daļa no Chai HTTP moduļa, nosūta pieprasījumu lietojumprogrammu serverim (definēts kā lietotne), lai pārbaudītu galapunkta atbildes. Tas ir noderīgi automatizētai testēšanai, ļaujot izstrādātājiem pārbaudīt, vai ekrānuzņēmuma API darbojas, kā paredzēts.
describe() and it() Šīs Mocha testēšanas funkcijas definē testu komplektus (aprakstiet ()) un atsevišķus testus (it ()) funkcionalitātes apstiprināšanai. Tie tiek izmantoti, lai pārbaudītu, vai katrs Puppeteer ekrānuzņēmuma API aspekts darbojas pareizi dažādos apstākļos, sākot no trūkstošiem parametriem līdz derīgiem URL.

Puppeteer Chrome kļūdas novēršana Vercel izvietošanā

Primārais nodrošinātais skripts ir aizmugurfunkcija, kas izmanto Leļļu tēlotājs lai uzņemtu lietotāja nodrošināta URL ekrānuzņēmumu. Šis uzdevums ir īpaši noderīgs, lai dinamiski ģenerētu priekšskatījumus vai tīmekļa kopēšanas nolūkos. Tomēr izvietošana tādās platformās kā Vercel var izraisīt kļūdas, piemēram, pārlūku Chrome nevar atrast vidē. Tas notiek tāpēc, ka paredzētajā vietā Vercel nav iepriekš instalēts Chrome, kas nozīmē, ka programma Puppeteer ir jākonfigurē, lai atrastu vai instalētu pareizo versiju. Savā piemērā esam ieviesuši opcijas, lai norādītu Puppeteer izpildāmo ceļu uz pielāgotu Chrome bināro failu un risinātu SSL problēmas ar karogu ignoreHTTPSErrors, lai nodrošinātu, ka iestatīšana darbojas dažādās vidēs.

Skripts sākas, definējot ekrānuzņēmuma funkciju, kas ņem URL no pieprasījuma. Ja URL trūkst, tas nosūta atpakaļ JSON kļūdas atbildi, bet, ja tas tiek nodrošināts, tas inicializē Puppeteer ar nepieciešamajām konfigurācijām, piemēram, izpildāmais ceļš un args iespējas. The izpildāmais ceļš šeit ir būtiska, jo tā novirza Puppeteer uz precīzu Chrome atrašanās vietu, novēršot Vercel kļūdu "Nevarēja atrast Chrome". Turklāt, args iespējas, konkrēti bez smilšu kastes un disable-setuid-sandbox, atspējojiet Chrome smilškastes funkciju, kas ir prasība noteiktām vidēm bez servera. Šie iestatījumi nodrošina, ka skripts var darboties bez atļauju problēmām Vercel pārvaldītajā infrastruktūrā.

Kad Puppeteer tiek palaists, skripts atver jaunu pārlūkprogrammas lapu un izmanto goto ar tīkla nedarbs2 opciju. Tas liek Puppeteer gaidīt, līdz lapa ir pilnībā ielādēta, ne vairāk kā divus nepārtrauktus tīkla pieprasījumus, nodrošinot, ka pat sarežģītas lapas tiek pilnībā renderētas pirms ekrānuzņēmuma uzņemšanas. Šis solis ir ļoti svarīgs uzticama, precīza ekrānuzņēmuma uzņemšanai, īpaši, ja tiek apstrādātas modernas tīmekļa lapas, kas bieži vien ir ļoti atkarīgas no asinhronas ielādes. Pēc tam skatvietas lielums tiek iestatīts uz 1920 x 1080, imitējot pilnas HD ekrānu, kas garantē, ka uzņemtais saturs atspoguļo izkārtojumu, ko lielākā daļa lietotāju redzētu galddatora ierīcē.

Visbeidzot, skripts ģenerē unikālu faila nosaukumu, izmantojot uuid bibliotēku, saglabājot ekrānuzņēmumu publiskā direktorijā, kur tam var piekļūt un atgriezt to lietotājam kā JSON atbildi. Rūpīgi strukturējot faila ceļus ar Node’s ceļš.pievienojies metodi, skripts izvairās no faila ceļa problēmām, kas varētu rasties vides iestatījumu atšķirību dēļ. Piemēram, lai gan šī struktūra nemanāmi darbojas vietējā datorā, tie paši ceļi var nedarboties Vercel, tāpēc ir ļoti svarīgi definēt katra faila ceļu modulārā un pielāgojamā veidā. Galu galā šī iestatīšana nodrošina, ka funkcija Puppeteer darbojas nevainojami gan vietējā, gan bezservera vidē, apstrādājot visus galvenos aspektus, piemēram, lapu ielādi, kļūdu apstrādi un vides ierobežojumus. 🖥️

1. risinājums: konfigurējiet Puppeteer, lai pareizi instalētu pārlūku Chrome Vercel

Šis uz Node.js balstītais aizmugursistēmas risinājums konfigurē Puppeteer kešatmiņas ceļu un instalēšanas komandas, lai nodrošinātu pareizu Chrome instalēšanu.

const puppeteer = require('puppeteer');
const path = require('path');
const { v4: uuid } = require('uuid');
const fs = require('fs');

// Main screenshot function
const screenshot = async (req, res) => {
    const url = req.query.url;
    if (!url) {
        return res.status(400).json({ message: 'URL is required' });
    }

    let browser;
    try {
        // Launch Puppeteer with specific Chrome executable path and options
        browser = await puppeteer.launch({
            ignoreHTTPSErrors: true,
            executablePath: process.env.CHROME_PATH || '/opt/bin/chromium',
            args: ['--no-sandbox', '--disable-setuid-sandbox']
        });

        const page = await browser.newPage();
        await page.goto(url, { waitUntil: 'networkidle2' });
        await page.setViewport({ width: 1920, height: 1080 });

        const fileName = \`${uuid()}.png\`;
        const screenshotPath = path.join(__dirname, '..', 'public', fileName);
        await page.screenshot({ path: screenshotPath });

        res.json({ screenshotPath: \`/image/\${fileName}\` });
    } catch (err) {
        console.error('Error capturing screenshot:', err);
        res.status(500).json({ error: 'Failed to capture screenshot' });
    } finally {
        if (browser) await browser.close();
    }
};

module.exports = screenshot;

2. risinājums: pielāgota Puppeteer konfigurācija Vercel ar .puppeteerrc.cjs failu

Šis risinājums pielāgo Puppeteer konfigurācijas failu (.puppeteerrc.cjs), lai norādītu Chrome kešatmiņas ceļu un nodrošinātu saderību ar Vercel failu struktūru.

const { join } = require('path');

/
 * @type {import('puppeteer').Configuration}
 */
module.exports = {
    // Specify cache directory for Puppeteer
    cacheDirectory: join(__dirname, '.cache', 'puppeteer'),
    // Specify which Chromium version Puppeteer should install
    executablePath: '/opt/bin/chromium',
    args: ['--no-sandbox', '--disable-setuid-sandbox'],
};

3. risinājums: vides mainīgo un skriptu ieviešana failā package.json programmai Puppeteer

Šī pieeja maina pack.json failu, lai izvietošanas laikā instalētu noteiktus Chrome bināros failus un automātiski iestatītu Puppeteer konfigurācijas.

// Add to package.json
"scripts": {
    "postinstall": "npx puppeteer install --path ./.cache/puppeteer",
    "start": "node index.js"
}

// Configure environment variable in Vercel
process.env.CHROME_PATH = "/opt/bin/chromium";

Vienības pārbaude leļļu ekrānuzņēmuma funkcionalitātei

Šis Node.js Mocha testa skripts pārbauda Puppeteer spēju uzņemt ekrānuzņēmumu no URL dažādās vidēs.

const chai = require('chai');
const chaiHttp = require('chai-http');
const app = require('../app'); // Express app where screenshot endpoint is defined

chai.use(chaiHttp);
const expect = chai.expect;

describe('Screenshot API', () => {
    it('should return an error for missing URL parameter', (done) => {
        chai.request(app)
            .get('/screenshot')
            .end((err, res) => {
                expect(res).to.have.status(400);
                expect(res.body).to.have.property('message').eql('URL is required');
                done();
            });
    });

    it('should capture a screenshot successfully for a valid URL', (done) => {
        chai.request(app)
            .get('/screenshot?url=https://example.com')
            .end((err, res) => {
                expect(res).to.have.status(200);
                expect(res.body).to.have.property('screenshotPath');
                done();
            });
    });
});

Puppeteer optimizēšana mākoņa vidēm

Izvietojot uz Puppeteer balstītas lietojumprogrammas mākoņu platformās, piemēram Vercel vai Heroku, ir svarīgi saprast šo vidi ierobežojumus. Atšķirībā no vietējiem iestatījumiem mākoņa vidēs parasti darbojas pārvaldīta vai bezservera arhitektūra, kas nozīmē, ka atkarības, piemēram, Chrome, ne vienmēr ir viegli pieejamas. Patiesībā Leļļu mākslinieks launch metode var neizdoties, ja serverī nav instalēta nepieciešamā Chrome versija, kā rezultātā tiek parādītas kļūdas, piemēram, “Nevarēja atrast Chrome”. Laba prakse ir norādīt Chrome izpildāmo ceļu, izmantojot executablePath, jo tas nodrošina, ka Puppeteer var efektīvi atrast un palaist pārlūku Chrome jebkurā vidē.

Turklāt saderības nodrošināšanai ir ļoti svarīgi pievienot nepieciešamos palaišanas argumentus. Karogi, piemēram, --no-sandbox un --disable-setuid-sandbox ir īpaši noderīgi. Lai gan šie karodziņi atspējo dažus Chrome drošības līdzekļus, tie bieži ir nepieciešami iestatījumos bez servera, kur Chrome smilškaste netiek atbalstīta. Turklāt, norādot pielāgotu kešatmiņas direktoriju, izmantojot Puppeteer cacheDirectory opcija palīdz novērst iespējamās kešatmiņas problēmas, īpaši, ja ir iesaistītas vairākas pārlūkprogrammas versijas. Piemēram, iestatīšana cacheDirectory uz zināmu direktoriju nodrošina, ka visas atkarības ir pieejamas izpildlaikā.

Visbeidzot, optimizējot goto metode var ievērojami uzlabot veiktspēju. Izmantojot waitUntil: 'networkidle2' opciju, skripts gaida, līdz tiek pabeigta lapas ielāde, kas ir svarīgi vidēm, kur interneta ātrums vai resursu ielāde atšķiras. Tas ir īpaši noderīgi, lai tvertu precīzus ekrānuzņēmumus dinamiskās lapās vai lietojumprogrammās, kurās saturs tiek ielādēts asinhroni. Šo paņēmienu kombinācija ļauj Puppeteer nevainojami darboties mākoņu platformās, piedāvājot jaudīgu risinājumu automatizētiem uzdevumiem ražošanā. 🚀

Bieži uzdotie jautājumi par Puppeteer un Cloud izvietošanu

  1. Kāpēc mākoņa platformās tiek rādītas kļūdas “Nevarēju atrast Chrome”?
  2. Šīs kļūdas bieži rodas, jo mākoņa platformās pēc noklusējuma nav iekļauts pilns Chrome binārs. To var novērst, norādot executablePath jūsu Leļļu teātra iestatījumos.
  3. Kā nodrošināt Puppeteer darbību gan vietējā, gan mākoņa vidē?
  4. Izmantojot executablePath un args ar mākoņiem draudzīgiem karogiem, piemēram --no-sandbox var padarīt jūsu iestatījumu pietiekami elastīgu abām vidēm.
  5. Ko dara --no-sandbox karoga darīt in Puppeteer?
  6. The --no-sandbox karodziņš atspējo Chrome smilškastes drošību, kas ļauj Puppeteer darboties mākoņpakalpojumos, kas neatbalsta smilškastes izmantošanu, taču tas ir jāizmanto piesardzīgi.
  7. Kāpēc man vajag pasūtījumu cacheDirectory par Puppeteer?
  8. Pielāgojuma iestatīšana cacheDirectory nodrošina, ka Puppeteer lejupielādē Chrome bināros failus zināmā vietā, kas var novērst kļūdas izvietošanas laikā, jo īpaši vidēs bez servera.
  9. Kāds ir mērķis networkidle2 opcija sadaļā goto metode?
  10. The networkidle2 opcija gaida, līdz ir ne vairāk kā divi aktīvi tīkla savienojumi. Tas ir noderīgi, lai uzņemtu pilnībā ielādētu lapu un apstrādātu dinamisku saturu.
  11. Vai Puppeteer var darboties bez noteiktas Chrome versijas?
  12. Jā, bet ieteicams norādīt executablePath un nodrošināt, ka ir pieejama saderīga Chrome versija, lai mākoņa iestatījumos iegūtu konsekventus rezultātus.
  13. Kā pārvaldīt Puppeteer kešatmiņu dažādās vidēs?
  14. Varat norādīt universālu cacheDirectory sadaļā .puppeteerrc.cjs failu, ļaujot Puppeteer atrast Chrome bināros failus tādās platformās kā Vercel un Heroku.
  15. Ir puppeteer-core atšķiras no puppeteer?
  16. Jā, puppeteer-core neietver komplektā iekļauto Chrome, lai samazinātu izmēru, tāpēc jums būs jānorāda Chrome binārais fails. Pilns puppeteer pakotnē automātiski ir iekļauts pārlūks Chrome.
  17. Kas man jādara, ja Puppeteer darbojas lēni mākoņa vidē?
  18. Optimizēšana viewport iestatījumus un atspējojot tādas nevajadzīgas opcijas kā devtools var uzlabot veiktspēju ierobežotu resursu vidē.
  19. Vai Puppeteer ir saderīgs ar visiem mākoņa pakalpojumu sniedzējiem?
  20. Parasti jā, taču katram pakalpojumu sniedzējam var būt unikālas prasības. Izmantojot mākonim draudzīgus iestatījumus, piemēram --no-sandbox nodrošina labāku saderību.

Pēdējās domas par to, kā likt Puppeteer darboties Vercelā

Lai veiksmīgi izvietotu Puppeteer pārlūkprogrammā Vercel, ir jāsaprot konkrētās Chrome iestatīšanas vajadzības. Norādot palaišanas opcijas un pareizi konfigurējot Puppeteer kešatmiņas ceļus, tiek novērsta satraucošā kļūda “Nevarēja atrast Chrome”. Šie pielāgojumi nodrošina Puppeteer uzticamu darbību gan vietējā, gan mākoņa vidē. 🚀

Kad pielāgojat šos risinājumus savam projektam, ekrānuzņēmumu tveršana no lietotāja nodrošinātajiem URL kļūst nemanāma, ļaujot izmantot dinamiskākas tīmekļa lietojumprogrammas. Ar pareizu iestatīšanu Puppeteer joprojām ir nenovērtējams rīks automatizācijai un tīmekļa skrāpēšanai pat bezserveru platformās, piemēram, Vercel.

Avoti un atsauces leļļu teātra kļūdu novēršanai
  1. Šajā rakstā ir sniegta atsauce uz oficiālo Puppeteer konfigurācijas rokasgrāmatu, kurā sniegtas detalizētas iestatīšanas opcijas un problēmu novēršanas darbības, īpaši Chrome kešatmiņas ceļu apstrādei un izpildāmo ceļu norādīšanai. Leļļu konfigurācijas rokasgrāmata
  2. Vercel dokumentācija sniedz ieskatu par to, kā bezserveru vides apstrādā atkarības un unikālās prasības tādu lietojumprogrammu izvietošanai, kuras ir atkarīgas no pārlūkprogrammām bez galvas. Vercel dokumentācija
  3. Stack Overflow diskusijas piedāvā kopienas virzītus risinājumus un praktiskus kļūdu apstrādes piemērus, aptverot konkrētas Puppeteer un Chrome problēmas, kas radušās izvietošanas laikā. Stack Overflow