Работа по сбору данных с веб-сайта Национального сексуального преступника (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/)