Create a gist now

Instantly share code, notes, and snippets.

@trehn /damazon.py forked from zakx/damazon.py
Last active Nov 22, 2016

What would you like to do?
#!/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 = {'email': username, 'password': password}
for x in login.find_all("input", type="hidden"):
payload[x.attrs['name']] = x.attrs['value']
# 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', id='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('div', 'num-results').b.text)
except AttributeError:
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 scope_soup.find_all('span', 'price'):
scope_sum += Decimal(x.text[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 BeautifulSoup(scope_page_r.content).find_all('span', 'price'):
scope_sum += Decimal(y.text[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))
@magenbrot

This comment has been minimized.

Show comment Hide comment
@magenbrot

magenbrot May 27, 2014

this is just great :D thx!

this is just great :D thx!

@balzer82

This comment has been minimized.

Show comment Hide comment
@balzer82

balzer82 Jul 7, 2014

Sorry, but I get

Traceback (most recent call last):
  File "damazon.py", line 32, in <module>
    filters = [options.attrs['value'] for options in soup.find('select', id='orderFilter').findChildren()[1:]]
AttributeError: 'NoneType' object has no attribute 'findChildren'

balzer82 commented Jul 7, 2014

Sorry, but I get

Traceback (most recent call last):
  File "damazon.py", line 32, in <module>
    filters = [options.attrs['value'] for options in soup.find('select', id='orderFilter').findChildren()[1:]]
AttributeError: 'NoneType' object has no attribute 'findChildren'
@fany

This comment has been minimized.

Show comment Hide comment
@fany

fany Jul 7, 2014

@balzer82: Same here. Error disappeared when I entered the correct username (= e-mail address) and password …

@threhn: Great script; thanks a lot!

fany commented Jul 7, 2014

@balzer82: Same here. Error disappeared when I entered the correct username (= e-mail address) and password …

@threhn: Great script; thanks a lot!

@xplorn

This comment has been minimized.

Show comment Hide comment
@xplorn

xplorn Jul 7, 2014

well this definitely isn't true

[+] Found 7 filters, processing...
[+] Processing last30 ( 0 orders)... 0.00 EUR
[+] Processing months-6 ( 0 orders)... 0.00 EUR
[+] Processing year-2014 ( 0 orders)... 0.00 EUR
[+] Processing year-2013 ( 0 orders)... 0.00 EUR
[+] Processing year-2012 ( 0 orders)... 0.00 EUR
[+] Processing year-2011 ( 0 orders)... 0.00 EUR
[+] Processing year-2010 ( 0 orders)... 0.00 EUR
[+] Grand total (years only) ( 0 orders)... 0.00 EUR

xplorn commented Jul 7, 2014

well this definitely isn't true

[+] Found 7 filters, processing...
[+] Processing last30 ( 0 orders)... 0.00 EUR
[+] Processing months-6 ( 0 orders)... 0.00 EUR
[+] Processing year-2014 ( 0 orders)... 0.00 EUR
[+] Processing year-2013 ( 0 orders)... 0.00 EUR
[+] Processing year-2012 ( 0 orders)... 0.00 EUR
[+] Processing year-2011 ( 0 orders)... 0.00 EUR
[+] Processing year-2010 ( 0 orders)... 0.00 EUR
[+] Grand total (years only) ( 0 orders)... 0.00 EUR

@xplorn

This comment has been minimized.

Show comment Hide comment
@xplorn

xplorn Jul 7, 2014

whoops, needs amazon.com

xplorn commented Jul 7, 2014

whoops, needs amazon.com

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment