訓練家的佈弱格-Patch1.2

The BLOG of trainer



編輯日期:2011-05-17 11:26

類型:網頁設計心得
作者:羽山
文章時間:2011-05-17 11:26:00
瀏覽人數:24388人
標題: 有認證碼的網頁抓取
網址:http://sunnyriver.3wa.tw/blog/blog.php?id=1222
內容:
 

今天秀批問我,能不能抓到某個網頁表單後的結果的內容

理所當然是先回答「當然可以!」才不會失掉男人的面子!

然後我看了一下到底要抓哪個網頁的表單…

http://www.npa.gov.tw/NPAGip/wSite/sp?xdUrl=/wSite/DatabaseQuery/Car/CarQuery.jsp&mp=1&ctNode=11936

沒想到居然是「內政部警政署警政治安全球資訊網」。

她要抓的這頁是查詢車輛是否違規的資料,理想是把表單再作回自己的網站,然後查詢也在自己的網站

得到的結果也是在自己的網站看到。

看起來是有那些一點困難是吧,不過對於常常抓網頁上資料的我,一點也不陌生。

困難的點在於…「

有這個討人厭的驗證碼!

總之,先看看原始碼,大至上看到以下的表單內容:

<form action="sp?xdUrl=/wSite/DatabaseQuery/Car/CarDetail.jsp&ctNode=11936&mp=1" method="post">

<select name="VehType01" id="type">
  <option value="A" selected="selected">汽車</option>
<option value="B">重機車</option>
<option value="C">輕機車</option> </select> <input name="VehNum01" id="PWD" class="InputTXT" size="15" ></label>
...
...
【驗證碼的圖】
<input name="j_captcha_response" id="InputPWD" type="text" class="InputTXT">
<input type="submit" value="送出查詢">

</form>

總之又看到了熟悉的 captcha

看到這個就覺得很簡單,應該有得破解了

馬上開 firefox 看這網頁,按右鍵看看詳細資料

一點都不意外,看到 JSESSIONID 了~

於是~在 PHP 的程式碼,就可以輕鬆的使用 curl 去作出一個讓程式碼去看網頁的功能

然後假裝讓程式碼看網頁,然後人工回答驗證碼,就可以讓程式碼成功下載人工回答結果的內容了。

上面的對話也許是像秀比這樣顧主所想的,那程式設計師的腦子卻得想出可行方法啊!?

 

好,程式先看懂圖

那就下載圖片來看吧~

          $url= 'http://www.npa.gov.tw/NPAGip/jcaptcha';
          $fp = fopen("npa.png","wb");   //存下來的圖片檔       
          $curl = curl_init();         
          curl_setopt($curl, CURLOPT_URL, $url_yzm);
          curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");         
          curl_setopt($curl, CURLOPT_HEADER, 0);  
          curl_setopt($curl, CURLOPT_COOKIEJAR, "/var/www/html/demo/php/npa.gov/cookie.txt");                  //保存cookie         
          curl_setopt($curl, CURLOPT_COOKIEFILE, "/var/www/html/demo/php/npa.gov/cookie.txt");                   //讀取cookie         
          ob_start();
          //curl_exec ($ch);
          //--- End buffering and clean output
          curl_exec($curl);
          $data=ob_get_contents();
          ob_end_clean();     
          fwrite($fp, $data);       //寫入圖片        
          fclose($fp);

 

抓圖也用了curl,因為為了背後所需要的 cookie

執行過後,你會發現圖也抓了,餅也生了

餅長這樣子~

# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.

www.npa.gov.tw    FALSE    /NPAGip    FALSE    0    JSESSIONID    3A91D75992E4FDC1B15BEAC9EC3630D5

老實說我也看不懂這餅要幹嘛,反正抓到啥,就是當下的圖片對應資料^^

這餅的內容,要給下一次丟表單時用的

這時我們就即時流生了程式的表單,當然也要仿照原本網頁的內容

像 hidden 的值、mp、ctNode

還有很誇張的 01~100 setect 跟 text 的資料

當然放在自家的網站,就不用放那麼跨張的內容了

不過山人曾試過,如果你沒放,結果卻不能如預期的內容~

所以不必要的畫面內容,就直接 css display : none 藏起來吧

 

          $url ="http://www.npa.gov.tw/NPAGip/wSite/sp?xdUrl=/wSite/DatabaseQuery/Car/CarDetail.jsp&ctNode=11936&mp=1";
          $ch = curl_init();
          curl_setopt($ch, CURLOPT_URL, $url);         
          curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
          //curl_setopt($ch, CURLOPT_REFERER, $url);
          //curl_setopt ($ch, CURLOPT_HEADER, 0);
          curl_setopt($ch, CURLOPT_POST, 1);
          curl_setopt($ch, CURLOPT_COOKIEFILE, "/var/www/html/demo/php/npa.gov/cookie.txt");            //設置cookie數據,從這地方再一次把剛才拿到的餅放進來
          curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($_POST));
          //echo http_build_query($_POST);
          ob_start();
          curl_exec($ch);
          $data=ob_get_contents();
          ob_end_clean();

           
          curl_close($ch);
          $new_data=get_between($data,"車輛竊盜、車牌失竊(含計程車)資料查詢結果","【注意事項】");
          echo $new_data;                            
          exit();

 

最後實作的結果,就成為山人網站裡的一個小小的服務了^^

 

http://sunnyriver.3wa.tw/demo/php/npa.gov/

 

 

參考來源:http://blogold.chinaunix.net/u3/103755/showart_2401887.html

首頁  上十頁  上一頁  1 下一頁    最末頁 (總共有...1頁)

第 1 頁

有話要說  看留言 【11】
其他分類
當月訓練
(2011-05-18)
【網誌】網站功能擴增

(2011-05-17)
【網頁設計心得】有認證碼的網頁抓取

(2011-05-11)
【網誌】總算把 FZR 離合器調整組裝篇完成了Orz

(2011-05-04)
【FZR 150】簡單列了一下齒比

(2011-05-01)
【FZR 150】化油器故障心得分享

(2011-05-01)
【網誌】今天被砂輪機掃到手

(2011-05-11)
【FZR 150】FZR離合器組裝教學

最新訓練
(2024-10-15)
【KTM 390】KTM RC390 側柱增加 1.5cm

(2024-10-12)
【NSR 150】NSR150 更換空濾綿 43010km

(2024-10-10)
【NSR 150】NSR150 側柱加高1.5cm

(2024-10-04)
【FZR 150】FZR150 起動電流切斷控制器(起動電源控制器) 3KW-H1950-00 小改

(2024-10-04)
【FZR 150】Kymco G5 整流器改 FZR 四線式

(2024-10-03)
【NSR 150】NSR150 中釘補胎

(2024-10-02)
【FZR 150】大閔 FZR 蛋蛋號維修 Part2

(2024-09-28)
【KTM 390】KTM Duke 390 側柱加高 1 公分

(2024-09-23)
【FZR 150】大閔 FZR 蛋蛋號維修

(2024-09-22)
【焊接】大閔 FZR 整流罩支架焊接鎖點