1. 程式人生 > >從頭學習爬蟲(四十)高階篇----模擬js生成Cookie中__jsl_clearance

從頭學習爬蟲(四十)高階篇----模擬js生成Cookie中__jsl_clearance

本文主要提供中間模擬生成Cookie中__jsl_clearance欄位

前後通過postman模擬代替程式碼實現

一 需求

需要爬取

二 分析請求

分析了一下 第一個521 請求cookie 沒有__jsl_clearance

第二個請求裡就有了

第四個post請求是需要的內容 引數是json格式

三 實操

第二步細節請求頭 構造就跳過了,分析關鍵欄位 自行用postman模擬。

1 模擬cookie

構造521那個請求 首先我們是沒有任何cookie

拿到響應

把響應cookie 包裝到請求頭再次請求

我們記錄下JSESSIONID=B8E7A18467F08205915EAE48C00898D8;__jsluid=fc08291578d4b39171eb760678ed03ca

做完第一步模擬521請求

__jsl_clearance這個欄位很顯然是內容js 生成 解析過於麻煩我們這裡遇到了瓶頸

百度了下是經過一次加密實現的,有關方法可以參考點選

2 程式碼實現js 第一次解密

先看結果

   String s="<script>var x=\"[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@@[email protected]@[email protected]
@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@@[email protected]@[email protected]@@[email protected]@[email protected]@@@[email protected]@[email protected]@@@@[email protected]@[email protected]@[email protected]
@[email protected]@@@[email protected]@[email protected]@@[email protected]@@[email protected]@@[email protected]@[email protected]@[email protected]@@[email protected]@[email protected]@@[email protected]@@[email protected]@[email protected]@@[email protected]@@@@[email protected]@[email protected]@[email protected]@@[email protected]@@@[email protected][email protected]@@@@@[email protected]@@@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@@[email protected]@\".replace(/@*$/,\"\").split(\"@\"),y=\"g 10=2(){3('1i.2g=1i.1k+1i.o.1p(/[\\\\?|&]2n-42/,\\\\'\\\\')',3o);c.8='1a=3t.1s|34|'+(2(){g 10=[[(-~!{}<<-~!{})-~!{}-~{}-~(+[])-~(+[])],(-~[]+(-~{}+[(-~!{}<<-~!{})])/[(-~!{}<<-~!{})]+[]+[]),(-~!{}+[]+[])+[i],[(-~!{}<<(-~(+[])+[(-~!{}<<-~!{})]>>(-~!{}<<-~!{})))],(-~!{}+[]+[])+[35],(-~!{}+[]+[])+(-~!{}+[]+[]),[i],(-~!{}+[]+[])+(-~!{}-~(+[])-~(+[])-~(+[])-~(+[])+[]),(-~!{}+[]+[]),(-~!{}+[]+[])+[-~(35)],(-~!{}-~(+[])-~(+[])-~(+[])-~(+[])+[]),[35],(m+[]),(-~!{}+[]+[])+[(-~!{}<<(-~(+[])+[(-~!{}<<-~!{})]>>(-~!{}<<-~!{})))],(-~!{}+[]+[])+(-~[]+(-~{}+[(-~!{}<<-~!{})])/[(-~!{}<<-~!{})]+[]+[]),((+[])+[[]][34]),(-~!{}+[]+[])+((+[])+[[]][34]),[-~(35)],(-~!{}+[]+[])+[(-~!{}<<-~!{})-~!{}-~{}-~(+[])-~(+[])]],n=3k(10.3e);43(g 3f=34;3f<10.3e;3f++){n[10[3f]]=['1b',[(-~!{}<<(-~(+[])+[(-~!{}<<-~!{})]>>(-~!{}<<-~!{})))]+([]%!!20.33+[]).a(-~!{}),'1h','32',([i]/(+[])+[]+[]).a((-~(+[])-~(+[])<<-~{}))+(-~!{}-~(+[])-~(+[])-~(+[])-~(+[])+[]),((+[])+[[]][34]),'e',({}+[[]][34]).a(-~!{}),(!''+[]+[[]][34]).a(-~[])+[(-~!{}<<-~!{})-~!{}-~{}-~(+[])-~(+[])],'1m',[(-~[-~(+!+[])])/(+[])+[]+[[]][34]][34].a(~~''),[{}+[]+[]][34].a(i),[{}+[]+[[]][34]][34].a((-~{}|(-~!{}<<-~!{}))),'12',[35],'40','j','h','%'][3f]};1f n.p('')})()+';23=13, 29-24-k 2i:3j:2l 2r;t=/;'};1((2(){5{1f !!20.38;}1q(47){1f 44;}})()){c.38('2d',10,44)}1j{c.f('3d',10)}\",f=function(x,y){var a=0,b=0,c=0;x=x.split(\"\");y=y||99;while((a=x.shift())&&(b=a.charCodeAt(0)-77.5))c=(Math.abs(b)<13?(b+48.5):parseInt(a,36))+y*c;return c},z=f(y.match(/\\w/g).sort(function(x,y){return f(x)-f(y)}).pop());while(z++)try{eval(y.replace(/\\b\\w+\\b/g, function(y){return x[f(y,z)-1]||(\"_\"+y)}));break}catch(_){}</script>"; String resHtml = "function getClearance(){" + s+"};"; resHtml = resHtml.replace("</script>", ""); resHtml = resHtml.replace("eval", "return"); resHtml = resHtml.replace("<script>", ""); ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("js"); engine.eval(resHtml); Invocable invocable = (Invocable) engine; String resJs = (String) invocable.invokeFunction("getClearance"); //一級解密結果 System.out.println(resJs);

 

 cookie就是這裡生成。

3 生成cookie測試

由於裡面有document 所以java原生js 就不行了 不支援 我們結合下瀏覽器。

這裡我們先演示下

3.1 新建檔案 儲存成 a.html 

3.2 把上面js 格式化(美化) 儲存在 a.html

3.3 頭尾加上<script>

3.4 我們改下js 打印出cookie

 

4 模擬post請求

既然我們已經拿到cookie 記錄下__jsl_clearance=1537442497.606|0|gr6kqbRTIwmkQ8aKCjZg0Wn5JDo%3D

 完美

測試完畢!!!

四 程式碼回溯

前面最後一步 cookie 我們是複製 很顯然不可能在實際中這麼操作

我們改造下

程式碼

    //selenium 模擬
    System.getProperties().setProperty("webdriver.chrome.driver", "D:\\chromedriver_win32(1)\\chromedriver.exe");
	ChromeOptions options = new ChromeOptions();
	options.setBinary("C:\\Program Files\\Chrome\\Chrone.exe");
	WebDriver driver = new ChromeDriver(options);
	//隨便開啟一個網站
	driver.get("https://www.baidu.com");
	//讓瀏覽器去執行js 我們拿到return cookie的值
	JavascriptExecutor js = (JavascriptExecutor) driver;
	s="var a" + resJs.split("document.cookie")[1].split("Path=/;'")[0]+"Path=/;';return a;";
	System.out.println(s);
	String cookie=(String)js.executeScript(s);
    System.out.println(cookie);
    driver.quit();

五 總結

本篇基本上就是爬蟲cookie實戰模擬終極篇,很實用,也很難,需要js功底,需要熟知原理構造。