- 论坛徽章:
- 0
|
本帖最后由 ykredrum 于 2013-01-25 02:10 编辑
很久没有发过贴了,睡不着起来发一个,lwp是个好模块,上网站自动完成点任务多方便的,不过很多操作都需要在你正确登录网站的前提下才能进行,登录一个没有验证码的网站还挺容易的,如果登录的时候要求你输入验证码就比较麻烦,你可以改cookie,但是如果每次登录账号不一样感觉比较麻烦,个人写了个小程序,登录的时候程序先自动将验证码图片下载下来,等人工识别然后人工输入,程序接受输入后再继续登录。 虽然麻烦点,不过还是算一种方法吧。
程序概述:
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函数不填参数就使用默认账号和密码。
上面程序有正确账号和密码的话是能成功登录的,发帖前测试过。 |
|