mirror of
https://github.com/Lissy93/web-check.git
synced 2025-05-01 12:54:28 +02:00
fix: a chromium bug where headless mode was set to false from chromium.headless
This commit is contained in:
parent
7ca22daa9a
commit
c96321b99a
@ -42,6 +42,9 @@ RUN yarn build --production
|
|||||||
# Final stage
|
# Final stage
|
||||||
FROM node:${NODE_VERSION}-${DEBIAN_VERSION} AS final
|
FROM node:${NODE_VERSION}-${DEBIAN_VERSION} AS final
|
||||||
|
|
||||||
|
# Set the environment variable HEADLESS to true
|
||||||
|
ENV HEADLESS=true
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
COPY package.json yarn.lock ./
|
COPY package.json yarn.lock ./
|
||||||
|
@ -1,56 +1,59 @@
|
|||||||
import puppeteer from 'puppeteer-core';
|
import puppeteer from "puppeteer-core";
|
||||||
import chromium from 'chrome-aws-lambda';
|
import chromium from "chrome-aws-lambda";
|
||||||
import middleware from './_common/middleware.js';
|
import middleware from "./_common/middleware.js";
|
||||||
|
|
||||||
const screenshotHandler = async (targetUrl) => {
|
const screenshotHandler = async (targetUrl) => {
|
||||||
|
|
||||||
if (!targetUrl) {
|
if (!targetUrl) {
|
||||||
throw new Error('URL is missing from queryStringParameters');
|
throw new Error("URL is missing from queryStringParameters");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!targetUrl.startsWith('http://') && !targetUrl.startsWith('https://')) {
|
if (!targetUrl.startsWith("http://") && !targetUrl.startsWith("https://")) {
|
||||||
targetUrl = 'http://' + targetUrl;
|
targetUrl = "http://" + targetUrl;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
new URL(targetUrl);
|
new URL(targetUrl);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
throw new Error('URL provided is invalid');
|
throw new Error("URL provided is invalid");
|
||||||
}
|
}
|
||||||
|
|
||||||
let browser = null;
|
let browser = null;
|
||||||
try {
|
try {
|
||||||
browser = await puppeteer.launch({
|
browser = await puppeteer.launch({
|
||||||
args: [...chromium.args, '--no-sandbox'], // Add --no-sandbox flag
|
args: [...chromium.args, "--no-sandbox"], // Add --no-sandbox flag
|
||||||
defaultViewport: { width: 800, height: 600 },
|
defaultViewport: { width: 800, height: 600 },
|
||||||
executablePath: process.env.CHROME_PATH || await chromium.executablePath,
|
executablePath:
|
||||||
headless: chromium.headless,
|
process.env.CHROME_PATH || (await chromium.executablePath),
|
||||||
|
headless: process.env.HEADLESS ? true : chromium.headless,
|
||||||
ignoreHTTPSErrors: true,
|
ignoreHTTPSErrors: true,
|
||||||
ignoreDefaultArgs: ['--disable-extensions'],
|
ignoreDefaultArgs: ["--disable-extensions"],
|
||||||
});
|
});
|
||||||
|
|
||||||
let page = await browser.newPage();
|
let page = await browser.newPage();
|
||||||
|
|
||||||
await page.emulateMediaFeatures([{ name: 'prefers-color-scheme', value: 'dark' }]);
|
await page.emulateMediaFeatures([
|
||||||
|
{ name: "prefers-color-scheme", value: "dark" },
|
||||||
|
]);
|
||||||
page.setDefaultNavigationTimeout(8000);
|
page.setDefaultNavigationTimeout(8000);
|
||||||
await page.goto(targetUrl, { waitUntil: 'domcontentloaded' });
|
await page.goto(targetUrl, { waitUntil: "domcontentloaded" });
|
||||||
|
|
||||||
await page.evaluate(() => {
|
await page.evaluate(() => {
|
||||||
const selector = 'body';
|
const selector = "body";
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const element = document.querySelector(selector);
|
const element = document.querySelector(selector);
|
||||||
if (!element) {
|
if (!element) {
|
||||||
reject(new Error(`Error: No element found with selector: ${selector}`));
|
reject(
|
||||||
|
new Error(`Error: No element found with selector: ${selector}`)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
resolve();
|
resolve();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const screenshotBuffer = await page.screenshot();
|
const screenshotBuffer = await page.screenshot();
|
||||||
const base64Screenshot = screenshotBuffer.toString('base64');
|
const base64Screenshot = screenshotBuffer.toString("base64");
|
||||||
|
|
||||||
return { image: base64Screenshot };
|
return { image: base64Screenshot };
|
||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
if (browser !== null) {
|
if (browser !== null) {
|
||||||
await browser.close();
|
await browser.close();
|
||||||
|
Loading…
Reference in New Issue
Block a user