爬虫案例十二js-逆向模拟登录集思录网
目录
爬虫案例十二js 逆向模拟登录集思录网
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
爬虫案例十二js逆向模拟登录集思录网
提示:以下是本篇文章正文内容,下面案例可供参考
一、网站分析
二、代码
python代码
"""
网站:https://www.jisilu.cn/login/
"""
import requests
import base64
import json
import requests
import execjs
def base64_api(uname, pwd, img, typeid):
with open(img, 'rb') as f:
base64_data = base64.b64encode(f.read())
b64 = base64_data.decode()
data = {"username": uname, "password": pwd, "typeid": typeid, "image": b64}
result = json.loads(requests.post("http://api.ttshitu.com/predict", json=data).text)
if result['success']:
return result["data"]["result"]
else:
# !!!!!!!注意:返回 人工不足等 错误情况 请加逻辑处理防止脚本卡死 继续重新 识别
return result["message"]
return ""
class JiSiLuSpider:
def __init__(self,headers):
# 建立session
self.session = requests.session()
self.session.headers = headers
self.yzm_code = ""
f = open('jsl.js',mode='r',encoding='utf-8')
js_code = f.read()
js = execjs.compile(js_code)
self.user = js.call("jslencode", "17740")
self.pwd = js.call("jslencode", "125545")
def get_yzm(self):
yzm_url = "https://www.jisilu.cn/account/captcha/1931"
resp = self.session.get(url=yzm_url)
with open('tu.jpg',mode='wb') as f:
f.write(resp.content)
def verify(self):
v_url = "https://www.jisilu.cn/webapi/account/check_code_verify/"
self.session.headers = {
"":""#头自行添加
}
# print(self.yzm_code)
form_data = {
"code_verify":self.yzm_code
}
print(json.dumps(form_data,separators=(',', ':')))
v_resp = self.session.post(url=v_url,data=form_data)
print(v_resp.text)
def login(self):
l_url = "https://www.jisilu.cn/webapi/account/login_process/"
self.session.headers = {
"":""#头自行添加
}
f_data = {
"return_url": "/",
"user_name": self.user,
"password": self.pwd,
"auto_login": "1",
"aes": "1",
"code_verify": self.yzm_code
}
print(json.dumps(f_data,separators=(',', ':')))
login_resp = self.session.post(url=l_url,data=f_data)
print(login_resp.text)
if __name__ == '__main__':
headers = {
"":""#头自行添加
}
JSL = JiSiLuSpider(headers=headers)
JSL.get_yzm()
JSL.yzm_code = base64_api(uname='你的图鉴账号', pwd='你的图鉴密码',
img="./tu.jpg",typeid=3)
JSL.verify()
JSL.login()
js代码
var CryptoJS = require("crypto-js");
function jslencode(text) {
var aes_key = "397151C04723421F"
var key = CryptoJS.enc.Utf8.parse(aes_key);
var iv = CryptoJS.enc.Utf8.parse("");
var srcs = CryptoJS.enc.Utf8.parse(text);
var encrypted = CryptoJS.AES.encrypt(srcs, key, {
iv: iv,
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.ciphertext.toString(CryptoJS.enc.Hex)
}
//console.log(jslencode('123123'));
由于我输入登录的是错误的账号密码,所以是手机号/用户名或密码不一致
结果: