为什么此代码没有成功绕过验证码?



这是我的代码。我使用两个captcha,请求,bs4, fake_user_agent。代码应该使用请求在站点上注册。Post方法,但有些地方出了问题。此外,代码不输出错误,结果为200。但事实上,代码并没有履行它的职责。

import time
from twocaptcha import TwoCaptcha
import requests
from bs4 import BeautifulSoup
from fake_user_agent.main import user_agent
# Капча
config = {
'server':           'rucaptcha.com',
'apiKey':           'API',
'defaultTimeout':    120,
'recaptchaTimeout':  600,
'pollingInterval':   10,
}
solver = TwoCaptcha(**config)
print(solver.balance())
result = solver.recaptcha(sitekey='6LdTYk0UAAAAAGgiIwCu8pB3LveQ1TcLUPXBpjDh',
url='https://funpay.com/account/login',
param1=...)
result = result["code"]
print(result)
# Подменяем UserAgent
site = "https://funpay.com/account/login"
user = user_agent()
header = {
"user-agent": user
}
# Ищем csrf-token
r = requests.get(site)
soup = BeautifulSoup(r.text, "lxml")
csrf = soup.find("body").get("data-app-data").split('"')[3]
print(csrf)
# Ключи
data = {
"login": login,
"password": pasword,
"csrf_token": csrf,
"g-recaptcha-response": result
}
print(data)
link = "https://funpay.com/chat/"
session = requests.Session()
session.headers = header
session.get(site)
responce = session.post(url=link, data=data, headers=header)
print(responce.text)
# Парсинг
link = "https://funpay.com/chat/"
k = session.get(link, headers=header).text

很难给你一个100%的答案,因为网站如何处理从时间到csrf生成的所有事情,以及您无法真正测试以查看recaptcha响应是否正确的事实,这些都可能是一个因素。说,我怀疑,如果这个网站并不是那么慢,花30秒后一分钟recaptcha是解决为你提交表单,问题可能是你之前多次调用无状态请求实例初始化会话对象。这很容易造成这样的情况:服务器最后与您关联的会话不是连接到您开始使用的PHPSESSIONID的会话。

更安全的工作流程应该是这样的:

import requests
import bs4
from twocaptcha import TwoCaptcha

session = requests.Session() 
headers = {"user-agent": "blahblahblah agent"}
session.headers.update(headers)

因为你的用户代理从现在开始不会改变,你可以把它放在这里。任何额外的标题部分,可能会更改将自动或手动添加到以后,但这种方式,你可以保持在相同的页面上与服务器,而你解决验证码。

r = session.get("https://funpay.com/account/login")
soup = bs4.BeautifulSoup(r.content)
csrf = soup.find(name="csrf_token")["value"]

即使代码在页面上从其他地方获得csrf令牌,抓住它的形式,将提交清洁而不易错误当你把一个字符串urlencoded等等,但取决于你。我会在这里初始化求解器对象。您的会话仍然是打开的,并且会话对象应该没有更多的移动,直到您在登录时发出post请求。这应该是唯一一次调用登录页面。

solver = TwoCaptcha("apikey")
response = solver.recaptcha(sitekey="6LdTYk0UAAAAAGgiIwCu8pB3LveQ1TcLUPXBpjDh", url="https://funpay.com/account/login", json=1)

顺便说一句,你的apikey应该适用于2captcha和rucaptcha后端,尽管令人恼火的是,如果你在这两个后端都有账户,那么不使用它就没有简单的方法知道哪个是以哪个命名的。应该是一样的。无论如何,一旦captcha响应进来,您就可以构建有效负载并提交。

data = {"csrf_token": csrf, "login": yourlogin, "password": yourpassword, "g-recaptcha-response": response["code"]}
soutput = session.post("https://funpay.com/account/login", data=data)
print(soutput.text)

我怀疑你的问题,如果你能合理地确定recaptcha被正确解决,是你没有一个持久的会话,直到为时已晚,服务器正在处理你的请求作为新的,并分配给你新的cookie。

最新更新