feat: pass options for headless mode
This commit is contained in:
@@ -92,7 +92,34 @@ export class RemoteBrowser {
|
|||||||
* @returns {Promise<void>}
|
* @returns {Promise<void>}
|
||||||
*/
|
*/
|
||||||
public initialize = async (options: RemoteBrowserOptions, userId: string): Promise<void> => {
|
public initialize = async (options: RemoteBrowserOptions, userId: string): Promise<void> => {
|
||||||
this.browser = <Browser>(await options.browser.launch(options.launchOptions));
|
const launchOptions = {
|
||||||
|
headless: true,
|
||||||
|
proxy: options.launchOptions?.proxy,
|
||||||
|
chromiumSandbox: false,
|
||||||
|
args: [
|
||||||
|
'--no-sandbox',
|
||||||
|
'--disable-setuid-sandbox',
|
||||||
|
'--headless=new',
|
||||||
|
'--disable-gpu',
|
||||||
|
'--disable-dev-shm-usage',
|
||||||
|
'--disable-software-rasterizer',
|
||||||
|
'--in-process-gpu',
|
||||||
|
'--disable-infobars',
|
||||||
|
'--single-process',
|
||||||
|
'--no-zygote',
|
||||||
|
'--disable-notifications',
|
||||||
|
'--disable-extensions',
|
||||||
|
'--disable-background-timer-throttling',
|
||||||
|
...(options.launchOptions?.args || [])
|
||||||
|
],
|
||||||
|
env: {
|
||||||
|
...process.env,
|
||||||
|
CHROMIUM_FLAGS: '--disable-gpu --no-sandbox --headless=new'
|
||||||
|
}
|
||||||
|
};
|
||||||
|
console.log('Launch options before:', options.launchOptions);
|
||||||
|
this.browser = <Browser>(await options.browser.launch(launchOptions));
|
||||||
|
console.log('Launch options after:', options.launchOptions)
|
||||||
const proxyConfig = await getDecryptedProxyConfig(userId);
|
const proxyConfig = await getDecryptedProxyConfig(userId);
|
||||||
let proxyOptions: { server: string, username?: string, password?: string } = { server: '' };
|
let proxyOptions: { server: string, username?: string, password?: string } = { server: '' };
|
||||||
if (proxyConfig.proxy_url) {
|
if (proxyConfig.proxy_url) {
|
||||||
@@ -107,6 +134,16 @@ export class RemoteBrowser {
|
|||||||
const contextOptions: any = {
|
const contextOptions: any = {
|
||||||
viewport: { height: 400, width: 900 },
|
viewport: { height: 400, width: 900 },
|
||||||
// recordVideo: { dir: 'videos/' }
|
// recordVideo: { dir: 'videos/' }
|
||||||
|
// Force reduced motion to prevent animation issues
|
||||||
|
reducedMotion: 'reduce',
|
||||||
|
// Force JavaScript to be enabled
|
||||||
|
javaScriptEnabled: true,
|
||||||
|
// Set a reasonable timeout
|
||||||
|
timeout: 50000,
|
||||||
|
// Disable hardware acceleration
|
||||||
|
forcedColors: 'none',
|
||||||
|
isMobile: false,
|
||||||
|
hasTouch: false
|
||||||
};
|
};
|
||||||
|
|
||||||
if (proxyOptions.server) {
|
if (proxyOptions.server) {
|
||||||
@@ -116,9 +153,17 @@ export class RemoteBrowser {
|
|||||||
password: proxyOptions.password ? proxyOptions.password : undefined,
|
password: proxyOptions.password ? proxyOptions.password : undefined,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
const browserUserAgent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.5481.38 Safari/537.36";
|
||||||
|
|
||||||
|
|
||||||
|
contextOptions.userAgent = browserUserAgent;
|
||||||
this.context = await this.browser.newContext(contextOptions);
|
this.context = await this.browser.newContext(contextOptions);
|
||||||
|
console.log(`Context from initialize: ${JSON.stringify(this.context)}`)
|
||||||
this.currentPage = await this.context.newPage();
|
this.currentPage = await this.context.newPage();
|
||||||
|
console.log(`CPage from initialize: ${JSON.stringify(this.currentPage)}`)
|
||||||
|
// await this.currentPage.setExtraHTTPHeaders({
|
||||||
|
// 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
|
||||||
|
// });
|
||||||
const blocker = await PlaywrightBlocker.fromPrebuiltAdsAndTracking(fetch);
|
const blocker = await PlaywrightBlocker.fromPrebuiltAdsAndTracking(fetch);
|
||||||
await blocker.enableBlockingInPage(this.currentPage);
|
await blocker.enableBlockingInPage(this.currentPage);
|
||||||
this.client = await this.currentPage.context().newCDPSession(this.currentPage);
|
this.client = await this.currentPage.context().newCDPSession(this.currentPage);
|
||||||
@@ -331,6 +376,9 @@ export class RemoteBrowser {
|
|||||||
await this.stopScreencast();
|
await this.stopScreencast();
|
||||||
const newPage = options ? await this.browser?.newPage(options)
|
const newPage = options ? await this.browser?.newPage(options)
|
||||||
: await this.browser?.newPage();
|
: await this.browser?.newPage();
|
||||||
|
await newPage?.setExtraHTTPHeaders({
|
||||||
|
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
|
||||||
|
});
|
||||||
|
|
||||||
await this.currentPage?.close();
|
await this.currentPage?.close();
|
||||||
this.currentPage = newPage;
|
this.currentPage = newPage;
|
||||||
|
|||||||
Reference in New Issue
Block a user