ਵਰਸੇਲ 'ਤੇ ਤੁਹਾਡੀ ਕਠਪੁਤਲੀ ਤੈਨਾਤੀ ਅਸਫਲ ਕਿਉਂ ਹੁੰਦੀ ਹੈ (ਅਤੇ ਇਸਨੂੰ ਕਿਵੇਂ ਠੀਕ ਕਰਨਾ ਹੈ)
ਇੱਕ ਸਥਾਨਕ ਸੈੱਟਅੱਪ 'ਤੇ ਇੱਕ ਵੈੱਬ ਸਕ੍ਰੈਪਿੰਗ ਜਾਂ ਸਕ੍ਰੀਨਸ਼ੌਟ ਟੂਲ ਚਲਾਉਣਾ ਆਮ ਤੌਰ 'ਤੇ ਸੁਚਾਰੂ ਢੰਗ ਨਾਲ ਚਲਦਾ ਹੈ-ਜਦੋਂ ਤੱਕ ਇਹ ਤੈਨਾਤ ਕਰਨ ਦਾ ਸਮਾਂ ਨਹੀਂ ਹੈ। ਮੇਰੇ ਲਾਂਚ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦੇ ਸਮੇਂ ਮੈਨੂੰ ਹਾਲ ਹੀ ਵਿੱਚ ਇਸ ਸਹੀ ਸਮੱਸਿਆ ਦਾ ਸਾਹਮਣਾ ਕਰਨਾ ਪਿਆ ਕਠਪੁਤਲੀ ਸਕ੍ਰਿਪਟ ਚਾਲੂ ਹੈ ਵਰਸੇਲ. 🚀 ਹਾਲਾਂਕਿ ਮੇਰੀ ਸਥਾਨਕ ਮਸ਼ੀਨ 'ਤੇ ਸਭ ਕੁਝ ਪੂਰੀ ਤਰ੍ਹਾਂ ਚੱਲ ਰਿਹਾ ਸੀ, ਵਰਸੇਲ ਤੈਨਾਤੀ ਇੱਕ ਗਲਤੀ ਵਾਪਸ ਕਰਦੀ ਰਹੀ: "Chrome ਨੂੰ ਲੱਭਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ (130.0.6723.116)".
ਇਹ ਗਲਤੀ ਨਿਰਾਸ਼ਾਜਨਕ ਹੋ ਸਕਦੀ ਹੈ, ਖਾਸ ਕਰਕੇ ਕਿਉਂਕਿ ਇਹ ਸਥਾਨਕ ਟੈਸਟਿੰਗ ਦੌਰਾਨ ਦਿਖਾਈ ਨਹੀਂ ਦਿੰਦੀ ਹੈ। ਸਮੱਸਿਆ ਆਮ ਤੌਰ 'ਤੇ ਤੈਨਾਤ ਵਾਤਾਵਰਣ ਵਿੱਚ ਇੱਕ ਗੁੰਮ ਬਰਾਊਜ਼ਰ ਸੰਸਕਰਣ, ਜਾਂ ਇੱਕ ਗਲਤ ਸੰਰਚਨਾ ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਦੀ ਹੈ ਕੈਸ਼ ਮਾਰਗ ਜੋ ਕਠਪੁਤਲੀ ਵਰਸੇਲ 'ਤੇ ਵਰਤਦਾ ਹੈ।
ਵਰਸੇਲ, ਡਿਫੌਲਟ ਰੂਪ ਵਿੱਚ, ਹਮੇਸ਼ਾ ਖਾਸ Chrome ਐਗਜ਼ੀਕਿਊਟੇਬਲ ਨੂੰ ਸ਼ਾਮਲ ਨਹੀਂ ਕਰਦਾ ਹੈ ਜਿਸਦੀ ਪਪੀਟੀਅਰ ਨੂੰ ਲੋੜ ਹੁੰਦੀ ਹੈ, ਜਿਸਦਾ ਮਤਲਬ ਹੈ ਕਿ ਤੁਹਾਡੀ ਸਕ੍ਰਿਪਟ ਰਨਟਾਈਮ ਦੇ ਦੌਰਾਨ ਇਸਨੂੰ ਨਹੀਂ ਲੱਭ ਸਕਦੀ ਹੈ। ਇਹ ਗਾਈਡ ਤੁਹਾਨੂੰ ਇਹ ਗਲਤੀ ਕਿਉਂ ਵਾਪਰਦੀ ਹੈ, ਅਤੇ ਇਸ ਨੂੰ ਹੱਲ ਕਰਨ ਲਈ ਕੁਝ ਰਣਨੀਤੀਆਂ ਬਾਰੇ ਦੱਸੇਗੀ।
ਭਾਵੇਂ ਤੁਸੀਂ Puppeteer ਲਈ ਨਵੇਂ ਡਿਵੈਲਪਰ ਹੋ ਜਾਂ ਸਿਰਫ਼ ਆਪਣੀ ਤੈਨਾਤੀ ਦਾ ਨਿਪਟਾਰਾ ਕਰ ਰਹੇ ਹੋ, ਇਹਨਾਂ ਸੂਖਮਤਾਵਾਂ ਨੂੰ ਸਮਝਣਾ ਤੁਹਾਡੇ ਡੀਬੱਗਿੰਗ ਦੇ ਘੰਟੇ ਬਚਾ ਸਕਦਾ ਹੈ। 🛠️ ਆਓ ਹੱਲ ਵਿੱਚ ਡੁਬਕੀ ਮਾਰੀਏ ਅਤੇ Vercel 'ਤੇ ਆਪਣੇ ਕਠਪੁਤਲੀ ਸੈੱਟਅੱਪ ਨੂੰ ਸਹਿਜੇ-ਸਹਿਜੇ ਚਲਾਓ।
ਹੁਕਮ | ਵਰਤੋਂ ਦੀ ਉਦਾਹਰਨ ਅਤੇ ਵਿਸਤ੍ਰਿਤ ਵਰਣਨ |
---|---|
puppeteer.launch({ ... }) | ਇਹ ਕਮਾਂਡ ਖਾਸ ਸੰਰਚਨਾ ਵਿਕਲਪਾਂ ਜਿਵੇਂ ਕਿ ignoreHTTPSErrors ਅਤੇ executablePath ਦੇ ਨਾਲ Puppeteer ਦੀ ਇੱਕ ਉਦਾਹਰਣ ਲਾਂਚ ਕਰਦੀ ਹੈ। ਇਹ ਵਿਕਲਪ ਵਰਸੇਲ ਵਰਗੇ ਤੈਨਾਤੀ ਪਲੇਟਫਾਰਮਾਂ 'ਤੇ Chrome ਸੰਸਕਰਣਾਂ ਨਾਲ ਕ੍ਰੋਮ ਐਗਜ਼ੀਕਿਊਟੇਬਲ ਦੀ ਸਹੀ ਸਥਿਤੀ ਨੂੰ ਸੈੱਟ ਕਰਕੇ ਅਤੇ ਸੁਰੱਖਿਆ ਸੈਟਿੰਗਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਕੇ ਤਰੁੱਟੀਆਂ ਨੂੰ ਹੱਲ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰਦੇ ਹਨ। |
executablePath | puppeteer.launch ਦੇ ਅੰਦਰ ਵਰਤਿਆ ਗਿਆ, executablePath ਕ੍ਰੋਮ ਬਾਈਨਰੀ ਦਾ ਮਾਰਗ ਦਰਸਾਉਂਦਾ ਹੈ। ਇਸ ਮਾਰਗ ਨੂੰ ਸੈੱਟ ਕਰਨਾ ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਕਠਪੁਤਲੀ ਰਿਮੋਟ ਸਰਵਰਾਂ 'ਤੇ ਸਹੀ Chrome ਸੰਸਕਰਣ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ, ਜੋ ਕਿ ਵਰਸੇਲ ਵਰਗੇ ਸਰਵਰ ਰਹਿਤ ਵਾਤਾਵਰਣਾਂ ਵਿੱਚ ਜ਼ਰੂਰੀ ਹੈ ਜਿੱਥੇ Chrome ਮੂਲ ਰੂਪ ਵਿੱਚ ਸਥਾਪਤ ਨਹੀਂ ਹੋ ਸਕਦਾ ਹੈ। |
args: ['--no-sandbox', '--disable-setuid-sandbox'] | ਇਹ ਫਲੈਗ ਕ੍ਰੋਮ ਦੀ ਸੈਂਡਬਾਕਸਿੰਗ ਵਿਸ਼ੇਸ਼ਤਾ ਨੂੰ ਅਸਮਰੱਥ ਬਣਾਉਂਦੇ ਹਨ, ਜੋ ਕਿ ਕਈ ਕਲਾਉਡ ਹੋਸਟਿੰਗ ਪ੍ਰਦਾਤਾਵਾਂ 'ਤੇ ਚੱਲਣ ਲਈ ਪਪੀਟੀਅਰ ਲਈ ਜ਼ਰੂਰੀ ਹੈ। ਸੈਂਡਬਾਕਸਿੰਗ ਆਮ ਤੌਰ 'ਤੇ ਸਾਂਝੇ ਸਰਵਰਾਂ 'ਤੇ ਅਨੁਮਤੀ ਦੀਆਂ ਗਲਤੀਆਂ ਤੋਂ ਬਚਣ ਲਈ ਅਸਮਰੱਥ ਹੁੰਦੀ ਹੈ ਪਰ ਸੁਰੱਖਿਆ ਪ੍ਰਭਾਵਾਂ ਦੇ ਕਾਰਨ ਧਿਆਨ ਨਾਲ ਕੀਤੀ ਜਾਣੀ ਚਾਹੀਦੀ ਹੈ। |
cacheDirectory | Puppeteer ਦੀ ਕੌਂਫਿਗਰੇਸ਼ਨ ਫਾਈਲ ਵਿੱਚ, cacheDirectory ਬ੍ਰਾਊਜ਼ਰ ਕੈਚਿੰਗ ਲਈ ਇੱਕ ਕਸਟਮ ਡਾਇਰੈਕਟਰੀ ਸੈਟ ਕਰਦੀ ਹੈ। ਇਹ ਵਰਸੇਲ 'ਤੇ ਵਿਸ਼ੇਸ਼ ਤੌਰ 'ਤੇ ਮਦਦਗਾਰ ਹੈ, ਕਿਉਂਕਿ ਇਹ ਤੁਹਾਨੂੰ ਇਹ ਨਿਯੰਤਰਣ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦਾ ਹੈ ਕਿ ਪਪੀਟੀਅਰ ਨੇ ਕ੍ਰੋਮ ਬਾਇਨਰੀਆਂ ਨੂੰ ਕਿੱਥੇ ਡਾਊਨਲੋਡ ਕੀਤਾ ਹੈ, ਕੈਸ਼-ਸੰਬੰਧੀ ਤਰੁੱਟੀਆਂ ਨੂੰ ਰੋਕਦਾ ਹੈ। |
await page.goto(url, { waitUntil: 'networkidle2' }) | ਇਹ ਕਮਾਂਡ URL ਨੂੰ ਲੋਡ ਕਰਦੀ ਹੈ ਅਤੇ ਉਦੋਂ ਤੱਕ ਉਡੀਕ ਕਰਦੀ ਹੈ ਜਦੋਂ ਤੱਕ ਪੰਨੇ ਨੂੰ ਪੂਰੀ ਤਰ੍ਹਾਂ ਲੋਡ ਕਰਨ ਲਈ ਦੋ ਤੋਂ ਵੱਧ ਨੈੱਟਵਰਕ ਕਨੈਕਸ਼ਨ ਨਹੀਂ ਹੁੰਦੇ। networkidle2 ਵਿਕਲਪ ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਸਕ੍ਰੀਨਸ਼ੌਟ ਲੈਣ ਤੋਂ ਪਹਿਲਾਂ ਸਾਰੇ ਸਰੋਤ ਲੋਡ ਕੀਤੇ ਗਏ ਹਨ, ਇਸ ਨੂੰ ਗੁੰਝਲਦਾਰ ਪੰਨਿਆਂ ਨੂੰ ਕੈਪਚਰ ਕਰਨ ਲਈ ਆਦਰਸ਼ ਬਣਾਉਂਦਾ ਹੈ। |
page.setViewport({ width: 1920, height: 1080 }) | ਖਾਸ ਆਕਾਰ ਦੀ ਇੱਕ ਸਕਰੀਨ ਦੀ ਨਕਲ ਕਰਦੇ ਹੋਏ, Chrome ਉਦਾਹਰਨ ਦੇ ਵਿਊਪੋਰਟ ਮਾਪਾਂ ਨੂੰ ਸੈੱਟ ਕਰਦਾ ਹੈ। ਇਹ ਸਕ੍ਰੀਨਸ਼ੌਟਸ ਅਤੇ ਵਿਜ਼ੂਅਲ ਟੈਸਟਿੰਗ ਲਈ ਜ਼ਰੂਰੀ ਹੈ, ਕਿਉਂਕਿ ਇਹ ਕੈਪਚਰ ਕੀਤੇ ਵੈੱਬਪੇਜ ਦੀ ਦਿੱਖ ਨੂੰ ਨਿਯੰਤਰਿਤ ਕਰਦਾ ਹੈ। |
path.join(__dirname, '..', 'public', fileName) | ਇਹ ਕਮਾਂਡ ਮੌਜੂਦਾ ਡਾਇਰੈਕਟਰੀ ਨੂੰ ਸਰਵਜਨਕ ਫੋਲਡਰ ਨਾਲ ਜੋੜ ਕੇ, ਸਕਰੀਨਸ਼ਾਟ ਸਟੋਰ ਕਰਨ ਲਈ ਇੱਕ ਖਾਸ ਡਾਇਰੈਕਟਰੀ ਬਣਾ ਕੇ ਇੱਕ ਫਾਈਲ ਮਾਰਗ ਬਣਾਉਂਦਾ ਹੈ। ਇਹ ਆਉਟਪੁੱਟ ਫਾਈਲਾਂ ਨੂੰ ਸੰਗਠਿਤ ਕਰਨ ਲਈ ਜ਼ਰੂਰੀ ਹੈ, ਖਾਸ ਤੌਰ 'ਤੇ ਜਦੋਂ ਸਕ੍ਰੀਨਸ਼ੌਟ ਮਾਰਗ ਨੂੰ ਕਲਾਇੰਟ ਨੂੰ ਵਾਪਸ ਪ੍ਰਦਾਨ ਕਰਦੇ ਹੋ। |
uuid() | ਹਰੇਕ ਸਕ੍ਰੀਨਸ਼ੌਟ ਲਈ ਇੱਕ ਵਿਲੱਖਣ ਪਛਾਣਕਰਤਾ ਬਣਾਉਂਦਾ ਹੈ, ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਹਰੇਕ ਫਾਈਲ ਦਾ ਨਾਮ ਵਿਲੱਖਣ ਹੈ ਅਤੇ ਓਵਰਰਾਈਟ ਤੋਂ ਬਚਦਾ ਹੈ। ਇਹ ਫੰਕਸ਼ਨ ਖਾਸ ਤੌਰ 'ਤੇ ਉਹਨਾਂ ਐਪਲੀਕੇਸ਼ਨਾਂ ਲਈ ਉਪਯੋਗੀ ਹੈ ਜੋ ਇੱਕੋ ਸਮੇਂ ਕਈ ਚਿੱਤਰਾਂ ਜਾਂ ਡੇਟਾ ਫਾਈਲਾਂ ਨੂੰ ਸਟੋਰ ਕਰਦੇ ਹਨ। |
chai.request(app) | ਚਾਈ HTTP ਮੋਡੀਊਲ ਦਾ ਹਿੱਸਾ, ਇਹ ਕਮਾਂਡ ਐਂਡਪੁਆਇੰਟ ਜਵਾਬਾਂ ਦੀ ਜਾਂਚ ਕਰਨ ਲਈ ਐਪਲੀਕੇਸ਼ਨ ਸਰਵਰ (ਐਪ ਵਜੋਂ ਪਰਿਭਾਸ਼ਿਤ) ਨੂੰ ਇੱਕ ਬੇਨਤੀ ਭੇਜਦੀ ਹੈ। ਇਹ ਸਵੈਚਲਿਤ ਜਾਂਚ ਲਈ ਲਾਭਦਾਇਕ ਹੈ, ਜਿਸ ਨਾਲ ਡਿਵੈਲਪਰਾਂ ਨੂੰ ਇਹ ਪੁਸ਼ਟੀ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਮਿਲਦੀ ਹੈ ਕਿ ਕੀ ਸਕ੍ਰੀਨਸ਼ਾਟ API ਉਮੀਦ ਮੁਤਾਬਕ ਕੰਮ ਕਰਦਾ ਹੈ। |
describe() and it() | ਇਹ ਮੋਚਾ ਟੈਸਟਿੰਗ ਫੰਕਸ਼ਨ ਕਾਰਜਕੁਸ਼ਲਤਾ ਨੂੰ ਪ੍ਰਮਾਣਿਤ ਕਰਨ ਲਈ ਟੈਸਟ ਸੂਟ (ਵਰਣਨ()) ਅਤੇ ਵਿਅਕਤੀਗਤ ਟੈਸਟਾਂ (it()) ਨੂੰ ਪਰਿਭਾਸ਼ਿਤ ਕਰਦੇ ਹਨ। ਉਹਨਾਂ ਦੀ ਵਰਤੋਂ ਪਪੀਟੀਅਰ ਸਕ੍ਰੀਨਸ਼ੌਟ API ਦੇ ਹਰੇਕ ਪਹਿਲੂ ਦੀ ਪੁਸ਼ਟੀ ਕਰਨ ਲਈ ਕੀਤੀ ਜਾਂਦੀ ਹੈ, ਗੁੰਮ ਪੈਰਾਮੀਟਰਾਂ ਤੋਂ ਲੈ ਕੇ ਵੈਧ URL ਤੱਕ, ਵੱਖ-ਵੱਖ ਸਥਿਤੀਆਂ ਵਿੱਚ ਸਹੀ ਢੰਗ ਨਾਲ ਵਿਵਹਾਰ ਕਰਦਾ ਹੈ। |
ਵਰਸੇਲ ਤੈਨਾਤੀ 'ਤੇ ਕਠਪੁਤਲੀ ਦੀ ਕਰੋਮ ਗਲਤੀ ਨੂੰ ਦੂਰ ਕਰਨਾ
ਦਿੱਤੀ ਗਈ ਪ੍ਰਾਇਮਰੀ ਸਕ੍ਰਿਪਟ ਇੱਕ ਬੈਕਐਂਡ ਫੰਕਸ਼ਨ ਹੈ ਜੋ ਵਰਤਦੀ ਹੈ ਕਠਪੁਤਲੀ ਇੱਕ ਉਪਭੋਗਤਾ ਦੁਆਰਾ ਸਪਲਾਈ ਕੀਤੇ URL ਦਾ ਇੱਕ ਸਕ੍ਰੀਨਸ਼ੌਟ ਕੈਪਚਰ ਕਰਨ ਲਈ। ਇਹ ਕੰਮ ਖਾਸ ਤੌਰ 'ਤੇ ਗਤੀਸ਼ੀਲ ਤੌਰ 'ਤੇ ਪੂਰਵਦਰਸ਼ਨਾਂ ਜਾਂ ਵੈਬ ਸਕ੍ਰੈਪਿੰਗ ਉਦੇਸ਼ਾਂ ਲਈ ਲਾਭਦਾਇਕ ਹੈ. ਹਾਲਾਂਕਿ, ਪਲੇਟਫਾਰਮਾਂ ਲਈ ਤੈਨਾਤੀ ਵਰਸੇਲ ਗਲਤੀਆਂ ਹੋ ਸਕਦੀਆਂ ਹਨ, ਜਿਵੇਂ ਕਿ ਵਾਤਾਵਰਣ ਵਿੱਚ Chrome ਦਾ ਨਾ ਪਾਇਆ ਜਾਣਾ। ਅਜਿਹਾ ਇਸ ਲਈ ਹੁੰਦਾ ਹੈ ਕਿਉਂਕਿ ਵਰਸੇਲ ਸੰਭਾਵਿਤ ਟਿਕਾਣੇ 'ਤੇ ਪੂਰਵ-ਇੰਸਟਾਲ ਕੀਤੇ ਕ੍ਰੋਮ ਦੇ ਨਾਲ ਨਹੀਂ ਆਉਂਦਾ ਹੈ, ਭਾਵ Puppeteer ਨੂੰ ਸਹੀ ਸੰਸਕਰਣ ਲੱਭਣ ਜਾਂ ਸਥਾਪਤ ਕਰਨ ਲਈ ਕੌਂਫਿਗਰ ਕੀਤਾ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ। ਸਾਡੀ ਉਦਾਹਰਨ ਵਿੱਚ, ਅਸੀਂ ਇੱਕ ਕਸਟਮ ਕਰੋਮ ਬਾਈਨਰੀ ਲਈ ਪਪੀਟੀਅਰ ਦੇ ਐਗਜ਼ੀਕਿਊਟੇਬਲ ਮਾਰਗ ਨੂੰ ਨਿਸ਼ਚਿਤ ਕਰਨ ਲਈ ਵਿਕਲਪਾਂ ਨੂੰ ਲਾਗੂ ਕੀਤਾ ਹੈ ਅਤੇ ਇਹ ਯਕੀਨੀ ਬਣਾਉਣ ਲਈ ਕਿ ਸੈੱਟਅੱਪ ਵਾਤਾਵਰਣ ਵਿੱਚ ਕੰਮ ਕਰਦਾ ਹੈ ਨੂੰ ਅਣਡਿੱਠ ਕਰਨ ਵਾਲੇHTTPSErrors ਫਲੈਗ ਨਾਲ SSL ਮੁੱਦਿਆਂ ਨੂੰ ਹੈਂਡਲ ਕੀਤਾ ਹੈ।
ਸਕ੍ਰਿਪਟ ਸਕ੍ਰੀਨਸ਼ਾਟ ਫੰਕਸ਼ਨ ਨੂੰ ਪਰਿਭਾਸ਼ਿਤ ਕਰਕੇ ਸ਼ੁਰੂ ਹੁੰਦੀ ਹੈ ਜੋ ਬੇਨਤੀ ਤੋਂ URL ਲੈਂਦਾ ਹੈ। ਜੇਕਰ URL ਗੁੰਮ ਹੈ, ਤਾਂ ਇਹ ਇੱਕ JSON ਗਲਤੀ ਜਵਾਬ ਵਾਪਸ ਭੇਜਦਾ ਹੈ, ਪਰ ਜੇਕਰ ਪ੍ਰਦਾਨ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਇਹ ਜ਼ਰੂਰੀ ਸੰਰਚਨਾਵਾਂ ਜਿਵੇਂ ਕਿ ਪਪੀਟੀਅਰ ਨੂੰ ਸ਼ੁਰੂ ਕਰਦਾ ਹੈ executablePath ਅਤੇ args ਵਿਕਲਪ। ਦ executablePath ਇੱਥੇ ਜ਼ਰੂਰੀ ਹੈ ਕਿਉਂਕਿ ਇਹ ਵਰਸੇਲ 'ਤੇ "Chrome ਲੱਭ ਨਹੀਂ ਸਕਿਆ" ਗਲਤੀ ਨੂੰ ਹੱਲ ਕਰਦੇ ਹੋਏ, Puppeteer ਨੂੰ ਸਹੀ Chrome ਸਥਾਨ 'ਤੇ ਭੇਜਦਾ ਹੈ। ਇਸ ਤੋਂ ਇਲਾਵਾ, ਦ args ਵਿਕਲਪ, ਖਾਸ ਤੌਰ 'ਤੇ ਨੋ-ਸੈਂਡਬਾਕਸ ਅਤੇ disable-setuid-ਸੈਂਡਬਾਕਸ, Chrome ਦੀ ਸੈਂਡਬਾਕਸਿੰਗ ਵਿਸ਼ੇਸ਼ਤਾ ਨੂੰ ਅਸਮਰੱਥ ਬਣਾਓ, ਕੁਝ ਸਰਵਰ ਰਹਿਤ ਵਾਤਾਵਰਣਾਂ ਲਈ ਇੱਕ ਲੋੜ। ਇਹ ਸੈਟਿੰਗਾਂ ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦੀਆਂ ਹਨ ਕਿ ਸਕ੍ਰਿਪਟ ਵਰਸੇਲ ਦੇ ਪ੍ਰਬੰਧਿਤ ਬੁਨਿਆਦੀ ਢਾਂਚੇ 'ਤੇ ਅਨੁਮਤੀ ਦੇ ਮੁੱਦਿਆਂ ਨੂੰ ਦਬਾਏ ਬਿਨਾਂ ਲਾਗੂ ਕਰ ਸਕਦੀ ਹੈ।
ਇੱਕ ਵਾਰ ਕਠਪੁਤਲੀ ਲਾਂਚ ਹੋਣ ਤੋਂ ਬਾਅਦ, ਸਕ੍ਰਿਪਟ ਇੱਕ ਨਵਾਂ ਬ੍ਰਾਊਜ਼ਰ ਪੰਨਾ ਖੋਲ੍ਹਦੀ ਹੈ ਅਤੇ ਵਰਤੋਂ ਕਰਦੀ ਹੈ ਜਾਓ ਦੇ ਨਾਲ networkidle2 ਵਿਕਲਪ। ਇਹ ਕਠਪੁਤਲੀ ਨੂੰ ਪੰਨੇ ਦੇ ਪੂਰੀ ਤਰ੍ਹਾਂ ਲੋਡ ਹੋਣ ਤੱਕ ਇੰਤਜ਼ਾਰ ਕਰਨ ਲਈ ਕਹਿੰਦਾ ਹੈ, ਦੋ ਤੋਂ ਵੱਧ ਚੱਲ ਰਹੇ ਨੈੱਟਵਰਕ ਬੇਨਤੀਆਂ ਦੇ ਨਾਲ, ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਗੁੰਝਲਦਾਰ ਪੰਨੇ ਵੀ ਸਕ੍ਰੀਨਸ਼ੌਟ ਲੈਣ ਤੋਂ ਪਹਿਲਾਂ ਪੂਰੀ ਤਰ੍ਹਾਂ ਰੈਂਡਰ ਹੋਣ। ਇਹ ਕਦਮ ਭਰੋਸੇਯੋਗ, ਸਟੀਕ ਸਕ੍ਰੀਨਸ਼ੌਟ ਕੈਪਚਰ ਕਰਨ ਲਈ ਮਹੱਤਵਪੂਰਨ ਹੈ, ਖਾਸ ਤੌਰ 'ਤੇ ਆਧੁਨਿਕ ਵੈਬ ਪੇਜਾਂ ਨੂੰ ਸੰਭਾਲਣ ਵੇਲੇ ਜੋ ਅਕਸਰ ਅਸਿੰਕ੍ਰੋਨਸ ਲੋਡਿੰਗ 'ਤੇ ਬਹੁਤ ਜ਼ਿਆਦਾ ਨਿਰਭਰ ਕਰਦੇ ਹਨ। ਵਿਊਪੋਰਟ ਦਾ ਆਕਾਰ ਫਿਰ 1920x1080 'ਤੇ ਸੈੱਟ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਇੱਕ ਪੂਰੀ HD ਸਕ੍ਰੀਨ ਦੀ ਨਕਲ ਕਰਦਾ ਹੈ, ਜੋ ਗਾਰੰਟੀ ਦਿੰਦਾ ਹੈ ਕਿ ਕੈਪਚਰ ਕੀਤੀ ਸਮੱਗਰੀ ਉਸ ਖਾਕੇ ਨੂੰ ਦਰਸਾਉਂਦੀ ਹੈ ਜੋ ਜ਼ਿਆਦਾਤਰ ਉਪਭੋਗਤਾ ਇੱਕ ਡੈਸਕਟੌਪ ਡਿਵਾਈਸ 'ਤੇ ਦੇਖਣਗੇ।
ਅੰਤ ਵਿੱਚ, ਸਕ੍ਰਿਪਟ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਇੱਕ ਵਿਲੱਖਣ ਫਾਈਲ ਨਾਮ ਤਿਆਰ ਕਰਦੀ ਹੈ uuid ਲਾਇਬ੍ਰੇਰੀ, ਸਕਰੀਨਸ਼ਾਟ ਨੂੰ ਇੱਕ ਜਨਤਕ ਡਾਇਰੈਕਟਰੀ ਵਿੱਚ ਸਟੋਰ ਕਰਨਾ ਜਿੱਥੇ ਇਸਨੂੰ ਐਕਸੈਸ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ ਅਤੇ ਇੱਕ JSON ਜਵਾਬ ਵਜੋਂ ਉਪਭੋਗਤਾ ਨੂੰ ਵਾਪਸ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ। ਨੋਡਜ਼ ਦੇ ਨਾਲ ਧਿਆਨ ਨਾਲ ਫਾਈਲ ਮਾਰਗਾਂ ਨੂੰ ਢਾਂਚਾ ਬਣਾ ਕੇ path.join ਵਿਧੀ, ਸਕ੍ਰਿਪਟ ਫਾਈਲ ਪਾਥ ਮੁੱਦਿਆਂ ਤੋਂ ਬਚਦੀ ਹੈ ਜੋ ਵਾਤਾਵਰਣ ਸੈਟਅਪ ਵਿੱਚ ਅੰਤਰ ਦੇ ਕਾਰਨ ਪੈਦਾ ਹੋ ਸਕਦੇ ਹਨ। ਉਦਾਹਰਨ ਲਈ, ਜਦੋਂ ਕਿ ਇਹ ਢਾਂਚਾ ਇੱਕ ਸਥਾਨਕ ਮਸ਼ੀਨ 'ਤੇ ਸਹਿਜੇ ਹੀ ਚੱਲਦਾ ਹੈ, ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਉਹੀ ਪਾਥ ਵਰਸੇਲ 'ਤੇ ਕੰਮ ਨਾ ਕਰਨ, ਹਰ ਇੱਕ ਫਾਈਲ ਮਾਰਗ ਨੂੰ ਮਾਡਿਊਲਰ ਅਤੇ ਅਨੁਕੂਲ ਤਰੀਕੇ ਨਾਲ ਪਰਿਭਾਸ਼ਿਤ ਕਰਨਾ ਮਹੱਤਵਪੂਰਨ ਬਣਾਉਂਦਾ ਹੈ। ਆਖਰਕਾਰ, ਇਹ ਸੈੱਟਅੱਪ ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਕਠਪੁਤਲੀ ਫੰਕਸ਼ਨ ਸਥਾਨਕ ਅਤੇ ਸਰਵਰ ਰਹਿਤ ਵਾਤਾਵਰਣ ਦੋਵਾਂ ਵਿੱਚ ਸੁਚਾਰੂ ਢੰਗ ਨਾਲ ਕੰਮ ਕਰਦਾ ਹੈ, ਸਾਰੇ ਮੁੱਖ ਪਹਿਲੂ ਜਿਵੇਂ ਕਿ ਪੇਜ ਲੋਡਿੰਗ, ਗਲਤੀ ਹੈਂਡਲਿੰਗ, ਅਤੇ ਵਾਤਾਵਰਣ ਦੀਆਂ ਰੁਕਾਵਟਾਂ ਨੂੰ ਸੰਭਾਲਦਾ ਹੈ। 🖥️
ਹੱਲ 1: ਵਰਸੇਲ 'ਤੇ ਕਰੋਮ ਨੂੰ ਸਹੀ ਢੰਗ ਨਾਲ ਸਥਾਪਿਤ ਕਰਨ ਲਈ ਕਠਪੁਤਲੀ ਨੂੰ ਕੌਂਫਿਗਰ ਕਰਨਾ
ਇਹ Node.js-ਅਧਾਰਿਤ ਬੈਕਐਂਡ ਹੱਲ ਇਹ ਯਕੀਨੀ ਬਣਾਉਣ ਲਈ ਕਿ Chrome ਦੇ ਸਹੀ ਢੰਗ ਨਾਲ ਸਥਾਪਨਾ ਕਰਦਾ ਹੈ, Puppeteer ਦੇ ਕੈਸ਼ ਮਾਰਗ ਅਤੇ ਇੰਸਟਾਲੇਸ਼ਨ ਕਮਾਂਡਾਂ ਨੂੰ ਕੌਂਫਿਗਰ ਕਰਦਾ ਹੈ।
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: .puppeteerrc.cjs ਫਾਈਲ ਨਾਲ ਵਰਸੇਲ ਲਈ ਕਸਟਮ ਪਪੀਟੀਅਰ ਸੰਰਚਨਾ
ਇਹ ਹੱਲ Puppeteer ਦੀ ਸੰਰਚਨਾ ਫਾਈਲ (.puppeteerrc.cjs) ਨੂੰ ਕ੍ਰੋਮ ਕੈਸ਼ ਮਾਰਗ ਨੂੰ ਨਿਸ਼ਚਿਤ ਕਰਨ ਅਤੇ Vercel ਦੇ ਫਾਈਲ ਢਾਂਚੇ ਨਾਲ ਅਨੁਕੂਲਤਾ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਣ ਲਈ ਵਿਵਸਥਿਤ ਕਰਦਾ ਹੈ।
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: Puppeteer ਲਈ package.json ਵਿੱਚ ਵਾਤਾਵਰਨ ਵੇਰੀਏਬਲ ਅਤੇ ਸਕ੍ਰਿਪਟਾਂ ਨੂੰ ਲਾਗੂ ਕਰਨਾ
ਇਹ ਪਹੁੰਚ ਨੂੰ ਸੋਧਦਾ ਹੈ package.json ਖਾਸ ਕਰੋਮ ਬਾਈਨਰੀਜ਼ ਨੂੰ ਸਥਾਪਿਤ ਕਰਨ ਲਈ ਫਾਈਲ ਅਤੇ ਤੈਨਾਤੀ ਦੌਰਾਨ ਆਪਣੇ ਆਪ ਪਪੀਟੀਅਰ ਸੰਰਚਨਾਵਾਂ ਨੂੰ ਸੈਟ ਅਪ ਕਰੋ।
// 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";
ਕਠਪੁਤਲੀ ਸਕ੍ਰੀਨਸ਼ੌਟ ਕਾਰਜਸ਼ੀਲਤਾ ਲਈ ਯੂਨਿਟ ਟੈਸਟ
ਇਹ Node.js ਮੋਚਾ ਟੈਸਟ ਸਕ੍ਰਿਪਟ ਵੱਖ-ਵੱਖ ਵਾਤਾਵਰਣਾਂ ਵਿੱਚ ਇੱਕ URL ਤੋਂ ਇੱਕ ਸਕ੍ਰੀਨਸ਼ੌਟ ਕੈਪਚਰ ਕਰਨ ਦੀ ਕਠਪੁਤਲੀ ਦੀ ਯੋਗਤਾ ਦੀ ਪੁਸ਼ਟੀ ਕਰਦੀ ਹੈ।
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();
});
});
});
ਕਲਾਉਡ ਵਾਤਾਵਰਨ ਲਈ ਕਠਪੁਤਲੀ ਨੂੰ ਅਨੁਕੂਲ ਬਣਾਉਣਾ
ਜਦੋਂ ਕਲਾਉਡ ਪਲੇਟਫਾਰਮਾਂ 'ਤੇ ਕਠਪੁਤਲੀ-ਅਧਾਰਤ ਐਪਲੀਕੇਸ਼ਨਾਂ ਨੂੰ ਤੈਨਾਤ ਕਰਦੇ ਹੋ, ਜਿਵੇਂ ਕਿ ਵਰਸੇਲ ਜਾਂ Heroku, ਇਹਨਾਂ ਵਾਤਾਵਰਨ ਦੀਆਂ ਸੀਮਾਵਾਂ ਨੂੰ ਸਮਝਣਾ ਜ਼ਰੂਰੀ ਹੈ। ਸਥਾਨਕ ਸੈਟਅਪਸ ਦੇ ਉਲਟ, ਕਲਾਉਡ ਵਾਤਾਵਰਣ ਆਮ ਤੌਰ 'ਤੇ ਪ੍ਰਬੰਧਿਤ ਜਾਂ ਸਰਵਰ ਰਹਿਤ ਆਰਕੀਟੈਕਚਰ 'ਤੇ ਕੰਮ ਕਰਦੇ ਹਨ, ਜਿਸਦਾ ਮਤਲਬ ਹੈ ਕਿ Chrome ਵਰਗੀਆਂ ਨਿਰਭਰਤਾਵਾਂ ਹਮੇਸ਼ਾ ਆਸਾਨੀ ਨਾਲ ਉਪਲਬਧ ਨਹੀਂ ਹੁੰਦੀਆਂ ਹਨ। ਅਸਲ ਵਿੱਚ, ਕਠਪੁਤਲੀ ਦਾ launch ਵਿਧੀ ਅਸਫਲ ਹੋ ਸਕਦੀ ਹੈ ਜੇਕਰ ਲੋੜੀਂਦਾ Chrome ਸੰਸਕਰਣ ਸਰਵਰ 'ਤੇ ਸਥਾਪਤ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ, ਨਤੀਜੇ ਵਜੋਂ "Chrome ਨੂੰ ਲੱਭਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ" ਵਰਗੀਆਂ ਤਰੁੱਟੀਆਂ ਪੈਦਾ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਇੱਕ ਚੰਗਾ ਅਭਿਆਸ ਹੈ Chrome ਦੇ ਐਗਜ਼ੀਕਿਊਟੇਬਲ ਮਾਰਗ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ਨਿਸ਼ਚਿਤ ਕਰਨਾ executablePath, ਕਿਉਂਕਿ ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ Puppeteer ਕਿਸੇ ਵੀ ਵਾਤਾਵਰਣ 'ਤੇ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਢੰਗ ਨਾਲ Chrome ਨੂੰ ਲੱਭ ਅਤੇ ਲਾਂਚ ਕਰ ਸਕਦਾ ਹੈ।
ਇਸ ਤੋਂ ਇਲਾਵਾ, ਅਨੁਕੂਲਤਾ ਲਈ ਜ਼ਰੂਰੀ ਲਾਂਚ ਆਰਗੂਮੈਂਟਸ ਨੂੰ ਜੋੜਨਾ ਮਹੱਤਵਪੂਰਨ ਹੈ। ਝੰਡੇ ਜਿਵੇਂ ਕਿ --no-sandbox ਅਤੇ --disable-setuid-sandbox ਖਾਸ ਤੌਰ 'ਤੇ ਮਦਦਗਾਰ ਹੁੰਦੇ ਹਨ। ਜਦੋਂ ਕਿ ਇਹ ਫਲੈਗ Chrome ਦੀਆਂ ਕੁਝ ਸੁਰੱਖਿਆ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਨੂੰ ਅਸਮਰੱਥ ਬਣਾਉਂਦੇ ਹਨ, ਇਹ ਅਕਸਰ ਸਰਵਰ ਰਹਿਤ ਸੈੱਟਅੱਪਾਂ ਲਈ ਜ਼ਰੂਰੀ ਹੁੰਦੇ ਹਨ ਜਿੱਥੇ Chrome ਦੀ ਸੈਂਡਬਾਕਸਿੰਗ ਸਮਰਥਿਤ ਨਹੀਂ ਹੈ। ਇਸ ਤੋਂ ਇਲਾਵਾ, Puppeteer's ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਇੱਕ ਕਸਟਮ ਕੈਸ਼ ਡਾਇਰੈਕਟਰੀ ਨਿਰਧਾਰਤ ਕਰਨਾ cacheDirectory ਵਿਕਲਪ ਸੰਭਾਵੀ ਕੈਸ਼ ਸਮੱਸਿਆਵਾਂ ਨੂੰ ਰੋਕਣ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ, ਖਾਸ ਕਰਕੇ ਜਦੋਂ ਕਈ ਬ੍ਰਾਊਜ਼ਰ ਸੰਸਕਰਣ ਸ਼ਾਮਲ ਹੁੰਦੇ ਹਨ। ਉਦਾਹਰਨ ਲਈ, ਸੈਟਿੰਗ cacheDirectory ਇੱਕ ਜਾਣੀ-ਪਛਾਣੀ ਡਾਇਰੈਕਟਰੀ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਰਨਟਾਈਮ ਦੌਰਾਨ ਸਾਰੀਆਂ ਨਿਰਭਰਤਾਵਾਂ ਉਪਲਬਧ ਹਨ।
ਅੰਤ ਵਿੱਚ, ਨੂੰ ਅਨੁਕੂਲ ਬਣਾਉਣਾ goto ਵਿਧੀ ਕਾਰਗੁਜ਼ਾਰੀ ਵਿੱਚ ਬਹੁਤ ਸੁਧਾਰ ਕਰ ਸਕਦੀ ਹੈ। ਦੀ ਵਰਤੋਂ ਕਰਕੇ waitUntil: 'networkidle2' ਵਿਕਲਪ, ਸਕ੍ਰਿਪਟ ਪੰਨੇ ਦੇ ਲੋਡਿੰਗ ਨੂੰ ਪੂਰਾ ਕਰਨ ਦੀ ਉਡੀਕ ਕਰਦੀ ਹੈ, ਜੋ ਕਿ ਉਹਨਾਂ ਵਾਤਾਵਰਣਾਂ ਲਈ ਕੁੰਜੀ ਹੈ ਜਿੱਥੇ ਇੰਟਰਨੈਟ ਸਪੀਡ ਜਾਂ ਸਰੋਤ ਲੋਡਿੰਗ ਵੱਖਰੀ ਹੁੰਦੀ ਹੈ। ਇਹ ਵਿਸ਼ੇਸ਼ ਤੌਰ 'ਤੇ ਗਤੀਸ਼ੀਲ ਪੰਨਿਆਂ ਜਾਂ ਐਪਲੀਕੇਸ਼ਨਾਂ ਵਿੱਚ ਸਹੀ ਸਕ੍ਰੀਨਸ਼ੌਟਸ ਕੈਪਚਰ ਕਰਨ ਲਈ ਲਾਭਦਾਇਕ ਹੈ ਜਿੱਥੇ ਸਮੱਗਰੀ ਅਸਿੰਕਰੋਨਸ ਤੌਰ 'ਤੇ ਲੋਡ ਹੁੰਦੀ ਹੈ। ਇਹਨਾਂ ਤਕਨੀਕਾਂ ਦਾ ਸੁਮੇਲ ਕਠਪੁਤਲੀ ਨੂੰ ਕਲਾਉਡ ਪਲੇਟਫਾਰਮਾਂ 'ਤੇ ਨਿਰਵਿਘਨ ਕੰਮ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ, ਉਤਪਾਦਨ ਵਿੱਚ ਸਵੈਚਲਿਤ ਕਾਰਜਾਂ ਲਈ ਇੱਕ ਸ਼ਕਤੀਸ਼ਾਲੀ ਹੱਲ ਪੇਸ਼ ਕਰਦਾ ਹੈ। 🚀
ਕਠਪੁਤਲੀ ਅਤੇ ਕਲਾਉਡ ਤੈਨਾਤੀਆਂ ਬਾਰੇ ਆਮ ਸਵਾਲ
- ਮੈਨੂੰ ਕਲਾਉਡ ਪਲੇਟਫਾਰਮਾਂ 'ਤੇ “Chrome ਨਹੀਂ ਲੱਭ ਸਕਿਆ” ਤਰੁੱਟੀਆਂ ਕਿਉਂ ਮਿਲਦੀਆਂ ਹਨ?
- ਇਹ ਤਰੁੱਟੀਆਂ ਅਕਸਰ ਵਾਪਰਦੀਆਂ ਹਨ ਕਿਉਂਕਿ ਕਲਾਉਡ ਪਲੇਟਫਾਰਮਾਂ ਵਿੱਚ ਡਿਫੌਲਟ ਰੂਪ ਵਿੱਚ ਪੂਰੀ Chrome ਬਾਈਨਰੀ ਸ਼ਾਮਲ ਨਹੀਂ ਹੁੰਦੀ ਹੈ। ਤੁਸੀਂ ਨਿਸ਼ਚਿਤ ਕਰਕੇ ਇਸ ਨੂੰ ਠੀਕ ਕਰ ਸਕਦੇ ਹੋ executablePath ਤੁਹਾਡੇ ਕਠਪੁਤਲੀ ਸੈੱਟਅੱਪ ਵਿੱਚ.
- ਮੈਂ ਇਹ ਕਿਵੇਂ ਯਕੀਨੀ ਬਣਾ ਸਕਦਾ ਹਾਂ ਕਿ ਕਠਪੁਤਲੀ ਸਥਾਨਕ ਅਤੇ ਕਲਾਉਡ ਵਾਤਾਵਰਣ ਦੋਵਾਂ 'ਤੇ ਕੰਮ ਕਰਦੀ ਹੈ?
- ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ executablePath ਅਤੇ args ਵਰਗੇ ਬੱਦਲ-ਅਨੁਕੂਲ ਝੰਡੇ ਦੇ ਨਾਲ --no-sandbox ਤੁਹਾਡੇ ਸੈੱਟਅੱਪ ਨੂੰ ਦੋਵਾਂ ਵਾਤਾਵਰਣਾਂ ਲਈ ਕਾਫ਼ੀ ਲਚਕਦਾਰ ਬਣਾ ਸਕਦਾ ਹੈ।
- ਕੀ ਕਰਦਾ ਹੈ --no-sandbox ਫਲੈਗ ਕਠਪੁਤਲੀ ਵਿੱਚ ਕਰਦੇ ਹਨ?
- ਦ --no-sandbox ਫਲੈਗ ਕ੍ਰੋਮ ਦੀ ਸੈਂਡਬਾਕਸ ਸੁਰੱਖਿਆ ਨੂੰ ਅਸਮਰੱਥ ਬਣਾਉਂਦਾ ਹੈ, ਜੋ ਕਿ ਕਠਪੁਤਲੀ ਨੂੰ ਕਲਾਉਡ ਸੇਵਾਵਾਂ 'ਤੇ ਚਲਾਉਣ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ ਜੋ ਸੈਂਡਬਾਕਸਿੰਗ ਦਾ ਸਮਰਥਨ ਨਹੀਂ ਕਰਦੀਆਂ, ਪਰ ਇਸਨੂੰ ਸਾਵਧਾਨੀ ਨਾਲ ਵਰਤਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ।
- ਮੈਨੂੰ ਇੱਕ ਰਿਵਾਜ ਦੀ ਲੋੜ ਕਿਉਂ ਹੈ cacheDirectory ਕਠਪੁਤਲੀ ਲਈ?
- ਇੱਕ ਕਸਟਮ ਸੈੱਟ ਕਰਨਾ cacheDirectory ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ Puppeteer ਇੱਕ ਜਾਣੇ-ਪਛਾਣੇ ਸਥਾਨ 'ਤੇ ਕ੍ਰੋਮ ਬਾਈਨਰੀਆਂ ਨੂੰ ਡਾਊਨਲੋਡ ਕਰਦਾ ਹੈ, ਜੋ ਕਿ ਤੈਨਾਤੀ ਦੌਰਾਨ ਗਲਤੀਆਂ ਨੂੰ ਰੋਕ ਸਕਦਾ ਹੈ, ਖਾਸ ਕਰਕੇ ਸਰਵਰ ਰਹਿਤ ਵਾਤਾਵਰਨ ਵਿੱਚ।
- ਦਾ ਮਕਸਦ ਕੀ ਹੈ networkidle2 ਵਿੱਚ ਵਿਕਲਪ goto ਢੰਗ?
- ਦ networkidle2 ਵਿਕਲਪ ਉਦੋਂ ਤੱਕ ਉਡੀਕ ਕਰਦਾ ਹੈ ਜਦੋਂ ਤੱਕ ਦੋ ਤੋਂ ਵੱਧ ਸਰਗਰਮ ਨੈੱਟਵਰਕ ਕੁਨੈਕਸ਼ਨ ਨਹੀਂ ਹੁੰਦੇ। ਇਹ ਪੂਰੀ ਤਰ੍ਹਾਂ ਲੋਡ ਕੀਤੇ ਪੰਨੇ ਨੂੰ ਕੈਪਚਰ ਕਰਨ ਅਤੇ ਗਤੀਸ਼ੀਲ ਸਮੱਗਰੀ ਨੂੰ ਸੰਭਾਲਣ ਲਈ ਲਾਭਦਾਇਕ ਹੈ।
- ਕੀ ਕਠਪੁਤਲੀ ਇੱਕ ਖਾਸ Chrome ਸੰਸਕਰਣ ਤੋਂ ਬਿਨਾਂ ਕੰਮ ਕਰ ਸਕਦੀ ਹੈ?
- ਹਾਂ, ਪਰ ਇਹ ਨਿਰਧਾਰਤ ਕਰਨ ਦੀ ਸਿਫਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ executablePath ਅਤੇ ਇਹ ਸੁਨਿਸ਼ਚਿਤ ਕਰੋ ਕਿ ਕਲਾਉਡ ਸੈਟਅਪਾਂ ਵਿੱਚ ਇਕਸਾਰ ਨਤੀਜਿਆਂ ਲਈ ਇੱਕ ਅਨੁਕੂਲ Chrome ਸੰਸਕਰਣ ਪਹੁੰਚਯੋਗ ਹੈ।
- ਮੈਂ ਵੱਖ-ਵੱਖ ਵਾਤਾਵਰਣਾਂ ਵਿੱਚ ਕਠਪੁਤਲੀ ਕੈਸ਼ ਦਾ ਪ੍ਰਬੰਧਨ ਕਿਵੇਂ ਕਰਾਂ?
- ਤੁਸੀਂ ਇੱਕ ਯੂਨੀਵਰਸਲ ਨਿਰਧਾਰਤ ਕਰ ਸਕਦੇ ਹੋ cacheDirectory ਵਿੱਚ .puppeteerrc.cjs ਫਾਈਲ, ਕਠਪੁਤਲੀ ਨੂੰ ਵਰਸੇਲ ਅਤੇ ਹੇਰੋਕੂ ਵਰਗੇ ਪਲੇਟਫਾਰਮਾਂ ਵਿੱਚ ਕ੍ਰੋਮ ਬਾਈਨਰੀ ਲੱਭਣ ਦੀ ਆਗਿਆ ਦਿੰਦੀ ਹੈ।
- ਹੈ puppeteer-core ਤੋਂ ਵੱਖਰਾ puppeteer?
- ਹਾਂ, puppeteer-core ਆਕਾਰ ਘਟਾਉਣ ਲਈ ਬੰਡਲ ਕੀਤੇ Chrome ਨੂੰ ਸ਼ਾਮਲ ਨਹੀਂ ਕਰਦਾ, ਇਸ ਲਈ ਤੁਹਾਨੂੰ ਇੱਕ Chrome ਬਾਈਨਰੀ ਨਿਰਧਾਰਤ ਕਰਨ ਦੀ ਲੋੜ ਪਵੇਗੀ। ਪੂਰਾ puppeteer ਪੈਕੇਜ ਵਿੱਚ ਆਪਣੇ ਆਪ ਹੀ Chrome ਸ਼ਾਮਲ ਹੁੰਦਾ ਹੈ।
- ਮੈਨੂੰ ਕੀ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ ਜੇਕਰ ਕਠਪੁਤਲੀ ਕਲਾਉਡ ਵਾਤਾਵਰਨ 'ਤੇ ਹੌਲੀ ਹੈ?
- ਅਨੁਕੂਲ ਬਣਾਉਣਾ viewport ਸੈਟਿੰਗਾਂ ਅਤੇ ਬੇਲੋੜੀ ਵਿਕਲਪਾਂ ਨੂੰ ਅਯੋਗ ਕਰਨਾ ਜਿਵੇਂ ਕਿ devtools ਸਰੋਤ-ਸੀਮਤ ਵਾਤਾਵਰਣ ਵਿੱਚ ਪ੍ਰਦਰਸ਼ਨ ਵਿੱਚ ਸੁਧਾਰ ਕਰ ਸਕਦਾ ਹੈ।
- ਕੀ ਕਠਪੁਤਲੀ ਸਾਰੇ ਕਲਾਉਡ ਪ੍ਰਦਾਤਾਵਾਂ ਦੇ ਅਨੁਕੂਲ ਹੈ?
- ਆਮ ਤੌਰ 'ਤੇ, ਹਾਂ, ਪਰ ਹਰੇਕ ਪ੍ਰਦਾਤਾ ਦੀਆਂ ਵਿਲੱਖਣ ਲੋੜਾਂ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਵਰਗੀਆਂ ਕਲਾਉਡ-ਅਨੁਕੂਲ ਸੈਟਿੰਗਾਂ ਦੀ ਵਰਤੋਂ ਕਰਨਾ --no-sandbox ਬਿਹਤਰ ਅਨੁਕੂਲਤਾ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ.
ਵਰਸੇਲ 'ਤੇ ਕਠਪੁਤਲੀ ਨੂੰ ਚਲਾਉਣ ਲਈ ਅੰਤਿਮ ਵਿਚਾਰ
Vercel 'ਤੇ Puppeteer ਨੂੰ ਸਫਲਤਾਪੂਰਵਕ ਤੈਨਾਤ ਕਰਨ ਲਈ Chrome ਲਈ ਖਾਸ ਸੈੱਟਅੱਪ ਲੋੜਾਂ ਨੂੰ ਸਮਝਣ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। ਨਿਰਧਾਰਿਤ ਕਰ ਰਿਹਾ ਹੈ ਲਾਂਚ ਵਿਕਲਪ ਅਤੇ Puppeteer ਦੇ ਕੈਸ਼ ਮਾਰਗਾਂ ਨੂੰ ਸਹੀ ਢੰਗ ਨਾਲ ਕੌਂਫਿਗਰ ਕਰਨਾ ਨਿਰਾਸ਼ਾਜਨਕ "Chrome ਨਹੀਂ ਲੱਭ ਸਕਿਆ" ਗਲਤੀ ਨੂੰ ਰੋਕਣ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ। ਇਹ ਵਿਵਸਥਾਵਾਂ ਸਥਾਨਕ ਅਤੇ ਕਲਾਉਡ ਵਾਤਾਵਰਣ ਦੋਵਾਂ ਵਿੱਚ ਕਠਪੁਤਲੀ ਫੰਕਸ਼ਨ ਨੂੰ ਭਰੋਸੇਯੋਗਤਾ ਨਾਲ ਯਕੀਨੀ ਬਣਾਉਂਦੀਆਂ ਹਨ। 🚀
ਇੱਕ ਵਾਰ ਜਦੋਂ ਤੁਸੀਂ ਇਹਨਾਂ ਹੱਲਾਂ ਨੂੰ ਆਪਣੇ ਪ੍ਰੋਜੈਕਟ ਵਿੱਚ ਢਾਲ ਲੈਂਦੇ ਹੋ, ਤਾਂ ਉਪਭੋਗਤਾ ਦੁਆਰਾ ਪ੍ਰਦਾਨ ਕੀਤੇ ਗਏ URL ਤੋਂ ਸਕ੍ਰੀਨਸ਼ਾਟ ਕੈਪਚਰ ਕਰਨਾ ਸਹਿਜ ਬਣ ਜਾਂਦਾ ਹੈ, ਜਿਸ ਨਾਲ ਵਧੇਰੇ ਗਤੀਸ਼ੀਲ ਵੈਬ ਐਪਲੀਕੇਸ਼ਨਾਂ ਦੀ ਆਗਿਆ ਮਿਲਦੀ ਹੈ। ਸਹੀ ਸੈਟਅਪ ਦੇ ਨਾਲ, ਕਠਪੁਤਲੀ ਆਟੋਮੇਸ਼ਨ ਅਤੇ ਵੈਬ ਸਕ੍ਰੈਪਿੰਗ ਲਈ ਇੱਕ ਅਨਮੋਲ ਟੂਲ ਬਣਿਆ ਹੋਇਆ ਹੈ, ਇੱਥੋਂ ਤੱਕ ਕਿ ਵਰਸੇਲ ਵਰਗੇ ਸਰਵਰ ਰਹਿਤ ਪਲੇਟਫਾਰਮਾਂ 'ਤੇ ਵੀ।
ਕਠਪੁਤਲੀ ਗਲਤੀਆਂ ਦੇ ਨਿਪਟਾਰੇ ਲਈ ਸਰੋਤ ਅਤੇ ਹਵਾਲੇ
- ਇਹ ਲੇਖ ਵਿਸਤ੍ਰਿਤ ਸੈੱਟਅੱਪ ਵਿਕਲਪਾਂ ਅਤੇ ਸਮੱਸਿਆ-ਨਿਪਟਾਰੇ ਦੇ ਪੜਾਵਾਂ ਲਈ ਅਧਿਕਾਰਤ ਕਠਪੁਤਲੀ ਸੰਰਚਨਾ ਗਾਈਡ ਦਾ ਹਵਾਲਾ ਦਿੰਦਾ ਹੈ, ਖਾਸ ਤੌਰ 'ਤੇ Chrome ਕੈਸ਼ ਪਾਥਾਂ ਨੂੰ ਸੰਭਾਲਣ ਅਤੇ ਐਗਜ਼ੀਕਿਊਟੇਬਲ ਮਾਰਗਾਂ ਨੂੰ ਨਿਰਧਾਰਿਤ ਕਰਨ ਲਈ। ਕਠਪੁਤਲੀ ਸੰਰਚਨਾ ਗਾਈਡ
- ਵਰਸੇਲ ਦਸਤਾਵੇਜ਼ ਇਸ ਗੱਲ ਦੀ ਸਮਝ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ ਕਿ ਕਿਵੇਂ ਸਰਵਰ ਰਹਿਤ ਵਾਤਾਵਰਣ ਨਿਰਭਰਤਾਵਾਂ ਨੂੰ ਸੰਭਾਲਦੇ ਹਨ ਅਤੇ ਹੈੱਡਲੈੱਸ ਬ੍ਰਾਊਜ਼ਰਾਂ 'ਤੇ ਨਿਰਭਰ ਕਰਨ ਵਾਲੀਆਂ ਐਪਲੀਕੇਸ਼ਨਾਂ ਨੂੰ ਲਾਗੂ ਕਰਨ ਲਈ ਵਿਲੱਖਣ ਲੋੜਾਂ ਨੂੰ ਸੰਭਾਲਦੇ ਹਨ। ਵਰਸੇਲ ਦਸਤਾਵੇਜ਼
- ਸਟੈਕ ਓਵਰਫਲੋ ਚਰਚਾਵਾਂ ਤੈਨਾਤੀ ਦੌਰਾਨ ਆਈਆਂ ਖਾਸ ਕਠਪੁਤਲੀ ਅਤੇ ਕ੍ਰੋਮ ਮੁੱਦਿਆਂ ਨੂੰ ਕਵਰ ਕਰਦੇ ਹੋਏ, ਕਮਿਊਨਿਟੀ-ਸੰਚਾਲਿਤ ਹੱਲ ਅਤੇ ਗਲਤੀ ਨਾਲ ਨਜਿੱਠਣ ਦੀਆਂ ਵਿਹਾਰਕ ਉਦਾਹਰਣਾਂ ਦੀ ਪੇਸ਼ਕਸ਼ ਕਰਦੀਆਂ ਹਨ। ਸਟੈਕ ਓਵਰਫਲੋ