将 hcaptcha 验证码令牌提交到 Discord 以使用 selenium 创建帐户

问题描述

我正在使用 python selenium 创建一个 discord 帐户 (https://discord.com/register),但它受到 hcaptcha 的保护。我有一个验证码 API (2captcha/capmonster) 来返回验证码令牌并将其放入 g-captcha-response textarea。通常有一个提交按钮,您可以在之后单击该按钮,然后您就可以访问该站点(如果验证码令牌正确),但是一旦您手动完成 hcaptcha,discord 会自动重定向您。我假设 discord 正在使用 hcaptcha 回调函数。但是我没有找到回调函数,所以我可以在输入验证码令牌后调用它。

这是我到目前为止的代码

import random
import requests
import time
from webdriver_manager.chrome import ChromeDriverManager
from selenium import webdriver
from selenium.webdriver.support.ui import webdriverwait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys


email = "example@gmail.com"
username = "exampleusername"
password = "examplepassword"

driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get('https://discord.com/register')
webdriverwait(driver,1).until(EC.presence_of_element_located((By.XPATH,"//input[@type='email']")))
driver.find_element_by_xpath("//input[@type='email']").send_keys(email) # email
driver.find_element_by_xpath("//input[@type='text']").send_keys(username) # username
driver.find_element_by_xpath("//input[@type='password']").send_keys(password) # password
driver.find_element_by_xpath('//*[@id="app-mount"]/div[2]/div/div[2]/div/form/div/div[2]/div[4]/div[1]/div[1]/div/div/div/div/div[2]/div').click()

actions = ActionChains(driver)
actions.send_keys(str(random.randint(1,12))) # Month
actions.send_keys(Keys.ENTER)
actions.send_keys(str(random.randint(1,28))) # Day
actions.send_keys(Keys.ENTER)
actions.send_keys(str(random.randint(1989,2000))) # Year
actions.perform()

try:
    driver.find_element_by_class_name('inputDefault-3JxKJ2').click()  # Agree to terms and conditions
except:
    pass
driver.find_element_by_class_name('button-3k0cO7').click()  # Submit button


# get captcha key
site_key = 'f5561ba9-8f1e-40ca-9b5b-a0b3f719ef34'
url = "https://discordapp.com/register"
API_KEY = "CAPMONSTER API KEY"
s = requests.Session()
data_post = {
    "clientKey": API_KEY,"task":
        {
            "type": "HCaptchaTaskProxyless","websiteURL": url,"websiteKey": site_key
        }
}
captcha_id = s.post("https://api.capmonster.cloud/createTask",json=data_post).json()
data_get = {
    "clientKey": API_KEY,"taskId": captcha_id['taskId']
}
captcha_answer = s.get("https://api.capmonster.cloud/getTaskResult",json=data_get).json()
while captcha_answer['status'] == "processing":
    time.sleep(5)
    captcha_answer = s.get("https://api.capmonster.cloud/getTaskResult",json=data_get).json()
captcha_token = captcha_answer["solution"]["gRecaptchaResponse"]
driver.execute_script(f'document.getElementsByName("g-recaptcha-response")[0].innerText="{captcha_token}";') # put captcha token into g-recaptcha-response textarea
driver.execute_script(f'document.getElementsByName("h-captcha-response")[0].innerText="{captcha_token}";')

# code to submit captcha token

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)