Skip to content

Error: connect ECONNREFUSED 127.0.0.1:19874 #350

Description

@dotnetdreamer

Got error with the following code:

const logger = require('./src/utils/logger');
const path = require('path');

// Use chrome-launcher and connect to it with puppeteer
(async () => {
  try {
    logger.info('[outlook-screenshot.js] Launching Chrome using chrome-launcher...', { fileName: 'outlook-screenshot.js' });
    
    // Dynamically import chrome-launcher
    const { launch } = await import('chrome-launcher');
    
    // Launch Chrome with chrome-launcher using Promise chain instead of await
    launch({
      startingUrl: 'https://outlook.office.com/calendar/view/month',
      chromeFlags: [
      // '--disable-extensions',
      '--new-window'
      ],
      ignoreDefaultFlags: true,
      logLevel: 'verbose',
      userDataDir: 'C:\\Users\\idrees.khan1\\AppData\\Local\\Google\\Chrome\\User Data'
    })
    .then(chrome => {
      logger.info(`[outlook-screenshot.js] Chrome launched with PID: ${chrome.pid} on port ${chrome.port}`, { fileName: 'outlook-screenshot.js' });
      
      // Wait for Chrome to load the page
      return new Promise(resolve => setTimeout(() => resolve(chrome), 10000));
    })
    .then(chrome => {
      // Wait longer for Chrome to fully initialize and establish debugging server
      logger.info('[outlook-screenshot.js] Waiting for Chrome debugging port to be available...', { fileName: 'outlook-screenshot.js' });
      let portAvailable = false;
      let maxRetries = 10;
      
      (async function checkPort() {
        for (let i = 0; i < maxRetries; i++) {
          try {
            // Check if the port is accessible
            await new Promise((resolve, reject) => {
              const net = require('net');
              const socket = net.connect(chrome.port, '127.0.0.1');
              
              socket.on('connect', () => {
                socket.end();
                portAvailable = true;
                resolve();
              });
              
              socket.on('error', reject);
              
              // Set timeout for connection attempt
              setTimeout(() => {
                socket.destroy();
                reject(new Error('Connection timeout'));
              }, 1000);
            });
            
            if (portAvailable) {
              logger.info(`[outlook-screenshot.js] Chrome debugging port ${chrome.port} is now available`, { fileName: 'outlook-screenshot.js' });
              break;
            }
          } catch (err) {
            logger.warn(`[outlook-screenshot.js] Chrome debugging port not ready yet, retrying (${i+1}/${maxRetries})...`, { fileName: 'outlook-screenshot.js' });
            await new Promise(resolve => setTimeout(resolve, 2000));
          }
        }
        
        if (!portAvailable) {
          throw new Error(`Chrome debugging port ${chrome.port} is not accessible after multiple attempts`);
        }
        
        // Now connect to Chrome with puppeteer using the chrome-launcher's port
        logger.info('[outlook-screenshot.js] Connecting to Chrome with puppeteer...', { fileName: 'outlook-screenshot.js' });
        const puppeteer = require('puppeteer-core');
        
        // Connect to the Chrome instance that chrome-launcher started
        const browser = await puppeteer.connect({
          browserURL: `http://localhost:${chrome.port}`,
          defaultViewport: { width: 1920, height: 1080 }
        });
        
        // Get the pages and use the first one (or create a new one)
        const pages = await browser.pages();
        const page = pages[0] || await browser.newPage();
        
        // Navigate to Outlook (if not already there)
        logger.info('[outlook-screenshot.js] Navigating to Outlook...', { fileName: 'outlook-screenshot.js' });
        await page.goto('https://outlook.office.com/calendar/view/month', { waitUntil: 'networkidle2' });
        
        // Wait a bit more to ensure dynamic content loads
        await new Promise(resolve => setTimeout(resolve, 5000));
        
        // Take a screenshot
        logger.info('[outlook-screenshot.js] Taking screenshot...', { fileName: 'outlook-screenshot.js' });
        const screenshotPath = path.join(__dirname, 'outlook.png');
        await page.screenshot({ path: screenshotPath, fullPage: true });
        
        logger.info(`[outlook-screenshot.js] Screenshot saved to: ${screenshotPath}`, { fileName: 'outlook-screenshot.js' });
        
        // Disconnect from puppeteer (this doesn't close Chrome)
        await browser.disconnect();
        
        // Kill Chrome using chrome-launcher
        await chrome.kill();
        logger.info('[outlook-screenshot.js] Chrome closed.', { fileName: 'outlook-screenshot.js' });
        
      })();
    });

  } catch (err) {
    logger.error('[outlook-screenshot.js] Error occurred', { error: err.message, stack: err.stack, fileName: 'outlook-screenshot.js' });
    process.exit(1);
  }
})();
Mon, 12 May 2025 14:02:49 GMT LH:ChromeLauncher Waiting for browser.................................................................................
Mon, 12 May 2025 14:02:50 GMT LH:ChromeLauncher Waiting for browser...................................................................................
Mon, 12 May 2025 14:02:50 GMT LH:ChromeLauncher Waiting for browser.....................................................................................
Mon, 12 May 2025 14:02:51 GMT LH:ChromeLauncher Waiting for browser.......................................................................................
Mon, 12 May 2025 14:02:51 GMT LH:ChromeLauncher Waiting for browser.........................................................................................
Mon, 12 May 2025 14:02:52 GMT LH:ChromeLauncher Waiting for browser...........................................................................................
Mon, 12 May 2025 14:02:52 GMT LH:ChromeLauncher Waiting for browser.............................................................................................
Mon, 12 May 2025 14:02:53 GMT LH:ChromeLauncher Waiting for browser...............................................................................................
Mon, 12 May 2025 14:02:53 GMT LH:ChromeLauncher Waiting for browser.................................................................................................
Mon, 12 May 2025 14:02:54 GMT LH:ChromeLauncher Waiting for browser...................................................................................................
Mon, 12 May 2025 14:02:54 GMT LH:ChromeLauncher Waiting for browser.....................................................................................................
Mon, 12 May 2025 14:02:55 GMT LH:ChromeLauncher Waiting for browser.......................................................................................................
Mon, 12 May 2025 14:02:55 GMT LH:ChromeLauncher:error connect ECONNREFUSED 127.0.0.1:19874
Mon, 12 May 2025 14:02:55 GMT LH:ChromeLauncher:error Logging contents of C:\Users\idrees.khan1\AppData\Local\Google\Chrome\User Data/chrome-err.log
Mon, 12 May 2025 14:02:55 GMT LH:ChromeLauncher:error
node:internal/process/promises:391
    triggerUncaughtException(err, true /* fromPromise */);
    ^

Error: connect ECONNREFUSED 127.0.0.1:19874
    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1607:16) {
  errno: -4078,
  code: 'ECONNREFUSED',
  syscall: 'connect',
  address: '127.0.0.1',
  port: 19874
}

Node.js v20.18.0

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions