im trying to solve a recaptcha from a website im trying to scrape
usually the way it works is , captcha is inside a form , i’ll send the captcha data to a solving captcha api (im using DBC) , they return a token
i put the token inside captcha input (#g-recaptcha-response)
and even tho the green check doesn’t show up when i submit the form it will get accepted
but this website automatically shows the information i want to scrape as soon as captcha is solved in another way when the green check of captcha shows up , the page get updated with new information
so my question is when i put the token inside captcha input is there any way to trigger captcha solved event (or whatever happens when green check shows up .. im guessing some sort of callback ) without submitting the form ?
edit :
by exploring recaptcha configuration exploring i found this
___grecaptcha_cfg.clients[0].L.L.callback
which points to this
function verifyCallback(e)
but im not sure how to invoke it
async function init_puppeteer() { const global_browser = await puppeteer.launch({headless: false , slowMo : 10 , args: ['--no-sandbox', '--disable-setuid-sandbox' , ]}); const page = await global_browser.newPage(); await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'); await page.setViewport({width: 1200, height: 1500}); try { await page.goto('https://example.com', {timeout: 60000}) .catch(function (error) { throw new Error('TimeoutBrows'); }); await page.waitForSelector('input[name="url"]'); await page.type('input[name="url"]', 'example.com' , {delay: 10}) await page.click('button.css-117i75i-button'); await page.waitForSelector('#g-recaptcha' ,{visible : true }); const datakey = await page.$eval('#g-recaptcha' , el => el.getAttribute('data-sitekey')); const cap = await solvecaptcha(datakey ,page.url() ); await page.$eval('#g-recaptcha-response', (el , cap ) => el.value = cap , cap ); console.log('done!'); } catch(e) { console.log('--------ERRRO--------------------------'); console.log(e); await page.close(); } }
Advertisement
Answer
i found the answer , just in case anyone has this problem just in your browser console play with this object ___grecaptcha_cfg
to find the callback mine was here
___grecaptcha_cfg.clients[0].L.L.callback
but it can have different structure for other websites
so basically after i recived the token and put it in the #g-recaptcha-response` i called this function and passed the token as argument
let js = `___grecaptcha_cfg.clients[0].L.L.callback("${cap}")`; await page.evaluate(js);