Last active
June 13, 2021 11:08
-
-
Save prescience-data/b99cd8d77a70ccdd5e5882d19fc959bf to your computer and use it in GitHub Desktop.
recaptcha demo
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import puppeteer from "puppeteer-extra" | |
import recaptcha from "puppeteer-extra-plugin-recaptcha" | |
/** | |
* Install the Recaptcha Plugin | |
*/ | |
puppeteer.use( | |
recaptcha({ | |
provider: { | |
id: "2captcha", | |
token: "<API-KEY>" | |
}, | |
visualFeedback: true | |
}) | |
) | |
/** | |
* Utility function for user agent string generation (not amazing, but fit for demo). | |
* | |
* @param version | |
* @return {string} | |
*/ | |
const makeUserAgentString = (version) => | |
`Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${version} Safari/537.36` | |
/** | |
* Generates a nickname based on provided given name. | |
* | |
* @param name | |
* @return {`${string}-${number}`} | |
*/ | |
const makeNickname = (name) => | |
`${name.toLowerCase().replaceAll(" ", "")}-${ | |
Math.floor(Math.random() * 1000) + 1000 | |
}` | |
/** | |
* Primary entrypoint. | |
* Handles on page logic. | |
* | |
* @param browser | |
* @param {any} registrationUrl | |
* @param {any} givenName | |
* @param {any} familyName | |
* @return {Promise<void>} | |
*/ | |
const handleSignUp = async ( | |
browser, | |
{ registrationUrl, givenName, familyName } | |
) => { | |
// Instantiate a new page. | |
const page = await browser.newPage() | |
// Go to registration url. | |
await page.goto(registrationUrl) | |
// Do you weird sign up logic... | |
const mail = "aijurar".split(":") | |
await page.waitForTimeout(5000) | |
await page.type("input[autocomplete='given-name']", givenName) | |
await page.keyboard.press("Tab") | |
await page.keyboard.type(familyName, { delay: 8 }) | |
await page.type("input[autocomplete='nickname']", makeNickname(givenName)) | |
await page.type("input[aria-label='Email Address']", mail[0]) | |
await page.type("input[aria-label='Password']", mail[1]) | |
await page.tap("input[id='tos']") | |
await page.keyboard.press("Enter") | |
// Solve captchas. | |
await page.solveRecaptchas() | |
// Watch for repcatcha solution. | |
await Promise.all([ | |
page.waitForNavigation(), | |
page.click(`#recaptcha-demo-submit`) | |
]) | |
} | |
/** | |
* Run the inline method for testing. | |
* | |
* @return {Promise<void>} | |
*/ | |
;(async () => { | |
const params = { | |
registrationUrl: "<URL>", | |
givenName: "John", | |
familyName: "Smith" | |
} | |
const browser = puppeteer.launch({ | |
headless: false, | |
args: [ | |
`--disable-features=IsolateOrigins,site-per-process`, | |
`--flag-switches-begin`, | |
`--disable-site-isolation-trials`, | |
`--flag-switches-end`, | |
`--user-agent="${makeUserAgentString("<CURRENT CHROME VERSION>")}"` | |
] | |
}) | |
await handleSignUp(browser, params) | |
})() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment