- 論壇徽章:
- 0
|
本帖最后由 ykredrum 于 2013-01-25 02:10 編輯
很久沒有發(fā)過貼了,睡不著起來發(fā)一個,lwp是個好模塊,上網站自動完成點任務多方便的,不過很多操作都需要在你正確登錄網站的前提下才能進行,登錄一個沒有驗證碼的網站還挺容易的,如果登錄的時候要求你輸入驗證碼就比較麻煩,你可以改cookie,但是如果每次登錄賬號不一樣感覺比較麻煩,個人寫了個小程序,登錄的時候程序先自動將驗證碼圖片下載下來,等人工識別然后人工輸入,程序接受輸入后再繼續(xù)登錄。 雖然麻煩點,不過還是算一種方法吧。
程序概述:
1.程序根據特定的網站寫的,所以大家就看看大概原理就是了,照搬到其他網站肯定不成功。
2.大概原理,頁面得到驗證碼是通過一個特定的鏈接,登錄的時候直接通過這個鏈接得到驗證碼,然后加到賬戶信息里面post出去,登錄就成功了。
代碼如下:
- use strict;
- use warnings;
- use LWP;
- use LWP::ConnCache;
- # main procedure #
- my $ua = LWP::UserAgent->new( );
- # setup attribution #
- push @{ $ua->requests_redirectable }, 'POST'; # post之后能自動打開redirect頁面
- $ua->agent('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; EmbeddedWB 14.52 from: http://www.bsalsa.com/ EmbeddedWB 14.52; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; AskTbFXTV5/5.11.3.15590)');
- $ua->cookie_jar( {} ); #打開cookie功能
- $ua->timeout(15);
- $ua->conn_cache( LWP::ConnCache->new() ); # keep alive
- if( &login ){
- print "登錄成功!\n";
- }else{
- print "登錄失!\n";
- }
- sub login {
- my $acc = shift || '這里填默認使用的賬號';
- my $pw = shift || '這里填默認使用的密碼';
- my $response = $ua->get('http://www.xckjpx.net/user/login_inc/checkcode/checkcode.asp');
- if ($response->is_success) {
- # 抓取驗證碼圖片 #
- open my $check_code_image, "> verifycode.BMP" #默認驗證圖片的位置在當前目錄
- or die "$!";
- binmode($check_code_image);
- print $check_code_image $response->content;
- close $check_code_image; #關閉print對句柄的控制
- { # 輸入驗證碼并登錄 #
- print "> enter verifycode:";
- chomp( my $verifycode = <> );
- $verifycode=~ s/\s//g; #刪除空白
- my $response = $ua->post(
- 'http://www.xckjpx.net/user/check.asp',
- [username => $acc, password => $pw, xhccl => 'login', verifycode => $verifycode, Sub_sub =>''],
- );
- if ($response->is_success) {
- return $response->content =~ /location='login.asp'/ ? 0 : 1; # 根據是否重定向頁面到登錄界面來判斷登錄是否成功
- # 登錄成功返回 1 登錄失敗返回 0
- }
- else {
- print '> failed to post data for login: ' . $response->status_line . "\n";
- }
- } #
- }
- else {
- print '> failed to get verifycode: ' . $response->status_line . "\n";
- }
- }
復制代碼 最后:
程序里本來有個默認賬號和密碼,因為不是我自己的,不敢泄露別人隱私,大家就自己申請一個吧
login函數不填參數就使用默認賬號和密碼。
上面程序有正確賬號和密碼的話是能成功登錄的,發(fā)帖前測試過。 |
|