应对加密js的三种方法
Posted niansi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了应对加密js的三种方法相关的知识,希望对你有一定的参考价值。
经常遇到网页在登录后会对用户输入的帐号和密码通过js进行加密,导致模拟登录这类网站时受到阻碍
这里小记一下当前解决该问题的三种方法
1.利用python实现js同等加密。
2.利用selenium模拟登录。
3.利用pyexecjs来执行js文件
测试站点:http://bbs.125.la/
登录时通过浏览器F12发现该网站对密码进行了加密
进一步分析和查找,发现是名为md5.js?RFI文件进行了加密
尝试用第一种方法,但是发现此文件内容较多,通过python转换相应程序较为复杂,因此放弃
采用第二种方法
#coding=utf-8
import time
from selenium import webdriver
import selenium.webdriver.support.ui as ui
start_url = \'http://bbs.125.la/\'
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)
driver.get(start_url)
#通过id方式定位
driver.find_element_by_id(\'ls_username\').send_keys(u"n***i")
driver.find_element_by_id(\'ls_password\').send_keys(u"sn*******9")
driver.find_element_by_class_name(\'pn\').click()
time.sleep(3)
driver.quit()
通过此方法登录成功,尝试第三种方法
# -*- coding: utf-8 -*-
import os
import re
import urlparse
import requests
import json
import traceback
from scrapy.selector import htmlXPathSelector
from scrapy.http import HtmlResponse
import execjs
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
if __name__ == \'__main__\':
url = \'http://bbs.125.la/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes&inajax=1\'
headers={
\'Accept\':\'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\',
\'Accept-Encoding\':\'gzip, deflate\',
\'Accept-Language\':\'zh-CN,zh;q=0.8\',
\'Cache-Control\':\'max-age=0\',
\'Connection\':\'keep-alive\',
\'Content-Length\':\'87\',
\'Content-Type\':\'application/x-www-form-urlencoded\',
\'Host\':\'bbs.125.la\',
\'Origin\':\'http://bbs.125.la\',
\'Referer\':\'http://bbs.125.la/\',
\'Upgrade-Insecure-Requests\':\'1\',
\'User-Agent\':\'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0\'
}
username = \'n***i\'
password = \'sn*******9\'
md5_password = execjs.compile(open(r"md5.js").read().decode("utf-8")).call(\'hex_md5\', password) #md5.js文件已复制到本地
print \'md5_password:\',md5_password
r = requests.post(url,headers=headers,data=\'username=%s&password=%s&quickforward=yes&handlekey=ls\'%(username,md5_password))
成功输出加密后的密码
以上是关于应对加密js的三种方法的主要内容,如果未能解决你的问题,请参考以下文章