Skip to content

Instantly share code, notes, and snippets.

@trehn
Forked from zakx/damazon.py
Last active November 22, 2016 08:47
Show Gist options
  • Select an option

  • Save trehn/8249832 to your computer and use it in GitHub Desktop.

Select an option

Save trehn/8249832 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 = {'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
Copy link
Copy Markdown

this is just great :D thx!

@balzer82
Copy link
Copy Markdown

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
Copy link
Copy Markdown

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
Copy link
Copy Markdown

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
Copy link
Copy Markdown

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