訓練家的佈弱格-Patch1.2

The BLOG of trainer



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

類型:網頁設計心得
作者:羽山
文章時間:2011-05-17 11:26:00
瀏覽人數:23700人
標題: 有認證碼的網頁抓取
網址:https://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://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-03-09)
【HONDA CBR1000RR】CBR1000RR 原廠管

(2024-02-24)
【NSR 150】NSR150 整理後卡鉗

(2024-02-14)
【機車綜合相關】買了牧田的打氣機與心得

(2024-02-10)
【NSR 150】NSR150 整流器接頭重作

(2024-02-09)
【機車綜合相關】鋰電、鋰鐵電池、電源充電器

(2024-01-07)
【NSR 150】NSR150 貨架耳朵斷裂維修

(2024-01-06)
【KTM 390】KTM Duke390 維修發電問題 電盤內仁

(2023-12-29)
【NSR 150】NSR150 改可調拉桿

(2023-11-20)
【遊戲 / 生活】防盜洗手罐

(2023-11-17)
【KTM 390】KTM Duke390 製作鋰鐵電池