Recently we have updated our Ubuntu server hard Disk, after updating I am getting errors when I try to scrape data using puppeteer as mentioned below:
Could not create a browser instance => : Error: Failed to launch the browser process!
1|app | /usr/bin/chromium-browser: 12: xdg-settings: not found
1|app | cannot perform operation: umount --no-follow /var/lib/snapd/hostfs//tmp/snap.rootfs_grFzK6: Invalid argument
1|app | TROUBLESHOOTING: https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md
1|app | at onClose (/home/secfusionread/scrape/node_modules/puppeteer/lib/cjs/puppeteer/node/BrowserRunner.js:193:20)
1|app | at ChildProcess.<anonymous> (/home/secfusionread/scrape/node_modules/puppeteer/lib/cjs/puppeteer/node/BrowserRunner.js:184:79)
My Puppeteer connection code below, I was able to scrape data before the updating.
const puppeteer = require("puppeteer");
async function startBrowser() {
let browser;
//console.log(process.env.NODE_ENV);
try {
console.log("----------- Open the browser ------------");
browser = await puppeteer.launch({
// userDataDir: "../cache",
executablePath:
process.env.NODE_ENV === "production"
? "/usr/bin/chromium-browser"
: "",
args: [
"--no-sandbox",
"--disable-setuid-sandbox",
"--disable-dev-shm-usage",
"--disable-accelerated-2d-canvas",
"--no-first-run",
"--no-zygote",
"--single-process",
"--disable-gpu",
],
headless: true,
timeout: 6000,
});
} catch (err) {
console.log("Could not create a browser instance => : ", err);
}
return browser;
}
async function startPage(browser) {
let page;
try {
console.log("----------- Open a new page ------------");
page = await browser.newPage();
await page.setViewport({ width: 1200, height: 800 });
await page.setExtraHTTPHeaders({
"Accept-Language": "en-US,en;q=0.9",
});
await page.setUserAgent(
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
// "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36"
);
// await page.setRequestInterception(true);
// page.on("request", (req) => {
// if (req.resourceType() === "font" || req.resourceType() === "image") {
// req.abort();
// } else {
// req.continue();
// }
// });
} catch (err) {
console.log("Could not create a new page => : ", err);
}
return page;
}
module.exports = {
startBrowser,
startPage,
};
chromium-browser exists in /usr/bin/chromium-browser, I tried a lot of code from google but nothing works.