目录

爬虫案例十二js-逆向模拟登录集思录网

爬虫案例十二js 逆向模拟登录集思录网

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

爬虫案例十二js逆向模拟登录集思录网


提示:以下是本篇文章正文内容,下面案例可供参考

一、网站分析

https://i-blog.csdnimg.cn/direct/7bea428016604445b2350ffac84a8993.png#pic_center

https://i-blog.csdnimg.cn/direct/a55214ce0fdd45b6813699219bdbfbf3.png#pic_center

https://i-blog.csdnimg.cn/direct/8ae1d0e963204d03995f888c29678d33.png#pic_center

https://i-blog.csdnimg.cn/direct/0d105c08bd1f410fbd767f5a9b119735.png#pic_center

https://i-blog.csdnimg.cn/direct/ba19e1c24ba14780898e599481432f7d.png#pic_center

二、代码

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'));

由于我输入登录的是错误的账号密码,所以是手机号/用户名或密码不一致

结果:

https://i-blog.csdnimg.cn/direct/3736a9d37dea46bebfe3f1b6760c853b.png#pic_center