Столкнувшись с проблемой решения капчи с помощью сервиса - PullRequest
0 голосов
/ 18 января 2020

Я хватаю ключ сайта, используя какой-то жестко закодированный метод, но, поскольку len всегда одинаков, все в порядке. После этого я использую документацию API 2captcha , так что я могу POST ключ и получить токен для капчи назад. Я сталкиваюсь с двумя основными проблемами: 1) Я всегда получаю неправильную ошибку ключа сайта, но sitekey является правильным в соответствии с их примером (их sitekey имеет длину 40 символов, а мои sitekeys тоже 40) 2) Я попытался создать функцию POST внешне и пробуя это, видя, что это ошибка, но используя документацию Py2Captcha , я всегда получаю следующую ошибку: enter image description here Это захват ключа капчи.

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Captcha Key~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
url=driver.find_element_by_css_selector("iframe[role='presentation']").get_attribute('src')
print(url)
keygoogle = url[53:93]
print('Site Key = ', keygoogle)

Это блок для определения ключа капчи:

answer = ""
answer_id = 0
api_key = '--------------------------------'
data_post = {'key': api_key, 'method': 'userrecaptcha', 'googlekey': keygoogle, "pageurl": mainurl}
response = requests.post(url = 'https://2captcha.com/in.php', data = data_post )
print(response)
print("Waiting for server response.")
for x in range(15):
    time.sleep(1)
    if x == 5:
        print('Downloading info..')
    elif x == 10:
        print('Processing info..')
    elif x == 14:
        print('Solving captcha..')
data_request = {
    'key': api_key,
    'action': answer,
    'id': answer_id,
}
requests.get(url ='https://2captcha.com/res.php', data=data_request)
print(answer)

def captcha():
    google_key = keygoogle
    url = mainurl
    client = TwoCaptchaClient(client_key=api_key)
    task = GoogleReCaptchaV2Task(googlekey=google_key, pageurl=mainurl)
    job = client.create_task(task)
    token = job.get_solution_response()
    return token
print(captcha())

То, что я не включил, это часть, где токен добавляется в поле ответа, я пока не уверен, как это сделать, но я сделаю это найти способ наверняка!

РЕДАКТИРОВАТЬ: Это значение, которое я получаю при печати этого: enter image description here

response = requests.post(url = 'https://2captcha.com/in.php', data = data_post )

И это это значение, которое я получаю из print('Site Key = ', keygoogle)

Ключ сайта = Lc3HAsUAAAAACsN7CgY9MMVxo2M09n_e4heJEiZ &

Ответы [ 2 ]

1 голос
/ 20 января 2020

Это мой способ получить правильный ключ:

    url=driver.find_element_by_css_selector("iframe[role='presentation']").get_attribute('src')
keygoogle = url[52:92]

И это моя функция POST:

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Captcha Solve~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
answer = ""
answer_id = 0
data_post = {'key': api_key, 'method': 'userrecaptcha', 'googlekey': keygoogle, "pageurl": mainurl}
response = requests.post(url = 'https://2captcha.com/in.php', data = data_post )
response = response.text[3:]
print("Waiting for server response.")
for x in range(30):
    time.sleep(1)
    if x == 8:
        print('Downloading info..')
    elif x == 15:
        print('Processing info..')
data_request = {'key': api_key,'id': int(response),'action': 'get'}
response = requests.get(url='https://2captcha.com/res.php', params=data_request)
token = response.text.split('|')[0]
while response.text == 'CAPCHA_NOT_READY':
    print('Waiting for Capcha..')
    time.sleep(5)
    response = requests.get(url='https://2captcha.com/res.php', params=data_request)
    token = response
print(token)

Спасибо за просмотр / ответ.

0 голосов
/ 20 января 2020

& в конце этого ключа сайта определенно не должно быть там. Используйте регулярные выражения вместо того, что вы делаете с индексами.

...