Skip to content

Instantly share code, notes, and snippets.

@ad-m
Created June 21, 2020 09:28
Show Gist options
  • Save ad-m/6bc906575a7926de91fe1c0d69bb3910 to your computer and use it in GitHub Desktop.
Save ad-m/6bc906575a7926de91fe1c0d69bb3910 to your computer and use it in GitHub Desktop.
import re
import time
import os
from os import environ
import gzip
from python_anticaptcha import AnticaptchaClient, NoCaptchaTaskProxylessTask
api_key = environ["KEY"]
site_key_pattern = "RECAPTCHA_PUBLIC_KEY = '(.+?)'"
url = "https://securitytrails.com/list/apex_domain/reddit.com"
DIR = os.path.dirname(os.path.abspath(__file__))
EXPECTED_RESULT = 'nnm.reddit.com'
client = AnticaptchaClient(api_key)
wrapper_code = open(os.path.join(DIR, 'callback_sniffer.js'), 'rb').read()
def get_token(url, site_key):
task = NoCaptchaTaskProxylessTask(
website_url=url, website_key=site_key
)
job = client.createTask(task)
job.join(maximum_time=60 * 15)
return job.get_solution_response()
def process(driver):
driver.get(url)
site_key = get_sitekey(driver)
print("Found site-key", site_key)
token = get_token(url, site_key)
print("Found token", token)
form_submit(driver, token)
time.sleep(15)
return driver.page_source
def form_submit(driver, token):
driver.execute_script(
"document.getElementById('g-recaptcha-response').innerHTML='{}';".format(token)
)
driver.execute_script("window.recaptchaCallback[0]('{}')".format(token))
time.sleep(1)
def get_sitekey(driver):
return re.search(site_key_pattern, driver.page_source).group(1)
if __name__ == "__main__":
from seleniumwire import webdriver # Import from seleniumwire
def custom(req, req_body, res, res_body):
if not req.path or not 'recaptcha' in req.path:
return
if not res.headers.get('Content-Type', None) == 'text/javascript':
return
if res.headers['Content-Encoding'] == 'gzip':
del res.headers['Content-Encoding']
res_body = gzip.decompress(res_body)
return res_body + wrapper_code
driver = webdriver.Firefox(seleniumwire_options={
'custom_response_handler': custom
})
try:
assert EXPECTED_RESULT in process(driver)
finally:
driver.close()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment