Модуль запросов Python не может получить URL после проверки - PullRequest
0 голосов
/ 15 марта 2019

Работа по сбору данных с веб-сайта Национального сексуального преступника (https://www.nsopw.gov/en-US/Search/Verification), который требует проверки перед выполнением поиска. Я использую модуль requests для связи со сторонним API для решения reCAPTCHA, который в настоящее время работает.

Переменная payload содержит, как мне кажется, обязательные поля для проверки, но, возможно, я что-то упустил, так как я, правда, не мастер заголовков / форм / и т.д.

Проблема в том, что когда я get на странице поиска, возвращаемый URL все еще остается страницей подтверждения. Что мне не хватает? Нужно ли использовать что-то вроде mechanize для отправки формы?

import requests

API_KEY = '*****'  # Hidden API key
site_key = '6Lf3ew4UAAAAAFlPnGmxOJZjjZHSZBuHDIE0yidt' # g-site-key
url = 'https://www.nsopw.gov/en-US/Search/Verification' # verification url

# ========== Lines 7 - 20 solve and return the recaptcha value ========== #
s = requests.Session()

captcha_id = s.post("http://2captcha.com/in.php?key={}&method=userrecaptcha&googlekey={}&pageurl={}".format(API_KEY, site_key, url)).text.split('|')[1]
recaptcha_answer = s.get("http://2captcha.com/res.php?key={}&action=get&id={}".format(API_KEY, captcha_id)).text

print("Solving reCAPTCHA...")
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)).text

print('reCAPTCHA solved!')

recaptcha_answer = recaptcha_answer.split('|')[1]

# ========== Lines 23 - 29 attempt to submit the form data to get to the search URL. The g-recaptcha-response value is used here. ========== #
headers = { 'user-agent': 'Mozilla/5.0 Chrome/52.0.2743.116 Safari/537.36'} 
payload = { 'acceptTerms': 'true', 'acceptTerms': 'false', 'g-recaptcha-response': recaptcha_answer }

response = s.post(url, headers=headers, data=payload)

search = s.get("https://www.nsopw.gov/en-us/search/")
print (search.url) # Would expect the search url to print but doesn't work :(. Prints the verification page (https://www.nsopw.gov/en-us/search/verification/)
...