diff --git a/epic-games.js b/epic-games.js index e64553f..93654e5 100644 --- a/epic-games.js +++ b/epic-games.js @@ -1,6 +1,6 @@ import { chromium } from 'playwright'; // stealth plugin needs no outdated playwright-extra import path from 'path'; -import { dirs, jsonDb, datetime, stealth } from './util.js'; +import { dirs, jsonDb, datetime, stealth, filenamify } from './util.js'; const debug = process.env.PWDEBUG == '1'; // runs non-headless and opens https://playwright.dev/docs/inspector @@ -112,7 +112,7 @@ try { console.log('Claimed successfully!'); } catch (e) { console.log(e); - const p = path.resolve(dirs.screenshots, 'epic-games', `${datetime().replaceAll(':', '.')}.png`); + const p = path.resolve(dirs.screenshots, 'epic-games', `${filenamify(datetime())}.png`); await page.screenshot({ path: p, fullPage: true }); console.info('Saved a screenshot of hcaptcha challenge to', p); console.error('Got hcaptcha challenge. To avoid it, get a link from https://www.hcaptcha.com/accessibility'); // TODO save this link in config and visit it daily to set accessibility cookie to avoid captcha challenge? diff --git a/prime-gaming.js b/prime-gaming.js index baa2b46..d30f6cf 100644 --- a/prime-gaming.js +++ b/prime-gaming.js @@ -1,6 +1,6 @@ import { chromium } from 'playwright'; // stealth plugin needs no outdated playwright-extra import path from 'path'; -import { dirs, jsonDb, datetime, sanitizeFilename, stealth } from './util.js'; +import { dirs, jsonDb, datetime, stealth, filenamify } from './util.js'; const debug = process.env.PWDEBUG == '1'; // runs headful and opens https://playwright.dev/docs/inspector const show = process.argv.includes('show', 2); @@ -77,7 +77,7 @@ try { console.log('Current free game:', title); // const img = await (await card.$('img.tw-image')).getAttribute('src'); // console.log('Image:', img); - const p = path.resolve(dirs.screenshots, 'prime-gaming', 'internal', `${sanitizeFilename(title)}.png`); + const p = path.resolve(dirs.screenshots, 'prime-gaming', 'internal', `${filenamify(title)}.png`); await card.screenshot({ path: p }); await (await card.$('button:has-text("Claim game")')).click(); db.data.claimed.push({ title, time: datetime(), store: 'internal' }); @@ -123,7 +123,7 @@ try { } db.data.claimed.push({ title, time: datetime(), store, code, url: page.url() }); // save screenshot of potential code just in case - const p = path.resolve(dirs.screenshots, 'prime-gaming', 'external', `${sanitizeFilename(title)}.png`); + const p = path.resolve(dirs.screenshots, 'prime-gaming', 'external', `${filenamify(title)}.png`); await page.screenshot({ path: p, fullPage: true }); console.info('Saved a screenshot of page to', p); run.c_external++; @@ -132,7 +132,7 @@ try { await page.goto(URL_CLAIM, {waitUntil: 'domcontentloaded'}); await page.click('button[data-type="Game"]'); } while (n); - const p = path.resolve(dirs.screenshots, 'prime-gaming', `${datetime().replaceAll(':', '.')}.png`); + const p = path.resolve(dirs.screenshots, 'prime-gaming', `${filenamify(datetime())}.png`); // await page.screenshot({ path: p, fullPage: true }); await page.locator(games_sel).screenshot({ path: p }); } catch(error) { diff --git a/util.js b/util.js index 266b7cc..1ac2deb 100644 --- a/util.js +++ b/util.js @@ -19,8 +19,8 @@ export const jsonDb = async file => { return db; } -export const datetime = (d = new Date()) => d.toISOString(); -export const sanitizeFilename = s => s.replace(/[^a-z0-9_\-]/gi, '_'); // alternative: https://www.npmjs.com/package/filenamify +export const datetime = (d = new Date()) => d.toISOString().replace('T', ' ').replace('Z', ''); +export const filenamify = s => s.replaceAll(':', '.').replace(/[^a-z0-9 _\-.]/gi, '_'); // alternative: https://www.npmjs.com/package/filenamify - On Unix-like systems, / is reserved. On Windows, <>:"/\|?* along with trailing periods are reserved. // stealth with playwright: https://github.com/berstend/puppeteer-extra/issues/454#issuecomment-917437212 const newStealthContext = async (browser, contextOptions = {}, debug = false) => {