Пример #1
0
def loginTest(cred, browser="PhantomJS"):
    logfilename = datetime.strftime(datetime.now(),
                                    '%Y-%m-%d %H_%M_%S') + '.log'
    with open('../tmp/' + logfilename, 'w+') as f:
        sys.stdout = f
        driver = getDriver(browser)
        i, t0 = 1, time.time()
        for login_pair in cred:
            t = time.time()
            print("# {0} ID: {1}".format(i, login_pair[0]))
            i += 1
            try:
                driver.get(amex_url)
                amexLogIn(driver, login_pair[0], login_pair[1], 'eliloUserID',
                          'eliloPassword')
            except:
                print("Something is wrong with login\n")
                continue
            time.sleep(2)
            closeFeedback(driver)
            offer_names = collectOfferNames(driver)
            print("Available offers are: {}".format(offer_names))
            if offer_names: clickOnOffers(driver)
            while not driver.find_elements_by_id('eliloUserID'):
                try:
                    amexLogOut(driver)
                except:
                    pass
            print("Time used: %0.1f seconds\n" % (time.time() - t))
        driver.quit()
        print("** Summary **\nTotal time used: %0.1f seconds" %
              (time.time() - t0))
Пример #2
0
def findBestOffer(link, card, best_offer, browser="Chrome"):

    ret = False

    # Step 1: check correct refer link
    if (len(link) > 0):
        driver = getDriver(browser)
        driver.execute_script("window.open('www.google.com');")
        time.sleep(1)
        google_window = driver.current_window_handle  # Define main window
        while(ret == False):
            driver.execute_script("window.open('');")
            # Define Bing window
            new_window = [
                window for window in driver.window_handles if window != google_window][0]
            driver.switch_to.window(new_window)

            time.sleep(1)
            if (ret):
                print("DONE")
            else:
                ret = referOfferProcess(link, card, best_offer, driver)
                if not ret:
                    driver.execute_script("window.close();")
                    time.sleep(1)
                    driver.switch_to.window(google_window)
Пример #3
0
def loginTest(cred, browser="PhantomJS"):
  logfilename = datetime.strftime(datetime.now(), '%Y-%m-%d %H_%M_%S') + '.log'
  with open('../tmp/' + logfilename, 'w+') as f:
    sys.stdout = f 
    driver = getDriver(browser)
    i, t0  = 1, time.time()
    for login_pair in cred:
      t = time.time()
      print("# {0} ID: {1}".format(i, login_pair[0]))
      i += 1
      try:
        driver.get(amex_url)
        time.sleep(2)
        amexLogIn(driver, login_pair[0], login_pair[1], 'eliloUserID', 'eliloPassword')
      except:
        print("Something is wrong with login\n")
        continue
      time.sleep(5)
      closeFeedback(driver)
      time.sleep(3)
      offer_names = collectOfferNames(driver)
      print("Available offers are: {}".format(offer_names))
      if offer_names: clickOnOffers(driver)
      while not driver.find_elements_by_id('eliloUserID'):
        try: amexLogOut(driver)
        except: pass
      print("Time used: %0.1f seconds\n" % (time.time() - t))
    driver.quit()
    print("** Summary **\nTotal time used: %0.1f seconds" % (time.time() - t0))
Пример #4
0
def getAddedOffers(cred, browser = "Chrome"):
  offer_map = {}
  offer_key_desc = {}
  username = [x[0] for x in cred]
  driver = getDriver(browser)
  for login_pair in cred:
    try:
      driver.get(amex_url)
      time.sleep(3)
      amexLogIn(driver, login_pair[0], login_pair[1], 'eliloUserID', 'eliloPassword')
    except:
      print("login error")
      continue
    time.sleep(5)
    attempt = 0
    while not driver.find_elements_by_class_name("offer-expires") and attempt < 5:
        attempt += 1
        time.sleep(1)
    closeFeedback(driver)
    offer_expires = [o.text.lower() for o in driver.find_elements_by_class_name("offer-expires")]
    offer_expires = [get_date(o) for o in offer_expires]
    offer_info = [o.text.lower().encode('ascii', 'ignore').decode('utf-8', 'ignore')
      for o in driver.find_elements_by_class_name("offer-info")]
    offer_info = [o.replace(', get', ' and get').replace(',', '') for o in offer_info]
    # filter out things don't start with 'Spend'
    offer_expires = [offer_expires[i] for i in range(len(offer_expires)) 
      if offer_info[i].startswith('spend')]
    offer_info = [o for o in offer_info if o.startswith('spend')]
    offer_info = [o.split('\n') for o in offer_info]
    offer_desc = [o[0] for o in offer_info]
    offer_info = [','.join([re.findall(r'spend \$(\d+)', o[0])[0], o[1]]) for o in offer_info]
    offer_key = [','.join(x) for x in zip(offer_expires, offer_info)]
    for k in offer_key:
      if k in offer_map: offer_map[k].append(login_pair[0])
      else: offer_map[k] = [login_pair[0]]
    for i in range(len(offer_key)):
      if offer_key[i] in offer_key_desc: offer_key_desc[offer_key[i]].update([offer_desc[i]])
      else: offer_key_desc[offer_key[i]] = set([offer_desc[i]])
    while not driver.find_elements_by_id('eliloUserID'):
      try: amexLogOut(driver)
      except: pass
  driver.quit()
  offer_key_desc = {k: ' OR '.join(v) for k, v in offer_key_desc.items()}

  offer_df = {k: ['+' if x in v else '' for x in username] for k, v in offer_map.items()}
  offer_df = pd.DataFrame(offer_df)
  cols = offer_df.columns.tolist()
  cols.sort(key=lambda x: (datetime.strptime(x.split(',')[0].strip(), '%m/%d/%Y'), 
    x.split(',')[2].strip()))
  offer_df = offer_df[cols]
  offer_df.index = username
  info_rows = pd.DataFrame([[offer_key_desc[x], x.split(',')[0].strip()] for x in cols]).T
  info_rows.index = ['_description', '_expiration']
  colnames = [x.split(',')[2].strip() for x in cols]
  info_rows.columns = offer_df.columns = colnames
  res = pd.concat([info_rows, offer_df])

  file_name = 'offers_' + datetime.strftime(datetime.now(), '%Y-%m-%d_%H-%M-%S') + '.csv'
  res.to_csv('../tmp/' + file_name, sep=',', encoding='utf-8')
Пример #5
0
def getAddedOffers(cred, browser = "Chrome"):
  offer_map = {}
  offer_key_desc = {}
  username = [x[0] for x in cred]
  driver = getDriver(browser)
  for login_pair in cred:
    try:
      driver.get(amex_url)
      amexLogIn(driver, login_pair[0], login_pair[1], 'eliloUserID', 'eliloPassword')
    except:
      print("login error")
      continue
    time.sleep(1)
    while not driver.find_elements_by_class_name("offer-expires"): time.sleep(1)
    closeFeedback(driver)
    offer_expires = [o.text.lower() for o in driver.find_elements_by_class_name("offer-expires")]
    offer_expires = [get_date(o) for o in offer_expires]
    offer_info = [o.text.lower() for o in driver.find_elements_by_class_name("offer-info")]
    offer_info = [o.replace(', get', ' and get').replace(',', '') for o in offer_info]
    # filter out things don't start with 'Spend'
    offer_expires = [offer_expires[i] for i in range(len(offer_expires)) 
      if offer_info[i].startswith('spend')]
    offer_info = [o for o in offer_info if o.startswith('spend')]
    offer_info = [o.split('\n') for o in offer_info]
    offer_desc = [o[0] for o in offer_info]
    offer_info = [','.join([re.findall(r'spend \$(\d+)', o[0])[0], o[1]]) for o in offer_info]
    offer_key = [','.join(x) for x in zip(offer_expires, offer_info)]
    for k in offer_key:
      if k in offer_map: offer_map[k].append(login_pair[0])
      else: offer_map[k] = [login_pair[0]]
    for i in range(len(offer_key)):
      if offer_key[i] in offer_key_desc: offer_key_desc[offer_key[i]].update([offer_desc[i]])
      else: offer_key_desc[offer_key[i]] = set([offer_desc[i]])
    while not driver.find_elements_by_id('eliloUserID'):
      try: amexLogOut(driver)
      except: pass
  driver.quit()
  offer_key_desc = {k: ' OR '.join(v) for k, v in offer_key_desc.items()}

  offer_df = {k: ['+' if x in v else '' for x in username] for k, v in offer_map.items()}
  offer_df = pd.DataFrame(offer_df)
  cols = offer_df.columns.tolist()
  cols.sort(key=lambda x: (datetime.strptime(x.split(',')[0].strip(), '%m/%d/%Y'), 
    x.split(',')[2].strip()))
  offer_df = offer_df[cols]
  offer_df.index = username
  info_rows = pd.DataFrame([[offer_key_desc[x], x.split(',')[0].strip()] for x in cols]).T
  info_rows.index = ['_description', '_expiration']
  colnames = [x.split(',')[2].strip() for x in cols]
  info_rows.columns = offer_df.columns = colnames
  res = pd.concat([info_rows, offer_df])

  file_name = 'offers_' + datetime.strftime(datetime.now(), '%Y-%m-%d_%H-%M-%S') + '.csv'
  res.to_csv('../tmp/' + file_name, sep=',', encoding='utf-8')
Пример #6
0
def loginTest(cred, browser="PhantomJS"):
  logfilename = 'balance_' + datetime.strftime(datetime.now(), '%Y-%m-%d %H_%M_%S') + '.log'
  with open('../tmp/' + logfilename, 'w+') as f:
    sys.stdout = f 
    driver = getDriver(browser)
    i, t0  = 1, time.time()
    for login_pair in cred:
      try:
        driver.get(amex_url)
        time.sleep(2)
        amexLogIn(driver, login_pair[0], login_pair[1], 'eliloUserID', 'eliloPassword')
      except:
        print("# {0} ID: {1} Something is wrong with login".format(i, login_pair[0]))
        continue
      time.sleep(5)
      closeFeedback(driver)
      bal = getBalance(driver)
      print("# {0} ID: {1} Balance: {2}".format(i, login_pair[0], bal))
      i += 1
      while not driver.find_elements_by_id('eliloUserID'):
        try: amexLogOut(driver)
        except: pass
    driver.quit()
    print("** Summary **\nTotal time used: %0.1f seconds" % (time.time() - t0))
Пример #7
0
def getAddedOffers(username, password, outputlog=True, browser="Chrome"):
    # re-route output
    orig_stdout = sys.stdout
    logfile = None
    if outputlog:
        # use current time as log file
        logfilename = datetime.strftime(datetime.now(), '%Y-%m-%d %H:%M:%S')
        logfilename = "offers " + logfilename.replace(':', '_') + ".csv"
        logfile = open('../tmp/' + logfilename, 'w+')
        sys.stdout = logfile
    # input error handle
    if username == [] or password == [] or len(username) != len(password):
        print "username array does not have the same length as password array..."
        # close log file
        if outputlog:
            sys.stdout = orig_stdout
            logfile.close()
        return

    # use phantom JS / Firefox
    # driver = webdriver.PhantomJS()
    # driver = webdriver.Firefox()
    driver = getDriver(browser)
    majorOfferDescMap = dict()
    majorOfferDateMap = dict()
    majorDateOfferPair = set()
    userOffersList = []

    # loop through all username/password combinations
    for idx in range(len(username)):
        eachbegintime = time.time()
        try:
            driver.get(amexWebsite)
        except:
            print "website is not available..."
            # close log file
            if outputlog:
                sys.stdout = orig_stdout
                logfile.close()
            return
        # fill and submit login form
        try:
            amexLogIn(driver, username[idx], password[idx])
        except:
            print "username/password combination is incorrect..."
            continue
        time.sleep(2)
        closeFeedback(driver)
        clickOnAddedToCard(driver)
        clickOnLoadMore(driver)

        # main program
        offers = driver.find_elements_by_class_name("ah-card-offer")
        offerstext = [offer.text.encode('utf-8') for offer in offers]
        offersplit = [text.split('\n') for text in offerstext]
        offerDescMap = dict()
        offerDateMap = dict()
        dateOfferPair = set()
        offersSet = set()
        # discard expired offers
        for sp in offersplit:
            expiration = dt.strptime(sp[3], '%m/%d/%Y')
            if expiration > dt.now():
                offerDescMap[sp[0]] = sp[1]
                offerDateMap[sp[0]] = sp[3]
                dateOfferPair.add((expiration, sp[0]))
                offersSet.add(sp[0])
        majorOfferDescMap.update(offerDescMap)
        majorOfferDateMap.update(offerDateMap)
        majorDateOfferPair.update(dateOfferPair)
        userOffersList.append(offersSet)

        time.sleep(1)
        # logout
        try:
            amexLogOut(driver)
        except:
            pass
        time.sleep(1)

    majorDateOfferList = list(majorDateOfferPair)
    majorDateOfferList.sort(key=lambda tup: tup[0])
    # write 1st line
    for dateOffer in majorDateOfferList:
        offer = dateOffer[1].replace(',', '.')
        sys.stdout.write(',' + offer)
    sys.stdout.write('\n')
    # write 2nd line
    for dateOffer in majorDateOfferList:
        desc = majorOfferDescMap[dateOffer[1]].replace(',', ' and')
        sys.stdout.write(',' + desc)
    sys.stdout.write('\n')
    # write 3rd line
    for dateOffer in majorDateOfferList:
        date = majorOfferDateMap[dateOffer[1]]
        sys.stdout.write(',' + date)
    sys.stdout.write('\n')
    # write the rest
    for i in range(len(username)):
        sys.stdout.write(username[i])
        for dateOffer in majorDateOfferList:
            if dateOffer[1] in userOffersList[i]:
                sys.stdout.write(',+')
            else:
                sys.stdout.write(',')
        sys.stdout.write('\n')

    # close log file
    if outputlog:
        sys.stdout = orig_stdout
        logfile.close()

    # close browser
    driver.quit()
Пример #8
0
def loginTest(username, password, outputlog = True, browser = "PhantomJS"):
  orig_stdout = sys.stdout # re-route output
  logfile = None
  if outputlog:
    # use current time in log file name
    logfilename = datetime.strftime(datetime.now(), '%Y-%m-%d %H:%M:%S')
    logfilename = logfilename.replace(':', '_') + ".log"
    logfile = open('../tmp/' + logfilename, 'w+')
    sys.stdout = logfile

  # input error handle
  if username == [] or password == [] or len(username) != len(password):
    print "username array does not have the same length as password array..."
    # close log file
    if outputlog:
      sys.stdout = orig_stdout
      logfile.close()
    return

  driver = getDriver(browser)
  begintime  = time.time()

  # loop through all username/password combinations
  for idx in range(len(username)):
    eachbegintime = time.time()
    print "--------------------------------------------------------------"
    print "#", idx+1, "ID:", username[idx]
    # just in case network connection is broken 
    try:
      driver.get(amexWebsite)
    except:
      print "website is not available..."
      if outputlog:
        sys.stdout = orig_stdout
        logfile.close() # close log file
      return

    # fill and submit login form
    try:
      amexLogIn(driver, username[idx], password[idx])
    except:
      print "Something is wrong with login"
      continue # end current loop

    closeFeedback(driver) # just in case the feedback banner appears
    clickOnLoadMore(driver) # scroll down and click load more

    # store offer names and click on offers
    offernames = collectOfferNames(driver)
    print "Available offers are:", offernames
    if not offernames == '':
      clickOnOffers(driver)
    time.sleep(1)
      
    # logout
    try:
      amexLogOut(driver)
    except:
      pass # pass would be fine, since the launch of the url is the log-in page no matter what
    time.sleep(1)

    eachendtime = time.time()
    print "Time used: %0.2f seconds" % (eachendtime - eachbegintime)
    print "--------------------------------------------------------------"

  endtime = time.time()
  # print summary
  print "--------------------------------------------------------------"
  print "** Summary **"
  print "Total time used: %0.2f seconds" % (endtime - begintime)
  print "--------------------------------------------------------------"

  # close log file
  if outputlog:
    sys.stdout = orig_stdout
    logfile.close()
  # close browser
  driver.quit()
Пример #9
0
def loginTest(username, password, outputlog = True, tweet = None):
  # re-route output
  orig_stdout = sys.stdout
  logfile = None
  if outputlog:
    # use current time as log file
    logfilename = datetime.strftime(datetime.now(), '%Y-%m-%d %H:%M:%S')
    logfilename = "twitter_" + logfilename.replace(':', '_') + ".log"
    logfile = open('../tmp/' + logfilename, 'w+')
    sys.stdout = logfile
  # input error handle
  if username == [] or password == [] or len(username) != len(password):
    print "username array does not have the same length as password array..."
    # close log file
    if outputlog:
      sys.stdout = orig_stdout
      logfile.close()
    return

  begintime  = time.time()

  # loop through all username/password combinations
  for idx in range(len(username)):
    driver = getDriver('chrome')
    print "--------------------------------------------------------------"
    print "#%s ID:%s" % (idx+1, username[idx])
    # just in case network connection is broken 
    try:
      driver.get(website)
    except:
      print "website is not available..."
      # close log file
      if outputlog:
        sys.stdout = orig_stdout
        logfile.close()
      driver.quit()
      return

    time.sleep(2)

    # login
    try:
      twitterLogIn(driver, username[idx], password[idx])
    except:
      print "username/password combination is incorrect..."
      print "--------------------------------------------------------------"
      continue # end current loop

    time.sleep(2)
    skipAddPhoneNumber(driver)
    clickOnBanner(driver)
    time.sleep(1)

    # main program
    status = 'unknown'
    try:
      driver.find_element_by_id("challenge_response")
      status = 'challenge'
    except:
      pass

    try:
      driver.find_element_by_id("global-new-tweet-button")
      status = 'OK'
    except:
      pass

    try:
      driver.find_element_by_id("account-suspended")
      status = 'suspended'
    except:
      pass

    print "Status: %s" % status
    if status in ('challenge', 'suspended'):
      print "have to skip this one..."
      driver.quit() # close browser
      continue
    time.sleep(1)

    if not tweet is None:
      try:
        sendTweet(driver, tweet)
        time.sleep(1)
      except:
        print "can't send tweet"
        pass
    driver.get("https://twitter.com/i/notifications")  # load notification page
    time.sleep(1)

    if status != 'challenge':
      # logout
      try:
        twitterLogOut(driver)
      except:
        print "Error: Cannot find logout button [%s]" % username[idx]
        time.sleep(10)
        if outputlog:
          sys.stdout = orig_stdout
          logfile.close()
        driver.quit()
    print "--------------------------------------------------------------"

    driver.refresh()
    time.sleep(2)
    try:
      twitterLogOut(driver)
    except:
      pass

    driver.quit() # close browser
  
  endtime = time.time()
  # print summary
  print "--------------------------------------------------------------"
  print "** Summary **"
  print "Total time used: %0.2f seconds" % (endtime - begintime)
  print "--------------------------------------------------------------"

  # close log file
  if outputlog:
    sys.stdout = orig_stdout
    logfile.close()
Пример #10
0
def loginTest(username, password, giftcards, outputlog=True, browser="PhantomJS"):
    '''
    orig_stdout = sys.stdout  # re-route output
    logfile = None
    if outputlog:
        # use current time in log file name
        logfilename = datetime.strftime(datetime.now(), '%Y-%m-%d %H:%M:%S')
        logfilename = logfilename.replace(':', '_') + ".log"
        logfile = open('../tmp/' + logfilename, 'w+')
        sys.stdout = logfile
    # input error handle
    if username == [] or password == [] or len(username) != len(password):
        print "username array does not have the same length as password array..."
        # close log file
        if outputlog:
            sys.stdout = orig_stdout
            logfile.close()
        return
    '''
    driver = getDriver(browser)
    begintime = time.time()

    eachbegintime = time.time()
    print "--------------------------------------------------------------"
    print "ID:", username
    # just in case network connection is broken
    try:
        driver.get(target_website)
    except:
        print "website is not available..."
        if outputlog:
            sys.stdout = orig_stdout
            logfile.close()  # close log file
        return

        # manual now

    targetLogIn(driver, username, password)
    # place orders
    all_used_giftcards = []
    while True:
        #'''
        for item_url in item_urls:
            driver.get(item_url)
            element = WebDriverWait(driver, 20).until(lambda driver: driver.find_element_by_id('page-meta'))
            driver.execute_script("arguments[0].click();", element)
            el = WebDriverWait(driver, 20).until(lambda driver: driver.find_element_by_id('sbc-quantity-default'))
            options = WebDriverWait(el, 20).until(lambda el: el.find_elements_by_tag_name('option'))
            max_option = options[-1]
            max_option.click()
            time.sleep(1)
            add_to_cart_button = WebDriverWait(driver, 20).until(lambda driver: driver.find_element_by_xpath("//*[@class='sbc-add-to-cart btn btn-primary btn-lg btn-block sbc-selected']"))
            driver.execute_script("arguments[0].click();", add_to_cart_button)
            time.sleep(5)
        #'''
        #'''
        #add pu item:
        driver.get(pu_url)
        element = WebDriverWait(driver, 20).until(lambda driver: driver.find_element_by_id('page-meta'))
        driver.execute_script("arguments[0].click();", element)
        add_to_cart_button = WebDriverWait(driver, 20).until(lambda driver: driver.find_element_by_xpath(
            "//*[@class='sbc-add-to-cart btn btn-primary btn-lg btn-block sbc-selected']"))
        driver.execute_script("arguments[0].click();", add_to_cart_button)
        time.sleep(5)
        #'''

        # cart page, choose pu  class: custom-radio radio-reference form--control js-fulfillmentRadioBtn js-shipRadio
        driver.get(target_cart)
        time.sleep(5)
        element = WebDriverWait(driver, 20).until(lambda driver: driver.find_element_by_id('page-meta'))
        driver.execute_script("arguments[0].click();", element)
        time.sleep(1)
        pu_box = WebDriverWait(driver, 20).until(lambda driver: driver.find_element_by_class_name('puisCheckBox'))
        pu_check = pu_box.find_element_by_xpath("//input[@class='custom-radio form--control puis_radio js-fulfillmentRadioBtn js-puisRadio']")
        #if not pu_check.is_selected():
        driver.execute_script("arguments[0].click();", pu_check)
        raw_input("Press Enter to continue...")
        ready_button = WebDriverWait(driver, 20).until(lambda driver: driver.find_element_by_id('checkout-link'))
        driver.execute_script("arguments[0].click();", ready_button)
        time.sleep(5)

        # checkout page
        driver.get(target_checkout)
        time.sleep(5)
        element = WebDriverWait(driver, 20).until(lambda driver: driver.find_element_by_id('page-meta'))
        driver.execute_script("arguments[0].click();", element)
        time.sleep(1)
        # get total
        remain_total = WebDriverWait(driver, 20).until(lambda driver: driver.find_elements_by_xpath("//*[@class='h-float-right ']"))[0].text
        remain_total = round(float(remain_total[1:]),2)
        # apply gc
        used_giftcards = set()
        error_giftcards = set()
        time.sleep(1)
        element = WebDriverWait(driver, 20).until(lambda driver: driver.find_element_by_id('creditCard'))
        if element.is_selected():
            driver.execute_script("arguments[0].click();", element)
        time.sleep(1)
        element = WebDriverWait(driver, 20).until(lambda driver: driver.find_element_by_id('giftCard'))
        if not element.is_selected():
            driver.execute_script("arguments[0].click();", element)
        time.sleep(1)
        giftcards = list(giftcards)
        for i in range(0, len(giftcards)):
            number = giftcards[i][0]
            pin = giftcards[i][1]
            balance = giftcards[i][2]
            for digit in number:
                WebDriverWait(driver, 20).until(lambda driver: driver.find_element_by_id('giftcard_number')).send_keys(digit)
                time.sleep(0.05)
            for digit in pin:
                WebDriverWait(driver, 20).until(lambda driver: driver.find_element_by_id('access_number')).send_keys(digit)
                time.sleep(0.05)
            time.sleep(2)
            # TODO Here we may have bad gift cards.
            elements = driver.find_elements_by_xpath("//*[@class='h-float-right']")
            for element in elements:
                if element.text.strip():
                    new_remain_total = element.text.strip()
            new_remain_total = round(float(new_remain_total[1:]),2)
            if not new_remain_total:
                balance -= remain_total
                giftcards[i] = (number, pin, balance)
                break
            else:
                if new_remain_total != remain_total - balance:
                    print '!!!!!!wrong balance!!!!!', giftcards[i]
                used_giftcards.add((number, pin, balance))
                all_used_giftcards.append((number, pin, 0))
                remain_total = new_remain_total
        if new_remain_total:
            exit()

        # review
        time.sleep(5)
        element = WebDriverWait(driver, 30).until(lambda driver: driver.find_element_by_id('payment_save'))
        time.sleep(1)
        driver.execute_script("arguments[0].click();", element)
        time.sleep(5)
        # go to cart
        while True:
            driver.get(target_cart)
            time.sleep(5)
            element = WebDriverWait(driver, 20).until(lambda driver: driver.find_element_by_id('page-meta'))
            driver.execute_script("arguments[0].click();", element)
            time.sleep(1)
            ready_button = WebDriverWait(driver, 20).until(lambda driver: driver.find_element_by_id('checkout-link'))
            driver.execute_script("arguments[0].click();", ready_button)
            time.sleep(5)
            try:
                element = WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_id('order-submitBm'))
                time.sleep(1)
                driver.execute_script("arguments[0].click();", element)
                time.sleep(5)
            except:
                driver.get(target_checkout)
                time.sleep(5)
            break
        giftcards = set(giftcards)
        giftcards -= used_giftcards
        eachendtime = time.time()
        print "Time used: %0.2f seconds" % (eachendtime - eachbegintime)
        print "remained gc--------------------------------------------------------------"
        for giftcard in giftcards:
            print giftcard
        print "used gc--------------------------------------------------------------"
        for giftcard in used_giftcards:
            print giftcard

    endtime = time.time()
    # print summary
    print "--------------------------------------------------------------"
    print "** Summary **"
    print "Total time used: %0.2f seconds" % (endtime - begintime)
    print "--------------------------------------------------------------"
    print "remained gc--------------------------------------------------------------"
    for giftcard in giftcards:
        print giftcard
    print "used gc--------------------------------------------------------------"
    for giftcard in all_used_giftcards:
        print giftcard

    # close log file
    if outputlog:
        sys.stdout = orig_stdout
        logfile.close()
    # close browser
    driver.quit()