Gavan Fantom
14 years ago
commit
e116955e5c
1 changed files with 145 additions and 0 deletions
@ -0,0 +1,145 @@
|
||||
#!/usr/pkg/bin/perl |
||||
|
||||
use WWW::Mechanize; |
||||
local $mech = WWW::Mechanize->new(); |
||||
|
||||
my $configfile = $ARGV[0]; |
||||
|
||||
error("Usage: $0 configfile") unless defined($configfile); |
||||
|
||||
open CONFIG, "<$configfile" or die $!; |
||||
|
||||
while (<CONFIG>) |
||||
{ |
||||
chomp; |
||||
# no newline |
||||
s/#.*//; |
||||
# no comments |
||||
s/^\s+//; |
||||
# no leading white |
||||
s/\s+$//; |
||||
# no trailing white |
||||
next unless length; |
||||
# anything left? |
||||
my ($var, $value) = split(/\s*=\s*/, $_, 2); |
||||
$options{$var} = $value; |
||||
} |
||||
|
||||
close CONFIG; |
||||
|
||||
$username = $options{'username'}; |
||||
die "username not set" unless defined($username); |
||||
|
||||
$password = $options{'password'}; |
||||
die "password not set" unless defined($password); |
||||
|
||||
$downloaddir = $options{'downloaddir'}; |
||||
die "downloaddir not set" unless defined($downloaddir); |
||||
|
||||
print "Fetching homepage\n"; |
||||
$mech->get("https://www.orange.co.uk/"); |
||||
|
||||
$mech->follow_link( text_regex => qr/mobile account/ ); |
||||
|
||||
print "Logging in\n"; |
||||
|
||||
$mech->submit_form( |
||||
form_number => 1, |
||||
fields => { |
||||
txtMSISDN => $username, |
||||
txtPassword => $password, |
||||
} |
||||
); |
||||
|
||||
# Stupid JavaScript here to submit the form on loading of the page. |
||||
# Just log in. |
||||
|
||||
print "Following intermediate login form\n"; |
||||
|
||||
$mech->submit_form( |
||||
form_number => 1, |
||||
fields => { |
||||
} |
||||
); |
||||
|
||||
print "Following view your bills link\n"; |
||||
|
||||
$mech->follow_link( text_regex => qr/view your bills/ ); |
||||
|
||||
follow_processing(); |
||||
|
||||
my @links = $mech->find_all_links( text_regex => qr/download PDF/ ); |
||||
for $link (@links) { |
||||
my $url = $link->url(); |
||||
my ($invoice) = $url =~ /leg_invoice=(\d+)/; |
||||
my $filename = $downloaddir . '/' . $invoice . ".pdf"; |
||||
unless (-e $filename) { |
||||
# print "Downloading invoice $invoice to $filename from $url\n"; |
||||
print "Downloading invoice $invoice to $filename\n"; |
||||
downloadbill($url, $filename); |
||||
#$mech->mirror($url, $filename); |
||||
} else { |
||||
print "Skipping download of invoice $invoice\n"; |
||||
} |
||||
} |
||||
|
||||
#$mech->follow_link( text_regex => qr/log out/ ); |
||||
|
||||
#print $mech->content(); |
||||
|
||||
#$mech->dump_forms( undef, $absolute ); |
||||
#$mech->dump_links( undef, $absolute ); |
||||
|
||||
sub follow_processing { |
||||
my $url, $attempts; |
||||
|
||||
$attempts = 0; |
||||
|
||||
while ($attempts < 10) { |
||||
$attempts++; |
||||
($url) = $mech->content() =~ /var sURL = "(.*)";/; |
||||
|
||||
return unless defined($url); |
||||
|
||||
sleep(1); |
||||
|
||||
$url =~ s/&/&/g; |
||||
|
||||
# print "Attempt $attempts. Found URL: $url\n"; |
||||
print "Waiting for processing. Attempt $attempts.\n"; |
||||
|
||||
my $newurl = $mech->uri(); |
||||
|
||||
$newurl =~ s/\/[^\/]*$//; |
||||
$newurl = $newurl . "/" . $url; |
||||
|
||||
# print "I think I'm going to $newurl\n"; |
||||
|
||||
$mech->get($newurl); |
||||
print "Processing finished.\n"; |
||||
} |
||||
} |
||||
|
||||
sub downloadbill { |
||||
my ($url, $filename) = @_; |
||||
|
||||
print "Following download link\n"; |
||||
$mech->get($url); |
||||
follow_processing(); |
||||
print "Following View your bill link\n"; |
||||
my $billlink = $mech->find_link( text_regex => qr/View your bill/ ); |
||||
if (!defined($billlink)) { |
||||
print "Unable to download bill\n"; |
||||
return; |
||||
} |
||||
my $billurl = $billlink->url_abs(); |
||||
print "Downloading bill\n"; |
||||
$mech->mirror($billurl, $filename); |
||||
} |
||||
|
||||
sub error { |
||||
my ($error) = @_; |
||||
print STDERR $error; |
||||
print STDERR "\n"; |
||||
exit 1; |
||||
} |
Loading…
Reference in new issue