记录openlaw的反爬
地址:http://openlaw.cn/login.jsp
需要登陸,找到Form data
?
根據(jù)提交數(shù)據(jù)可以知道需要找到_csrf和加密后的password,_csrf由服務(wù)器生成,在登陸頁面
接下來找加密password的js代碼,ctrl+F搜索password,可以看出password在加密后重新填入input再提交
找到加密函數(shù)KeyEncrypt
復(fù)制到snippets調(diào)試,調(diào)用了JSEncrypt,CryptoJs,繼續(xù)搜索
?
全都復(fù)制加到snippets里執(zhí)行
這樣就獲得了加密passwoed的js代碼,接下來需要讓這段代碼在python里執(zhí)行,可以用execjs和js2py,推薦用execjs
把snippets的代碼復(fù)制出來另存為js,用execjs執(zhí)行
要注意運(yùn)行時(shí)環(huán)境,如果是node.js或Jscript都會(huì)報(bào)錯(cuò):navigator is not define,nodejs和Jscript都不是瀏覽器,可以用PhantomJS。
#運(yùn)行時(shí)環(huán)境設(shè)置import execjs import execjs.runtime_names os.environ["EXECJS_RUNTIME"] = "PhantomJS" PhantomJS = execjs.get(execjs.runtime_names.PhantomJS) print(execjs.get().name)
js文件路徑前要加r,加密密碼結(jié)果如圖
因?yàn)閏sfr和post data在兩頁,所以需要一起運(yùn)行
#獲取csfrheaders={ "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3", "Accept-Encoding":"gzip,deflate", "Accept-Language":"zh-CN,zh;q=0.9", "Cache-Control":"max-age=0", "Connection":"keep-alive", "Content-Type":"application/x-www-form-urlencoded", "Host":"openlaw.cn", "Upgrade-Insecure-Requests":"1", "User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/73.0.3683.86Safari/537.36", } r=session.get("http://openlaw.cn/login.jsp?",headers=headers1) tree=etree.HTML(r.text) csrf=tree.xpath('//input[@name="_csrf"]/@value')[0]
#post form data post_url="http://openlaw.cn/login" with open(r"C:\Users\37576\Desktop\123.js",encoding="utf-8")as f:js=f.read()ctx = execjs.compile(js)pwd=ctx.call("keyEncrypt","XXXXXXXX")#密碼 data={ "_csrf":csrf, "username":"#########",#賬戶 "password":pwd, "_spring_security_remember_me":"true", } res=session.post(post_url,data=data,headers=headers)
?tree=etree.HTML(res.text)
?lala=tree.xpath('//div[@class="bbp-user-section"]//text()')
登陸成功
?
接下來分析抓取頁面
url="http://openlaw.cn/guidance/16444eba67afe97881fa6521d333ef10" headers1={ "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3", "Accept-Encoding":"gzip,deflate", "Accept-Language":"zh-CN,zh;q=0.9", "Connection":"keep-alive", "Host":"openlaw.cn", "Upgrade-Insecure-Requests":"1", "User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/73.0.3683.86Safari/537.36", } a=session.get(url,headers=headers1)抓取結(jié)果全是亂碼
用火狐瀏覽器抓包分析
第一頁與剛才抓到的頁面一樣,第二頁有數(shù)據(jù),在第一頁面下面
對比分析發(fā)現(xiàn)請求地址一樣,但cookie不一樣,參考資料了解到是js加密cookie,帶新cookie的請求才能顯示正確頁面,所以需要找到添加cookie的js代碼
?
查資料得知下面這種加密叫jjencode,jjencodeDemo地址:http://utf-8.jp/public/jjencode.html
],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[ #這種加密叫jsfunk,地址是:http://www.jsfuck.com/+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]
下面是aaencode,地址是http://utf-8.jp/public/aaencode.html
゚ω゚ノ= /`m′)ノ ~┻━┻ //*′?`*/ ['_']; o=(゚ー゚) =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];加密原理百度
代碼在可以執(zhí)行獲得內(nèi)容或者找工具解密成明文
(function anonymous() {if (window.wp1) {document.cookie = 'OPEN_E4C0C08491=' + wp3;document.cookie = 'OPEN_ID=B32pJOwfO/AJZJ3ZGmnunQNTaUie84jnyHoNCq/onZQ='} } )代碼有添加cookie,第二行拉出來單獨(dú)執(zhí)行
有報(bào)錯(cuò)但得到了解析后的代碼
頁面上所以js代碼如下:
var wp1 = 'xKIOt5jUZQcS8wurcX4lghwlET9K0IWBUsS3ZqmSamCBTAPg7Fl5sVr443dyK42p'; var wp2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; var wp3 = "548545fe3ced4f3494934e537e304705"; var wp4 = "464acf618bf62df3e7e37e80c2c1a04d"; var wp5 = "0aa9566c4aa30883e34d0e1a530bf508"; var wp6 = "a8f49232d343e4b94ff7958088fa6734"; var wp7 = "82f778b45a9fce8589105c852174947b"; var wp8 = "3221d819c9b96d2631d0b5084c736f69"; if (window.wp1) {document.cookie = 'OPEN_E4C0C08491=' + wp3;document.cookie = 'OPEN_ID=B32pJOwfO/AJZJ3ZGmnunQNTaUie84jnyHoNCq/onZQ='}var getGlobal = function() {if (typeof self !== '') {return self};if (typeof window !== '') {return window};if (typeof global !== '') {return global};throw new Error('unable to locate global object')}; function _process(s) {var result = s.substring(5, 7).concat('s').concat(s.substring(14, 15)).concat('v').concat(s.substring(9, 13)).concat('g').concat(s.substring(5)).concat('l').concat(s.substring(11, 19));return result.substr(0, 32);};var _switch = false;if ((getGlobal() === window)) {_switch = true} else {_switch = false};document.cookie = 'SIGNIN_ID=3e2291010f36c9244c633aba4cdcdd42'; document.cookie = 'SIGNIN_UC=9e65d8fc646e49fb7a0f9f8237915bfb'; document.cookie = 'UNDEFINED=432e9111ecf89746f3046ca970814f41'; if (_switch) {document.cookie = 'OPEN_589D5869B5=' + _process(wp3);setTimeout("location.reload();", 100); }
有六條cookie修改完后通過location.reload()刷新頁面,帶著新cookie刷新后的頁面能訪問到有數(shù)據(jù)的頁面
接下來需要把js代碼拉出來執(zhí)行獲得cookie,但是有一點(diǎn)問題就是cookie數(shù)據(jù):OPEN_E4C0C08491,OPEN_ID,SIGNIN_ID,UNDEFINED,OPEN_589D5869B5不知道從哪里來的,找了很久都沒找到
沒有這些數(shù)據(jù)就沒辦法寫cookie,就此卡住。。。等水平提高再來解決
?
為了獲取頁面數(shù)據(jù),下面用selenium解決該問題
#配置chorme無頭瀏覽器from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_argument('--headless') driver = webdriver.Chrome(chrome_options=chrome_options,executable_path = 'D:\python\chromedriver.exe') from time import sleep #登陸賬號(hào)
driver.get("http://openlaw.cn/login.jsp?logout") driver.find_element_by_id("username").send_keys("XXXXXXXXX") driver.find_element_by_id("password").send_keys("XXXXXXXXX") sleep(2) driver.find_element_by_id("submit").click() #獲取頁面數(shù)據(jù)
driver.get("http://openlaw.cn/guidance/167ce490ba94c3ed26baab5689fdd620") sleep(2) title=driver.find_element_by_xpath('//h1[@class="entry-title"]').text guid=driver.find_element_by_xpath('//div[@class="annotator-wrapper"]/p').text content=driver.find_element_by_xpath('//div[@class="annotator-wrapper"]/p[2]').text page_detail={"title":title,"content":guid+"\n"+content.replace("\u3000"," ")}
結(jié)果
小結(jié)
1.RSA學(xué)習(xí)地址:https://blog.csdn.net/u014044812/article/details/80782448
2.用代理或訪問頻率異常會(huì)頻繁出現(xiàn)驗(yàn)證碼
3.訪問有資源的網(wǎng)頁時(shí)服務(wù)器會(huì)驗(yàn)證cookie,如果不帶有特定cookie訪問,網(wǎng)頁會(huì)轉(zhuǎn)到空白頁執(zhí)行js代碼添加cookie,然后302或reload帶著新cookie重新請求出有數(shù)據(jù)的頁面
4.常見的js混淆方式
5.還不熟練js調(diào)試用法,等水平提高繼續(xù)破解該反爬
?
轉(zhuǎn)載于:https://www.cnblogs.com/shenyiyangle/p/10743133.html
總結(jié)
以上是生活随笔為你收集整理的记录openlaw的反爬的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 连接校园网的路由器为啥老是服务器没响应,
- 下一篇: Microsoft office 各个版