diff --git a/epic-games.js b/epic-games.js index 7140ada..6f58269 100644 --- a/epic-games.js +++ b/epic-games.js @@ -1,6 +1,8 @@ //@ts-check const { chromium } = require('playwright'); // stealth plugin needs no outdated playwright-extra const path = require('path'); +const { stealth } = require('./util.js'); + const debug = process.env.PWDEBUG == '1'; // runs non-headless and opens https://playwright.dev/docs/inspector const URL_LOGIN = 'https://www.epicgames.com/login'; @@ -25,39 +27,10 @@ const TIMEOUT = 20 * 1000; // 20s, default is 30s // Without stealth plugin, the website shows an hcaptcha on login with username/password and in the last step of claiming a game. It may have other heuristics like unsuccessful logins as well. After <6h (TBD) it resets to no captcha again. Getting a new IP also resets. // stealth with playwright: https://github.com/berstend/puppeteer-extra/issues/454#issuecomment-917437212 // https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth/evasions - const enabledEvasions = [ - 'chrome.app', - 'chrome.csi', - 'chrome.loadTimes', - 'chrome.runtime', - // 'defaultArgs', - 'iframe.contentWindow', - 'media.codecs', - 'navigator.hardwareConcurrency', - 'navigator.languages', - 'navigator.permissions', - 'navigator.plugins', - // 'navigator.vendor', - 'navigator.webdriver', - 'sourceurl', - // 'user-agent-override', // doesn't work since playwright has no page.browser() - 'webgl.vendor', - 'window.outerdimensions' - ]; - const evasions = enabledEvasions.map(e => require(`puppeteer-extra-plugin-stealth/evasions/${e}`)); - const stealth = { - callbacks: [], - async evaluateOnNewDocument(...args) { - this.callbacks.push({ cb: args[0], a: args[1] }) - } - } - evasions.forEach(e => e().onPageCreated(stealth)); - for (let evasion of stealth.callbacks) { - await context.addInitScript(evasion.cb, evasion.a); - } - // end stealth setup + await stealth(context); if (!debug) context.setDefaultTimeout(TIMEOUT); + const page = context.pages().length ? context.pages()[0] : await context.newPage(); // should always exist console.log('userAgent:', await page.evaluate(() => navigator.userAgent)); diff --git a/prime-gaming.js b/prime-gaming.js index 6e1113a..6f09196 100644 --- a/prime-gaming.js +++ b/prime-gaming.js @@ -1,6 +1,8 @@ //@ts-check const { chromium } = require('playwright'); // stealth plugin needs no outdated playwright-extra const path = require('path'); +const { stealth } = require('./util.js'); + const debug = process.env.PWDEBUG == '1'; // runs headful and opens https://playwright.dev/docs/inspector // const URL_LOGIN = 'https://www.amazon.de/ap/signin'; // wrong. needs some session args to be valid? @@ -18,41 +20,11 @@ const TIMEOUT = 20 * 1000; // 20s, default is 30s locale: "en-US", // ignore OS locale to be sure to have english text for locators }); - // stealth with playwright: https://github.com/berstend/puppeteer-extra/issues/454#issuecomment-917437212 - // https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth/evasions - const enabledEvasions = [ - 'chrome.app', - 'chrome.csi', - 'chrome.loadTimes', - 'chrome.runtime', - // 'defaultArgs', - 'iframe.contentWindow', - 'media.codecs', - 'navigator.hardwareConcurrency', - 'navigator.languages', - 'navigator.permissions', - 'navigator.plugins', - // 'navigator.vendor', - 'navigator.webdriver', - 'sourceurl', - // 'user-agent-override', // doesn't work since playwright has no page.browser() - 'webgl.vendor', - 'window.outerdimensions' - ]; - const evasions = enabledEvasions.map(e => require(`puppeteer-extra-plugin-stealth/evasions/${e}`)); - const stealth = { - callbacks: [], - async evaluateOnNewDocument(...args) { - this.callbacks.push({ cb: args[0], a: args[1] }) - } - } - evasions.forEach(e => e().onPageCreated(stealth)); - for (let evasion of stealth.callbacks) { - await context.addInitScript(evasion.cb, evasion.a); - } - // end stealth setup + // TODO test if needed + await stealth(context); if (!debug) context.setDefaultTimeout(TIMEOUT); + // const page = /* context.pages().length ? context.pages[0] : */ await context.newPage(); const page = context.pages()[0]; console.log('userAgent:', await page.evaluate(() => navigator.userAgent)); diff --git a/util.js b/util.js index 5f2e302..7885fb0 100644 --- a/util.js +++ b/util.js @@ -12,3 +12,40 @@ const newStealthContext = async (browser, contextOptions = {}) => { }; } }; + +const stealth = async (context) => { + // stealth with playwright: https://github.com/berstend/puppeteer-extra/issues/454#issuecomment-917437212 + // https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth/evasions + const enabledEvasions = [ + 'chrome.app', + 'chrome.csi', + 'chrome.loadTimes', + 'chrome.runtime', + // 'defaultArgs', + 'iframe.contentWindow', + 'media.codecs', + 'navigator.hardwareConcurrency', + 'navigator.languages', + 'navigator.permissions', + 'navigator.plugins', + // 'navigator.vendor', + 'navigator.webdriver', + 'sourceurl', + // 'user-agent-override', // doesn't work since playwright has no page.browser() + 'webgl.vendor', + 'window.outerdimensions' + ]; + const evasions = enabledEvasions.map(e => require(`puppeteer-extra-plugin-stealth/evasions/${e}`)); + const stealth = { + callbacks: [], + async evaluateOnNewDocument(...args) { + this.callbacks.push({ cb: args[0], a: args[1] }) + } + } + evasions.forEach(e => e().onPageCreated(stealth)); + for (let evasion of stealth.callbacks) { + await context.addInitScript(evasion.cb, evasion.a); + } +} + +module.exports = { stealth };