fix: 添加代理日志输出并重构reCAPTCHA任务的异常处理逻辑

This commit is contained in:
晓丰 2025-05-31 05:45:03 +08:00
parent aa302bdb58
commit a20d49a0e2

71
onoe.py
View File

@ -221,6 +221,7 @@ def gettoken(proxy, r=2):
}
try:
proxy_str = db.get_proxy(proxy)
logger.info(f"[代理] => {proxy_str}")
url = 'https://graphql.api.dailymotion.com/oauth/token'
response = requests.post(url, headers=headers, data=data, proxies={"http": proxy_str, "https": proxy_str})
token = response.json()['access_token']
@ -262,43 +263,43 @@ def solve_recaptcha_v3_with_proxy(
last_error = None
for attempt in range(1, max_task_retries + 1):
# try:
encoded_query = quote(keyword, safe="")
payload = {
"clientKey": "CAP-A76C932D4C6CCB3CA748F77FDC07D996",
"task": {
"type": "ReCaptchaV3TaskProxyLess",
"websiteURL": f"https://www.dailymotion.com/search/{encoded_query}/top-results",
"websiteKey": "6LeOJBIrAAAAAPMIjyYvo-eN_9W1HDOkrEqHR8tM",
"pageAction": "search",
"minScore": 0.5
try:
encoded_query = quote(keyword, safe="")
payload = {
"clientKey": "CAP-A76C932D4C6CCB3CA748F77FDC07D996",
"task": {
"type": "ReCaptchaV3TaskProxyLess",
"websiteURL": f"https://www.dailymotion.com/search/{encoded_query}/top-results",
"websiteKey": "6LeOJBIrAAAAAPMIjyYvo-eN_9W1HDOkrEqHR8tM",
"pageAction": "search",
"minScore": 0.5
}
}
}
resp = requests.post(create_url, data=json.dumps(payload), headers=headers, timeout=30)
logger.info(f"[token] 发送 payload:{payload}")
resp.raise_for_status()
task_id = resp.json()["taskId"]
logger.info(f"task_id: {resp.text}")
# 轮询获取结果
check_payload = {"clientKey": "CAP-A76C932D4C6CCB3CA748F77FDC07D996", "taskId": task_id}
for i in range(max_poll_attempts):
r = requests.post(result_url, json=check_payload, headers=headers, timeout=10)
r.raise_for_status()
result = r.json()
logger.info(f"{i}次,task_id:{task_id},结果:{result}")
if result.get("status") == "ready":
return result["solution"]["gRecaptchaResponse"]
time.sleep(polling_interval)
resp = requests.post(create_url, data=json.dumps(payload), headers=headers, timeout=30)
logger.info(f"[token] 发送 payload:{payload}")
resp.raise_for_status()
task_id = resp.json()["taskId"]
logger.info(f"task_id: {resp.text}")
# 轮询获取结果
check_payload = {"clientKey": "CAP-A76C932D4C6CCB3CA748F77FDC07D996", "taskId": task_id}
for i in range(max_poll_attempts):
r = requests.post(result_url, json=check_payload, headers=headers, timeout=10)
r.raise_for_status()
result = r.json()
logger.info(f"{i}次,task_id:{task_id},结果:{result}")
if result.get("status") == "ready":
return result["solution"]["gRecaptchaResponse"]
time.sleep(polling_interval)
# raise TimeoutError(f"任务 {task_id} 在轮询 {max_poll_attempts} 次后未完成")
#
# except Exception as e:
# last_error = e
# if attempt < max_task_retries:
# time.sleep(2)
# continue
# else:
# break
raise TimeoutError(f"任务 {task_id} 在轮询 {max_poll_attempts} 次后未完成")
except Exception as e:
last_error = e
if attempt < max_task_retries:
time.sleep(2)
continue
else:
break
raise Exception(f"创建或获取 reCAPTCHA v3 token 失败: {last_error}")