方法二、通过js方式

1、CD进入项目目录
2、做国内资源隐射:npm install -g cnpm —registry=https://registry.npm.taobao.org
3、安装:cnpm install node-jsencrypt
image.png
安装成功之后多了以下文件夹
image.png

  1. const JSEncrypt = require('node-jsencrypt')
  2. // 登陆
  3. function doLogin(pass_old,pk) {
  4. var encrypt = new JSEncrypt()
  5. var public_key = pk
  6. encrypt.setPublicKey(public_key)
  7. var pass_new = encrypt.encrypt(pass_old)
  8. return pass_new
  9. }
  10. #var pass_old = '123456'
  11. #var pk = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDaP+rYm6rqTMP565UmMU6YXq46KtAN3zwDSO8LNa15p0lJfsaY8jXY7iLsZqQZrGYr2Aayp6hYZy+Q+AMB/VUiSpD9ojPyOQ7r9jsf9jZbTOL4kj6iLZn37fEhp4eLvRgy5EJCyQoFyLCsgLechBTlYl2eA95C3j4ZUFhiV6WFHQIDAQAB'
  12. #console.log(doLogin(pass_old,pk))
  1. import execjs
  2. def get_js(file_name,fun_name,*args):
  3. with open(file_name,'r',encoding='utf-8') as file_obj:
  4. js_code = file_obj.read()
  5. # 1、编译js文件
  6. cjs = execjs.compile(js_code)
  7. # 2、 执行js代码
  8. return cjs.call(fun_name,*args)
  1. import requests
  2. from shanzhi_rsa import encrypto
  3. from lxml import etree
  4. # lxml.etree._Element
  5. from lxml.etree import _Element
  6. from tools import get_js
  7. # 目标url
  8. url = 'http://shanzhi.spbeen.com/login/'
  9. # 请求头
  10. header = {
  11. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.82 Safari/537.36',
  12. 'Cookie': 'shanzhi_kmer=h9wm0ptr9kcuza527as3a43a6zuwzsid; csrftoken=yHdq0AaPEO1pyiC2zji4MmeyLRNcXVcZLNoHCT3izQ52lwvASvHv0jgsGG9kEXUN'
  13. }
  14. # 先从网页源码中得到csrfmiddlewaretoken和pk
  15. reponse_obj = requests.get(url, headers=header)
  16. tree = etree.HTML(reponse_obj.text)
  17. # 获取csrfmiddlewaretoken
  18. csrfmiddlewaretoken = tree.xpath('//input[@name="csrfmiddlewaretoken"]/@value')[0]
  19. # 获取pk
  20. pk = tree.xpath('//input[@id="pk"]/@value')[0]
  21. old_password = 'logic_00'
  22. new_password = get_js('shanzhi_js.js','doLogin',old_password,pk)
  23. data_dict = {
  24. 'username': 'logic_00',
  25. 'password': new_password,
  26. 'csrfmiddlewaretoken': csrfmiddlewaretoken
  27. }
  28. res = requests.post(url, headers=header, data=data_dict)
  29. print(res.text)