PyDatadome is a library to help you solve ReCaptcha based datadome. This library currently does not work with sites using funcaptcha/geetest, only ReCaptcha.
Use pip to install directly from github.
pip install git+https://github.com/66niko99/PyDatadome.git
Pass a function that that returns a ReCaptcha token. You have to create this yourself. It should be be wrapped with lambda or without braces.
The UserAgent your request client is using.
This is probably the only method you will need from this library. It converts a request response into a /check
URL. Make a /GET
request to this URL and it will return a datadome cookie if everything worked.
Here is an example of successful usage:
ddHandler = DatadomeHandler(captchaTokenFunction=getCaptchaToken, userAgent=user_agent)
req = requests.get('https://www.example.com')
checkURL = ddHandler.handleRequest(request=req, datadomeCookie=req.cookies.get('datadome'))
checkDD = requests.get(checkURL)
print(checkDD.text) # {"cookie":"datadome=CBhqno..."}
*other methods are probably useless to you and are self explanitory. i dont want to write anymore docs.
Needs to be an http request (requests.post, requests.get, etc). It will return True if the request is a Datadome response, False otherwise
import requests
from PyDatadome import DatadomeHandler, isRequestDatadome
# replace this function with your own recaptcha token function
def getCaptchaToken():
return 'recaptcha token'
# creating request session
s = requests.session()
user_agent = 'Mozilla/5.0'
s.headers.update({'User-Agent': user_agent})
# creating datadome handler object, you must have a function that returns recaptcha tokens
ddHandler = DatadomeHandler(captchaTokenFunction=getCaptchaToken, userAgent=user_agent)
# make an http request to a datadome protected site
req = s.post('https://www.example.com', data={'username': 'joe', 'password': 'bob'})
# checking if the request response is a datadome block
if isRequestDatadome(req):
# shiver me timbers! datadome! simply pass the request and datadome cookie to your datadome handler, and it
# returns a valid /check endpoint.
datadomeEndpoint = ddHandler.handleRequest(request=req, datadomeCookie=s.cookies.get('datadome'))
# make a GET request to the endpoint and the response will be a new datadome cookie!
# note that if your recaptcha response was invalid, this will give you a 403/404 error or a blank page
checkDatadome = s.get(datadomeEndpoint)
# checking if endpoint was valid
if checkDatadome.status_code == 200:
# parse the response for a new cookie, then update your request clients cookies
newCookie = checkDatadome.json()['cookie'].split(';')[0].replace('datadome=', '')
s.cookies.set(name='datadome', value=newCookie)
else:
print('Error solving datadome')
# continue making requests in peace
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.