Home:ALL Converter>Recaptcha Solving With Python In Selenium Chrome Session (2Captcha)

Recaptcha Solving With Python In Selenium Chrome Session (2Captcha)

Ask Time:2018-07-11T17:23:24         Author:Romano

Json Formatter

I want to resolve ReCaptcha on websites via Python with the Selenium module.

My question is: How can I send a 2Captcha request from within the Selenium Chrome Browser, that resolves the ReCaptcha and validates the successful outcome within the selenium chrome page?

I want the script to click on the submit button after it is resolved so I can continue my Selenium script.

The code below successfully resolve the ReCaptcha but that is outside Selenium.

import requests
from time import sleep

# Add these values
API_KEY = 'FILLINAPIKEYHERE'  # Your 2captcha API KEY
site_key = 'FILLINTHEPAGE'SRECAPTCHAKEYHERE'  # site-key, read the 2captcha docs on how to get this
url = 'THEWEBPAGETHATNEEDSRESOLVEMENT'  # example url
proxy = 'PROXY:PORTINHERE'  # example proxy

proxy = {'http': 'http://' + proxy, 'https': 'https://' + proxy}

s = requests.Session()

# here we post site key to 2captcha to get captcha ID (and we parse it here too)
captcha_id = s.post("http://2captcha.com/in.php?key={}&method=userrecaptcha&googlekey={}&pageurl={}".format(API_KEY, site_key, url), proxies=proxy).text.split('|')[1]
# then we parse gresponse from 2captcha response
recaptcha_answer = s.get("http://2captcha.com/res.php?key={}&action=get&id={}".format(API_KEY, captcha_id), proxies=proxy).text
print("solving ref captcha...")
while 'CAPCHA_NOT_READY' in recaptcha_answer:
    sleep(5)
    recaptcha_answer = s.get("http://2captcha.com/res.php?key={}&action=get&id={}".format(API_KEY, captcha_id), proxies=proxy).text
recaptcha_answer = recaptcha_answer.split('|')[1]

# we make the payload for the post data here, use something like mitmproxy or fiddler to see what is needed
payload = {
    'key': 'value',
    'gresponse': recaptcha_answer  # This is the response from 2captcha, which is needed for the post request to go through.
    }


# then send the post request to the url
response = s.post(url, payload, proxies=proxy)

# And that's all there is to it other than scraping data from the website, which is dynamic for every website.

Author:Romano,eproduced under the CC 4.0 BY-SA copyright license with a link to the original source and this disclaimer.
Link to original article:https://stackoverflow.com/questions/51281805/recaptcha-solving-with-python-in-selenium-chrome-session-2captcha
yy