破解spdex登陆
import io
import time
import requests
import pytesseract
from lxml import etree
from PIL import Image
def login():
sess = requests.session() # 新建session
username = '13866669999' # 用户名
password = 'qqqqqqqq' # 密码
header = { # header 头信息
"host": "op1.sp1x2.net",
"origin": "https://op1.sp1x2.net",
"referer": "https://op1.sp1x2.net/Login.aspx?FromUrl=http%3a%2f%2fop1.sp1x2.net%2fdv_1_0_0_0_0_0",
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"
}
index_url = "https://op1.sp1x2.net/Login.aspx?FromUrl=http%3a%2f%2fop1.sp1x2.net%2fdv_1_0_0_0_0_0" # 登陆首页
index_resp = sess.get(url=index_url,headers=header)
login_info = [] # 获取登陆必要信息
for i in etree.HTML(index_resp.text).xpath('//div[@class="aspNetHidden"]'):
for ii in i.xpath('input/@value'):
login_info.append(ii)
yzm_url = "https://op1.sp1x2.net/ValidateCodePage.aspx" # 验证码URL
yzm_resp = sess.get(url=yzm_url,headers=header)
# yzm = open(r'./yzm.gif','wb')
# yzm.write(yzm_resp.content)
# yzm.close()
image = Image.open(io.BytesIO(yzm_resp.content)).convert('L') # 将图片转化成灰度图像,再转化成二值化图像
threshold = 96 # 设定阈值
table = []
for i in range(256):
if i < threshold:
table.append(0)
else:
table.append(1)
image = image.point(table,'1')
# image.show() # 打开图片
yzm = str(pytesseract.image_to_string(image,lang='eng',config = "--psm 7")).strip("\n") # 得到验证码
data = { # 登录form信息
'__EVENTTARGET': login_info[0],
'__EVENTARGUMENT': login_info[1],
'__VIEWSTATE': login_info[2],
'__VIEWSTATEGENERATOR': login_info[3],
'ctl00$ContentPlaceHolder1$TxtUserName': username,
'ctl00$ContentPlaceHolder1$TxtPassWord': password,
'ctl00$ContentPlaceHolder1$TxtValida': yzm,
'ctl00$ContentPlaceHolder1$BtnSubmit': '登 录'
}
login_url = "https://op1.sp1x2.net/Login.aspx?FromUrl=http%3a%2f%2fop1.sp1x2.net%2fdv_1_0_0_0_0_0" # 登陆URL
login_resp = sess.post(url=login_url,headers=header,data=data).text
# with open('/Users/tian/demo/test/test.html',mode="w") as f:
# f.write(login_resp)
cookies = requests.utils.dict_from_cookiejar(index_resp.cookies) # 当前cookie
print(yzm)
if "验证码有误" in login_resp:
print("验证码有误,正在重新登陆.")
time.sleep(3)
return(login())
elif username in login_resp:
print(cookies)
return(sess)
else:
print("未知错误.")
return(None)
new_session = login()
print(new_session)