const { Builder } = require('selenium-webdriver'); const firefox = require('selenium-webdriver/firefox'); const chrome = require('selenium-webdriver/chrome'); const edge = require('selenium-webdriver/edge'); const args = process.argv.slice(2); const userAgents = new Map([ ['desktop', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.34'], ['mobile', 'Mozilla/5.0 (Linux; Android 10; Redmi Note 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Mobile Safari/537.36'], ]); const userAgent = userAgents.get(args.find(arg => arg.startsWith('--userAgent='))?.split('=')[1] ?? 'desktop'); function createDriverChrome() { try { const driver = new Builder() .withCapabilities({ 'goog:chromeOptions': { excludeSwitches: [ 'enable-automation', 'useAutomationExtension', ], }, }) .forBrowser('chrome') .setChromeOptions( new chrome.Options() .windowSize({ width: 1280, height: 768 }) .addArguments(`--user-agent=${userAgent}`), ) .build(); return driver; } catch (err) { console.log(err); console.log('Chrome/chromium or chromedriver not installed'); return null; } } function createDriverFirefox() { try { const driver = new Builder() .forBrowser('firefox') .setFirefoxOptions( new firefox.Options() .windowSize({ width: 1280, height: 768 }) .addArguments(`--user-agent=${userAgent}`), ) .build(); return driver; } catch (err) { console.log('Firefox or geckodriver not installed'); return null; } } function createDriverEdge() { try { const driver = new Builder() .forBrowser('MicrosoftEdge') .setEdgeOptions( new edge.Options() .windowSize({ width: 1280, height: 768 }) .addArguments(`--user-agent=${userAgent}`), ) .build(); return driver; } catch (err) { console.log('Edge or edge driver not installed'); return null; } } function createDriver() { let browserType = 'chrome'; for (let i = 0; i < args.length; i++) { if (args[i].startsWith('--')) { if (args[i] === '--firefox') { browserType = 'firefox'; } else if (args[i] === '--edge') { browserType = 'edge'; } } } let driver; console.log(browserType); switch (browserType) { case 'firefox': driver = createDriverFirefox(); break; case 'edge': driver = createDriverEdge(); break; default: driver = createDriverChrome(); } if (!driver) { process.exit(1); } console.log(`Using ${browserType} browser with user agent: ${userAgent}`); return driver; } module.exports = { createDriver, };