Skip to content

Instantly share code, notes, and snippets.

@prescience-data
Last active June 13, 2021 11:08
Show Gist options
  • Save prescience-data/b99cd8d77a70ccdd5e5882d19fc959bf to your computer and use it in GitHub Desktop.
Save prescience-data/b99cd8d77a70ccdd5e5882d19fc959bf to your computer and use it in GitHub Desktop.
recaptcha demo
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