Fix FirstEnergy cookie popup and PeoplesGas navigation timeout

This commit is contained in:
Deep Koluguri 2026-06-28 21:19:25 -04:00
parent f136001d1b
commit e7fab245fe
1 changed files with 24 additions and 13 deletions

View File

@ -26,23 +26,37 @@ async function runScrapers(credentials) {
// Use networkidle2 so we wait for any Javascript redirects or B2C login loads // Use networkidle2 so we wait for any Javascript redirects or B2C login loads
await page.goto('https://www.firstenergycorp.com/content/customer/log_in.html', { waitUntil: 'networkidle2', timeout: 60000 }); await page.goto('https://www.firstenergycorp.com/content/customer/log_in.html', { waitUntil: 'networkidle2', timeout: 60000 });
// Try to extract the direct URL instead of clicking, which is much more reliable // Dismiss cookie modal if present
await page.waitForSelector('a[href*="b2clogin.firstenergycorp.com"]', { timeout: 10000 }).catch(()=>null); try {
const b2cUrl = await page.evaluate(() => { for (const frame of page.frames()) {
const loginBtn = document.querySelector('a[href*="b2clogin"]'); if (frame.url().includes('usercentrics')) {
return loginBtn ? loginBtn.href : null; await frame.evaluate(() => {
const btns = Array.from(document.querySelectorAll('button'));
const accept = btns.find(b => b.innerText && b.innerText.toUpperCase().includes('ACCEPT ALL'));
if (accept) accept.click();
});
}
}
} catch(e) {}
await new Promise(r => setTimeout(r, 2000));
// Force click the 'Log In' button by text
await page.evaluate(() => {
const els = Array.from(document.querySelectorAll('a, button, div.btn'));
// search backwards to find the most specific inner element
const loginBtn = els.reverse().find(e => e.innerText && e.innerText.trim() === 'Log In');
if (loginBtn) loginBtn.click();
}); });
if (b2cUrl) { // Wait for B2C navigation
await page.goto(b2cUrl, { waitUntil: 'networkidle2', timeout: 60000 }); await new Promise(r => setTimeout(r, 5000));
}
await page.waitForSelector('#signInName, input[name="signInName"], #username, input[name="username"]', { timeout: 30000 }); await page.waitForSelector('#signInName, input[name="signInName"], #username, input[name="username"]', { timeout: 30000 });
await page.type('#signInName, input[name="signInName"], #username, input[name="username"]', credentials.firstEnergy.username); await page.type('#signInName, input[name="signInName"], #username, input[name="username"]', credentials.firstEnergy.username);
await page.type('#password, input[name="password"]', credentials.firstEnergy.password); await page.type('#password, input[name="password"]', credentials.firstEnergy.password);
await Promise.all([ await Promise.all([
page.waitForNavigation({ waitUntil: 'networkidle2', timeout: 60000 }).catch(()=>null), page.waitForNavigation({ waitUntil: 'domcontentloaded', timeout: 30000 }).catch(()=>null),
page.click('#next, button[type="submit"]') page.click('#next, button[type="submit"]')
]); ]);
@ -71,10 +85,7 @@ async function runScrapers(credentials) {
await page.type('#txtLogin, input[name="txtLogin"]', credentials.peoplesGas.username); await page.type('#txtLogin, input[name="txtLogin"]', credentials.peoplesGas.username);
await page.type('#txtpwd, input[name="txtpwd"]', credentials.peoplesGas.password); await page.type('#txtpwd, input[name="txtpwd"]', credentials.peoplesGas.password);
await Promise.all([ await page.click('#btnlogin');
page.waitForNavigation({ waitUntil: 'domcontentloaded', timeout: 60000 }),
page.click('#btnlogin')
]);
console.log('[Scraper] Logged into Peoples Gas. Extracting usage...'); console.log('[Scraper] Logged into Peoples Gas. Extracting usage...');
await page.waitForSelector('.ccf-usage', { timeout: 10000 }); await page.waitForSelector('.ccf-usage', { timeout: 10000 });