Files
steamreg/SteamCaptchaHelper.py

113 lines
4.3 KiB
Python

import requests
from lxml import etree
from loguru import logger
class SteamCaptchaHelper:
def __init__(self):
# 使用标准的Steam请求头
self.headers = {
"Host": "store.steampowered.com",
"X-Prototype-Version": "1.7",
"sec-ch-ua-platform": "\"Windows\"",
"sec-ch-ua": "\"Chromium\";v=\"130\", \"Google Chrome\";v=\"130\", \"Not?A_Brand\";v=\"99\"",
"sec-ch-ua-mobile": "?0",
"X-Requested-With": "XMLHttpRequest",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; Valve Steam Client/default/1741737356) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.6478.183 Safari/537.36",
"Accept": "text/javascript, text/html, application/xml, text/xml, */*",
"Content-type": "application/x-www-form-urlencoded; charset=UTF-8",
"Origin": "https://store.steampowered.com",
"Sec-Fetch-Site": "same-origin",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Dest": "empty",
"Referer": "https://store.steampowered.com/join/",
"Accept-Language": "zh-CN,zh;q=0.9"
}
self.session = requests.Session()
self.session.headers.update(self.headers)
def get_sitekey(self):
"""获取Steam网站的sitekey和其他必要信息"""
try:
# 获取初始页面
logger.info("获取Steam注册页面...")
url = "https://store.steampowered.com/join/"
response = self.session.get(url, verify=False)
html = etree.HTML(response.text)
# 提取init_id
init_id = html.xpath('//input[@name="init_id"]/@value')
if init_id:
init_id = init_id[0]
logger.info(f"获取init_id成功: {init_id}")
else:
logger.error("无法获取init_id")
return None
# 刷新验证码获取sitekey
logger.info("刷新验证码获取sitekey...")
url = "https://store.steampowered.com/join/refreshcaptcha/"
data = {"count": "1", "hcaptcha": "1"}
response = self.session.post(url, data=data, verify=False)
result = response.json()
gid = result.get("gid")
sitekey = result.get("sitekey")
logger.info(f"获取gid成功: {gid}")
logger.info(f"获取sitekey成功: {sitekey}")
return {
"session": self.session,
"init_id": init_id,
"gid": gid,
"sitekey": sitekey
}
except Exception as e:
logger.error(f"获取sitekey过程中出错: {str(e)}")
return None
def verify_email(self, email, captcha_text, init_id, gid):
"""验证邮箱步骤"""
try:
logger.info(f"验证邮箱: {email}")
url = "https://store.steampowered.com/join/ajaxverifyemail"
post_data = {
"email": email,
"captchagid": gid,
"captcha_text": captcha_text,
"elang": "6",
"init_id": init_id,
"guest": "false"
}
response = self.session.post(url, data=post_data, verify=False)
result = response.json()
logger.info(f"验证邮箱结果: {result}")
# 检查不同的响应类型
# 1 表示成功
# 17 可能是"创建Steam账户时发生错误"
# 其他失败情况
if 'success' not in result:
result['success'] = 0
result['error'] = "无效的响应"
return result
except Exception as e:
logger.error(f"验证邮箱过程中出错: {str(e)}")
return {"success": 0, "error": str(e)}
def get_user_agent(self):
"""返回Steam的用户代理"""
return self.headers["User-Agent"]
# 使用示例
if __name__ == "__main__":
helper = SteamCaptchaHelper()
data = helper.get_sitekey()
if data:
print(f"成功获取sitekey: {data['sitekey']}")
else:
print("获取sitekey失败")