首页 > 解决方案 > Python 请求使用 2Captcha 解析 eBay.de HCaptcha

问题描述

我希望有人可以帮助我解决 python requests/mechanicalsoup 和 2captcha API eBay.de HCaptcha。文档: https ://2captcha.com/de/p/hcaptcha

问题不在于 2captcha,它是来自 eBay 的问题。如果我发布请求,我会收到此错误:“b'CSRF_VALIDATION_ERR'”

如果您想尝试,API 密钥正在工作。

我的代码:

from twocaptcha import TwoCaptcha
import mechanicalsoup
import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))

user_agents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0"]
browser = mechanicalsoup.StatefulBrowser()
browser.set_user_agent(user_agents[0])

url = 'https://www.ebay.de/bin/purchaseHistory?item=233592905862&rt=nc&_trksid=p2047675.l2564'
res = browser.open(url)
form = res.soup.find('form', {'id': 'captcha_form'})

srt = form.find('input', {'name': 'srt'})['value']
ru = form.find('input', {'name': 'ru'})['value']
cptap = form.find('input', {'name': 'cptap'})['value']
appName = form.find('input', {'name': 'appName'})['value']
cptrdbpid = form.find('input', {'name': 'cptrdbpid'})['value']
iia = form.find('input', {'name': 'iia'})['value']
iiz = form.find('input', {'name': 'iiz'})['value']
iim = form.find('input', {'name': 'iim'})['value']

# browser.launch_browser()

api_key = os.getenv('APIKEY_2CAPTCHA', 'ad0d381411ecaf40977c8a18f719321e')
solver = TwoCaptcha(api_key)
try:
result = solver.hcaptcha(
sitekey=cptrdbpid,
url=url,
)

except Exception as e:
print('Not solved')

else:
print('solved: ' + str(result))

payload = {"srt": srt,
"ru": ru,
"cptap": cptap,
"appName": appName,
"cptrdbpid": cptrdbpid,
"iia": iia,
"iiz": iiz,
"iim": iim,
"g-recaptcha-response": result['code'],
"h-captcha-response": result['code'],
"captchaTokenInput": "%7B%22guid%22%3A%" + cptrdbpid + '22%22%2C%22provider%22%3A%22hcaptcha%22%2C%22appName%22%3A%22orch%22%2C%22token%22%3A%22' +
result['code'] + "%22%7D"
}

headers = {
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"accept-encoding": "gzip, deflate, br",
"accept-language": "de-DE,de;q=0.9",
"cache-control": "max-age=0",
"content-type": "application/x-www-form-urlencoded",
"origin": "https://www.ebay.de",
"referer": browser.url,
"sec-ch-ua": '"Google Chrome";v="95", "Chromium";v="95", ";Not A Brand";v="99"',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": "Windows",
"sec-fetch-dest": "document",
"sec-fetch-mode": "navigate",
"sec-fetch-site": "same-origin",
"sec-fetch-user": "?1",
"upgrade-insecure-requests": "1"}
res = browser.post('https://www.ebay.de/splashui/captcha_submit', json=payload, allow_redirects=True, timeout=15, headers=headers)

标签: pythonweb-scrapingpython-requests

解决方案


首先,您可以尝试通过浏览器手动浏览它并收到此错误。我在以下情况下收到此错误:

  1. 会话已过期
  2. 数据不正确 在此处输入图像描述

在您的情况下,您需要传递 cookie 和正确的验证码令牌输入

使用正确的 guid 在此处输入图像描述


推荐阅读