Skip to content

Commit

Permalink
main.captcha.js: try beta of playwright-extra recaptcha, but fails on…
Browse files Browse the repository at this point in the history
… selectors

page.click: Evaluation failed: DOMException: Failed to execute 'querySelectorAll' on 'Document': 'button:has-text("Continue")' is not a valid selector.
  • Loading branch information
vogler committed Dec 27, 2021
1 parent c1393e9 commit d44d84b
Show file tree
Hide file tree
Showing 5 changed files with 1,563 additions and 12 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
node_modules/
auth.json
.env
47 changes: 47 additions & 0 deletions main.captcha.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
const { existsSync } = require('fs');
if (!existsSync('auth.json')) {
console.error('Missing auth.json! Run `npm login` to login and create this file by closing the opened browser.');
}

const { chromium } = require('playwright-extra')

// add recaptcha plugin and provide it your 2captcha token (= their apiKey)
// Please note: You need to add funds to your 2captcha account for this to work
// https://2captcha.com?from=13225256
const RecaptchaPlugin = require('@extra/recaptcha')
const RecaptchaOptions = {
visualFeedback: true, // colorize reCAPTCHAs (violet = detected, green = solved)
provider: {
id: '2captcha',
token: process.env.API_KEY, // put your API_KEY=... in .env
},
}
chromium.use(RecaptchaPlugin(RecaptchaOptions));

(async () => {
const browser = await chromium.launch({
headless: false,
executablePath: 'node_modules/puppeteer/.local-chromium/mac-938248/chrome-mac/Chromium.app/Contents/MacOS/Chromium', // why does it fail without?
});
const context = await browser.newContext({
storageState: 'auth.json',
viewport: { width: 1280, height: 1280 },
});
const page = await context.newPage();
await page.goto('https://www.epicgames.com/store/en-US/free-games');
// await expect(page.locator('a[role="button"]:has-text("#")')).toHaveCount(0);
await page.click('button:has-text("Accept All Cookies")'); // to not waste screen space in --debug
await page.click('[data-testid="offer-card-image-landscape"]');
// TODO check if already claimed
await page.click('[data-testid="purchase-cta-button"]');
await page.click('button:has-text("Continue")');
// it then creates an iframe for the rest
// await page.frame({ url: /.*store\/purchase.*/ }).click('button:has-text("Place Order")'); // not found because it does not wait for iframe
const iframe = page.frameLocator('.webPurchaseContainer iframe')
await iframe.locator('button:has-text("Place Order")').click();
await iframe.locator('button:has-text("I Agree")').click();
// await page.pause();
await page.solveRecaptchas();
await context.close();
await browser.close();
})();
2 changes: 1 addition & 1 deletion main.spec.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { test, expect } from '@playwright/test';
import { test, expect } from '@playwright/test'; // only npm dep needed for this file
import { existsSync } from 'fs';

if (!existsSync('auth.json')) {
Expand Down
Loading

0 comments on commit d44d84b

Please # to comment.