python - 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)
解决方案
推荐阅读
- python - PySimleGUI 如何将元素彼此相邻放置,以使它们之间没有空间?
- github - Nextjs 使用 github 操作自动部署到 cpanel
- reactjs - React.js,如何在保持其他属性不变的同时更改地图内对象的一个属性?
- html - CSS - 添加选择下拉选项宽度环绕和滚动
- makefile - GNU 不对丢失的虚假目标发出任何消息
- javascript - 直接变异状态是不好的。创建副本太耗费资源。该怎么办?
- verilog - 在 Verilog 的 for 循环中使用递归赋值
- javascript - Bootstrap 5 Popover 错误 - 找不到名称“bootstrap”
- matplotlib - 如何在使用 matplotlib 创建的箱线图中分散异常值?
- git - 从 git clone 到 git pull