@ -10,13 +10,14 @@ import time
#Initialize variables and get config
#Initialize variables and get config
with open ( ' ../config.json ' ) as configFile :
with open ( ' ../config.json ' ) as configFile :
data = json . load ( configFile )
data = json . load ( configFile )
testing = data [ " cardNumber " ]
cardData = data [ " cardNumber " ]
t estingE xpo = data [ " expo " ]
expoData = data [ " expo " ]
dic = { }
dic = { }
count = 0
count = 0
options = FirefoxOptions ( )
options = FirefoxOptions ( )
nameList = [ ]
nameList = [ ]
priceList = [ ]
priceList = [ ]
print ( Fore . GREEN +
print ( Fore . GREEN +
'''
'''
( ) ( ) )
( ) ( ) )
@ -36,7 +37,6 @@ print(Fore.GREEN +
def goToParent ( ) :
def goToParent ( ) :
driver . switch_to . parent_frame ( ) ;
driver . switch_to . parent_frame ( ) ;
#options.add_argument("--headless")
#options.add_argument("--headless")
driver = webdriver . Firefox ( options = options )
driver = webdriver . Firefox ( options = options )
driver . get ( " https://happymugcoffee.com/collections/roasted-coffee " )
driver . get ( " https://happymugcoffee.com/collections/roasted-coffee " )
@ -70,22 +70,19 @@ nameFixed.remove("Coffee Subscription - Roaster's Choice B")
for i in nameFixed :
for i in nameFixed :
count + = 1
count + = 1
dic [ count ] = i
dic [ count ] = i
for key , value in dic . items ( ) :
for key , value in dic . items ( ) :
print ( key , ' : ' , value )
print ( key , ' : ' , value )
selection = input ( Fore . BLUE + " [+] " + " Type the number of the coffee you would like \n " + Style . RESET_ALL )
selection = input ( Fore . BLUE + " [+] " + " Type the number of the coffee you would like \n " + Style . RESET_ALL )
#print(Style.RESET_ALL)
# Lookup the key/value in dictionary then click the correct coffee
# Lookup the key/value in dictionary then click the correct coffee
value = dic [ int ( selection ) ]
value = dic [ int ( selection ) ]
print ( Fore . BLUE + " [+] " + " Selecting " + value + " ... " )
print ( Fore . BLUE + " [+] " + " Selecting " + value + " ... " )
driver . find_element_by_link_text ( value ) . click ( )
driver . find_element_by_link_text ( value ) . click ( )
cart = driver . find_elements_by_id ( " AddToCart-product-template " ) [ 0 ]
cart = driver . find_elements_by_id ( " AddToCart-product-template " ) [ 0 ]
cart . click ( )
cart . click ( )
driver . find_element_by_xpath ( " /html/body/div[4]/main/div/div/form/div/div/div[2]/div[4]/input[2] " ) . click ( )
driver . find_element_by_xpath ( " /html/body/div[4]/main/div/div/form/div/div/div[2]/div[4]/input[2] " ) . click ( )
# Input shopping info (Condense into for loop later)
# Input shipping info (Condense into for loop later)
print ( Fore . BLUE + " [+] " + " Adding info from " + Fore . GREEN + " config.json " + Fore . BLUE + " ... " )
print ( Fore . BLUE + " [+] " + " Adding info from " + Fore . GREEN + " config.json " + Fore . BLUE + " ... " )
print ( Style . RESET_ALL )
print ( Style . RESET_ALL )
time . sleep ( 2 )
time . sleep ( 2 )
@ -104,22 +101,22 @@ send.send_keys(data["city"])
send = driver . find_element_by_id ( " checkout_shipping_address_zip " )
send = driver . find_element_by_id ( " checkout_shipping_address_zip " )
send . send_keys ( data [ " zip " ] )
send . send_keys ( data [ " zip " ] )
#Continue to shipping
#Continue to shipping and wait for load
driver . find_element_by_id ( " continue_button " ) . click ( )
driver . find_element_by_id ( " continue_button " ) . click ( )
time . sleep ( 2 )
time . sleep ( 2 )
driver . find_element_by_id ( " continue_button " ) . click ( )
driver . find_element_by_id ( " continue_button " ) . click ( )
# Input Card Details
time . sleep ( 2 )
time . sleep ( 2 )
#Switch to iframe
#Switch to iframe and add card data
iframe = driver . find_element_by_xpath ( " //iframe[@class= ' card-fields-iframe ' ] " )
iframe = driver . find_element_by_xpath ( " //iframe[@class= ' card-fields-iframe ' ] " )
driver . switch_to . frame ( iframe )
driver . switch_to . frame ( iframe )
send = driver . find_element_by_xpath ( " //*[@id= ' number ' ] " )
send = driver . find_element_by_xpath ( " //*[@id= ' number ' ] " )
# Add numbers one by one becuase it doesn't like when you add it all at once
# Add numbers one by one becuase it doesn't like when you add it all at once
for i in range ( 0 , len ( testing ) ) :
for i in range ( 0 , len ( cardData ) ) :
send . send_keys ( testing [ i ] )
send . send_keys ( cardData [ i ] )
# Input First and last n ame
# Input firstName and firstN ame
goToParent ( )
goToParent ( )
driver . switch_to . frame ( driver . find_element_by_xpath ( " //*[contains(@id, ' card-fields-name- ' )] " ) )
driver . switch_to . frame ( driver . find_element_by_xpath ( " //*[contains(@id, ' card-fields-name- ' )] " ) )
driver . find_element_by_id ( " name " ) . send_keys ( data [ " firstName " ] )
driver . find_element_by_id ( " name " ) . send_keys ( data [ " firstName " ] )
@ -128,14 +125,15 @@ driver.find_element_by_id("name").send_keys(" " + data["lastName"])
# Input expiration date
# Input expiration date
goToParent ( )
goToParent ( )
driver . switch_to . frame ( driver . find_element_by_xpath ( " //*[contains(@id, ' card-fields-expiry- ' )] " ) )
driver . switch_to . frame ( driver . find_element_by_xpath ( " //*[contains(@id, ' card-fields-expiry- ' )] " ) )
for i in range ( 0 , len ( t estingE xpo) ) :
for i in range ( 0 , len ( expoData ) ) :
driver . find_element_by_id ( " expiry " ) . send_keys ( t estingE xpo[ i ] )
driver . find_element_by_id ( " expiry " ) . send_keys ( expoData [ i ] )
# Input CVC
# Input CVC
goToParent ( )
goToParent ( )
driver . switch_to . frame ( driver . find_element_by_xpath ( " //*[contains(@id, ' card-fields-verification_value- ' )] " ) )
driver . switch_to . frame ( driver . find_element_by_xpath ( " //*[contains(@id, ' card-fields-verification_value- ' )] " ) )
driver . find_element_by_id ( " verification_value " ) . send_keys ( data [ " cvc " ] )
driver . find_element_by_id ( " verification_value " ) . send_keys ( data [ " cvc " ] )
# Press pay
goToParent ( )
goToParent ( )
total = driver . find_element_by_xpath ( " /html/body/div/div/aside/div[2]/div[1]/div/div[3]/table/tfoot/tr/td/span[2] " ) . text
total = driver . find_element_by_xpath ( " /html/body/div/div/aside/div[2]/div[1]/div/div[3]/table/tfoot/tr/td/span[2] " ) . text
Pay = input ( Fore . BLUE + " Your total is: " + Fore . GREEN + total + Fore . RED + " \n Submit order? Yes/No: " )
Pay = input ( Fore . BLUE + " Your total is: " + Fore . GREEN + total + Fore . RED + " \n Submit order? Yes/No: " )