#!/usr/bin/python import mechanize import socket import lxml.html import lxml import math import sys import os import re debug = False dump = False sys.path.append(os.path.expanduser('~/.optus-settings')) from config import * b = mechanize.Browser() b.set_handle_refresh(False) b.set_handle_robots(False) if debug: b.set_debug_redirects(True) b.set_debug_responses(True) b.set_debug_http(True) if dump: import logging logger = logging.getLogger("mechanize") logger.addHandler(logging.StreamHandler(sys.stdout)) logger.setLevel(logging.INFO) b.open('https://memberservices.optuszoo.com.au/myusage/') for form in b.forms(): if form.method == 'POST': b.form = form b['j_username'] = username b['j_password'] = password r = b.submit() r = b.open('https://memberservices.optuszoo.com.au/myusage/blah') r = lxml.html.parse(r).getroot() peak_used = "//td[@headers='planDataU']" #offpeak_used = "//td[@headers='yesDataU']" peak_quota = "//td[@headers='planDataAlwd']" #offpeak_quota = "//td[@headers='yesdataAl']" days_used = "//td[@headers='daysUsed']" days_percent = "//td[@class='label' and contains(., 'Days Elapsed')]" days_percent_r = r"Days Elapsed ([0-9]*)%\s*.*" date = "//td[text()='Last Update:']/following-sibling::td" #billing = "//td[text()='Billing Period:']/following-sibling::td" usage = "//td[text()='Usage Period:']/following-sibling::td" s = 'string()' #peak_used = int(r.xpath(peak_used)[0].xpath(s)) peak_used = int(r.xpath(peak_used)[2].xpath(s)) #offpeak_used = int(r.xpath(offpeak_used)[0].xpath(s)) peak_quota = int(r.xpath(peak_quota)[0].xpath(s)) #offpeak_quota = int(r.xpath(offpeak_quota)[0].xpath(s)) days_used = int(r.xpath(days_used)[0].xpath(s)) days_percent = r.xpath(days_percent)[0].xpath(s) days_percent = int(re.sub(days_percent_r, r"\1", days_percent)) date = str(r.xpath(date)[0].xpath(s)) #billing = str(r.xpath(billing)[0].xpath(s)) usage = str(r.xpath(usage)[0].xpath(s)) try: print 'peak: %s/%s (%s%%)' % (peak_used, peak_quota, int(peak_used*100/peak_quota)) except ZeroDivisionError: print 'peak: %s/%s' % (peak_used, peak_quota) #print 'off-peak: %s/%s (%s%%)' % (offpeak_used, offpeak_quota, int(offpeak_used*100/offpeak_quota)) try: print 'days: %s/%s (%s%%)' % (days_used, int(days_used*100.0/days_percent), days_percent) except ZeroDivisionError: print 'days: %s (%s%%)' % (days_used, days_percent) print 'date: %s' % date #print 'billing: %s' % billing print 'usage: %s' % usage b.follow_link(url_regex=r'logout', nr=1)