Skip to content

Instantly share code, notes, and snippets.

@jaegeral
Forked from zakx/damazon.py
Last active August 29, 2015 14:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jaegeral/4f6301519e16ccfc1312 to your computer and use it in GitHub Desktop.
Save jaegeral/4f6301519e16ccfc1312 to your computer and use it in GitHub Desktop.
#!/usr/bin/python
# setup: pip install requests beautifulsoup4
from decimal import Decimal
import requests
from bs4 import BeautifulSoup
import sys
import getpass
username = raw_input("Username: ")
password = getpass.getpass("Password: ")
# Session setup
session = requests.Session()
session.headers['User-Agent'] = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.3 Safari/537.36"
# Request login page
login_r = session.get("https://www.amazon.de/gp/css/order-history/")
login = BeautifulSoup(login_r.content)
payload = {}
for x in login.find_all("input"):
if x.attrs.get('name'):
payload[x.attrs['name']] = x.attrs.get('value', '')
payload['ap_email'] = payload['email'] = username
payload['ap_password'] = payload['password'] = password
# Log in
order_r = session.post("https://www.amazon.de/ap/signin", data=payload, allow_redirects=False)
# Request order history
hist_r = session.get("https://www.amazon.de/gp/css/order-history/")
soup = BeautifulSoup(hist_r.content)
filters = [options.attrs['value'] for options in soup.find('select', attrs={'name': 'orderFilter'}).findChildren()[1:]]
print "[+] Found %d filters, processing..." % len(filters)
total = Decimal("0.00")
total_orders = 0
for scope in filters:
scope_r = session.get("https://www.amazon.de/gp/css/order-history/?ie=UTF8&orderFilter=%s&startIndex=0" % scope)
scope_soup = BeautifulSoup(scope_r.content)
try:
length = int(scope_soup.find('span', 'num-orders').text.split(" ", 1)[0])
except ValueError:
length = 0
sys.stdout.write("[+] Processing %s \t(%s orders)... " % (scope.rjust(9), str(length).rjust(4)))
sys.stdout.flush()
page = 10
scope_sum = Decimal("0.00")
for x in filter(lambda x: x.text.lstrip().startswith("EUR "), scope_soup.find_all('span', 'a-color-secondary value')):
scope_sum += Decimal(x.text.lstrip()[4:].replace(".","").replace(",","."))
while page <= length:
scope_page_r = session.get("https://www.amazon.de/gp/css/order-history/?ie=UTF8&orderFilter=%s&startIndex=%d" % (scope, page))
for y in filter(lambda x: x.text.lstrip().startswith("EUR "), BeautifulSoup(scope_page_r.content).find_all('span', 'a-color-secondary value')):
scope_sum += Decimal(y.text.lstrip()[4:].replace(".","").replace(",","."))
page += 10
print "\t%s EUR" % (str(scope_sum).rjust(10))
if scope.startswith("year"):
total += scope_sum
total_orders += length
print "[+] Grand total (years only) \t(%s orders)... \t%s EUR" % (str(total_orders).rjust(4), str(total).rjust(10))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment