def change_date(browser, absentee_date):
    wait_for_id(browser, "advFindEFGRP0FFLD2CCVALLBL")
    masked_date = browser.find_element_by_id("advFindEFGRP0FFLD2CCVALLBL")
    hover = ActionChains(browser).move_to_element(masked_date)
    hover.perform()
    date = browser.find_element_by_id("DateInput")
    date.click()
    date.clear()
    date.send_keys(absentee_date)
示例#2
0
def find_allotment(driver, dt=None, mecd=None):
    #P - PURHCASE, R - REDEMPTION
    if dt:
        dt = dt
    else:
        dt = datetime.now().strftime('%d-%b-%Y')

    url = settings.BSESTAR_ALLOTMENT_PG[settings.LIVE]
    driver.get(url)
    print("Navigated to order status page")

    date = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, 'txtToDate')))
    date.clear()
    date.send_keys(dt)
    sleep(2)  # needed as page refreshes after setting date

    submit = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "btnSubmit")))
    submit.click()
    sleep(2)

    ## parse the table- find orders for this date
    table = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located(
            (By.XPATH, "//table[@class='glbTableD']/tbody")))
    print('html loading done')
    rows = table.find_elements(By.XPATH,
                               "tr[@class='tblERow'] | tr[@class='tblORow']")

    allotment_recs = []
    for row in rows:
        fields = row.find_elements(By.XPATH, "td")
        recs = {
            'order_id': fields[1].text,
            'order_dt': fields[4].text,
            'scheme_code': fields[5].text,
            'member_id': fields[10].text,
            'folio_num': fields[12].text,
            'client_code': fields[15].text,
            'client_name': fields[16].text,
            'alloted_nav': fields[18].text,
            'alloted_unt': fields[19].text,
            'alloted_amt': fields[20].text,
            'remarks': fields[22].text,
            'order_type': fields[25].text,
            'order_subtype': fields[33].text,
            'sipreg_num': fields[26].text,
            'sipreg_dt': fields[27].text,
            'dp_typ': fields[32].text,
        }
        allotment_recs.append(recs)

    print("line 262:", allotment_recs)

    return allotment_recs, driver
示例#3
0
def find_order_status(driver, dt=None, tran_type='P',frmclntcd = None,toclntcd = None):
#P - PURHCASE, R - REDEMPTION
    if dt:
        dt = dt
    else:
        dt = datetime.now().strftime('%d-%m-%Y'))


    url = settings.BSESTAR_ORDER_STATUS_PG[settings.LIVE]
    driver.get(url)
    print("Navigated to order status page")

    date = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'txtToDate')))
    date.clear()
    date.send_keys(date_dict['date'].strftime("%d-%b-%Y"))
    sleep(2)    # needed as page refreshes after setting date
    # make_ready(driver)

    if frmclntcd == None or frmclntcd == '' or toclntcd == None or toclntcd == '':
        pass
    else:
        frmcltcd = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'txtFromCltCode')))
        date.clear()
        date.send_keys(frmclntcd)

        tocltcd = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'txtToCltCode')))
        date.clear()
        date.send_keys(toclntcd)

    element = driver.find_element_by_xpath('//*[@id="ddlBuySell"]')
    all_options = element.find_elements_by_tag_name("option")
    for option in all_options:
        print("Value is: %s" % option.get_attribute("value"))
        if option.get_attribute("value") == tran_type:
            #selected option purcharse or redemption as per tran_type
            option.click()

    submit = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "btnSubmit")))
    submit.click()
    sleep(2)
    
    ## parse the table- find orders for this date
    table = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//table[@class='glbTableD']/tbody")))
    print ('html loading done')
    rows = table.find_elements(By.XPATH, "tr[@class='tblERow'] | tr[@class='tblORow']")

    order_status_recs = []
    for row in rows:
        fields = row.find_elements(By.XPATH, "td")
        recs = {
            'order_id' : fields[3].text,
            'status' : fields[18].text,
            'client_code' : fields[5].text,
            'scheme_code' : fields[7].text,
            'buy_sell' : fields[10].text
        }
示例#4
0
    html.send_keys(Keys.PAGE_DOWN)
    time.sleep(1)

    # Pelaksanaan (PART OF LOOP)
    element_click(mark, 1)

    # Media Mark
    element_click(mark, mediaA[i])
    if i == 0:
        element_click(mark, mediaB[i])

    #tanggal (PART OF LOOP?)
    if i == 6:
        dateNow = str(yesterday).split('-')
        date = driver.find_element_by_xpath("%s[%s]" % (inputan, 3))
        date.send_keys(dateNow[1], dateNow[2][0:1], dateNow[0])
    else:
        # jam (PART OF LOOP)
        element_fill(hoursE[i], hoursV[i])
        element_fill(minutesE[i], minutesV[i])

    # materi, import from txt files. (PART OF LOOP OFC)
    if i == 6:
        element_fill(4, materiKuliah[i])
    else:
        element_fill(materiE[i], materiKuliah[i])

    html.send_keys(Keys.PAGE_DOWN)
    time.sleep(10)

    # confirmation box
示例#5
0
def update_order_status(self, driver):
    '''
    Updates status (see field status in Transaction model in transactions) of transactions
    BSEStar hasn't implemented this as an API endpoint so it needs crawling of bsestarmf.in
    '''

    ## fetch the transactions that need to be updated
    tr_queryset = Transaction.objects.filter(
            Q(status__in=('2','4','5')) |
            Q(status='6', order_type='2')
        ).order_by(
            'created'
        )
    tr_list = []
    for tr in tr_queryset:
        ## remove sip transactions whose instalment is not under process
        if tr.order_type == '2' and tr.sip_num_inst_done == len(tr.sip_dates.split(',')):
            pass
        else:
            tr_list.append(tr) 

    ## process transaction time to find order date
    date_dict_list = []
    date_dict = None
    prev_order_d = date(2016, 1, 1)
    for tr in tr_list:
        ## get date of order
        order_dt = tr.created.replace(tzinfo=timezone('UTC')).astimezone(timezone('Asia/Calcutta'))
        if tr.order_type == '1':
            ## get order_id of the transaction  
            order_id = TransResponseBSE.objects.get(trans_no=tr.bse_trans_no).order_id
        else:
            order_ids = tr.sip_order_ids.split(',')
            if len(order_ids) > tr.sip_num_inst_done: 
                order_id = order_ids[tr.sip_num_inst_done]
                if len(order_ids) > 1:
                    ## update order_dt because its a sip instalment
                    order_dt = datetime(*(strptime(tr.sip_dates.split(',')[tr.sip_num_inst_done], "%d%m%y")[0:3]))
                    print order_dt
            else:
                ## problem in sip_order_ids field
                raise Exception(
                    "Update order status: order id not found in Transaction table"
                )
        
        ## dont check for orders/instalments which will be placed in future
        if order_dt.date() > date.today():
            continue
        order_d = self.calculate_order_date(order_dt)
        
        ## raise exception as no order date found
        if not order_d:
            raise Exception(
                "Update order status: order date could not be found"
            )
        
        ## dont check for orders/instalments which are offline currently
        elif order_d > date.today():
            continue
        
        ## save order id and date
        if prev_order_d != order_d:
            date_dict = {
                'date': order_d,
                'ids': [tr.id],
                'order_ids': [order_id],
                'status': ['0'],
                'folio': [''],
            }
            date_dict_list.append(date_dict)
            prev_order_d = order_d
        else: 
            date_dict['ids'].append(tr.id)
            date_dict['order_ids'].append(order_id)
            date_dict['status'].append('0')
            date_dict['folio'].append('')
    
    ## crawl to get orders by date
    for date_dict in date_dict_list:
        ## navigate to page
        line = "https://www.bsestarmf.in/RptOrderStatusReportNew.aspx"
        driver.get(line)
        print (driver.title)
        date = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'txtToDate')))
        date.clear()
        date.send_keys(date_dict['date'].strftime("%d-%b-%Y"))
        sleep(2)    # needed as page refreshes after setting date
        # make_ready(driver)

        submit = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "btnSubmit")))
        submit.click()
        sleep(2)
        # make_ready(driver)
        
        ## parse the table- find orders for this date
        table = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//table[@class='glbTableD']/tbody")))
        print ('html loading done')
        rows = table.find_elements(By.XPATH, "tr[@class='tblERow'] | tr[@class='tblORow']")

        for row in rows:
            fields = row.find_elements(By.XPATH, "td")
            order_id = fields[3].text
            status = fields[18].text
            if status == "ALLOTMENT DONE":
                status = '6'
            elif status == "SENT TO RTA FOR VALIDATION":
                status = '5'
            elif status == "ORDER CANCELLED BY USER":
                status = '1'
            elif status == "PAYMENT NOT RECEIVED TILL DATE":
                status = '-1'

            # match with list of order ids
            for i in range(0, len(date_dict['ids'])):
                if order_id == date_dict['order_ids'][i]:
                    date_dict['status'][i] = status
                    date_dict['folio'][i] = fields[15].text
                    print "found", order_id, status
                    break
            
    ## save status in db
    for date_dict in date_dict_list:
        for i in range(0, len(date_dict['ids'])):
            if date_dict['status'][i] != '0':
                tr = Transaction.objects.get(id=date_dict['ids'][i])
                ## one-time or 1st isnt of sip transaction 
                if tr.status in ['2','4','5']:
                    ## update status and status_comment
                    if date_dict['status'][i] == '-1':
                        if tr.status == '2':
                            tr.status_comment = 'Failed due to no payment'
                        else:
                            tr.status_comment = 'Failed due to error in payment'
                        tr.status = '1'
                    ## update status, folio, datetime
                    elif date_dict['status'][i] == '6':
                        tr.status = date_dict['status'][i]
                        if date_dict['folio'][i] != '':
                            tr.folio_number = date_dict['folio'][i]
                        if tr.order_type == '2':
                            tr.sip_num_inst_done = 1
                        tr.datetime_at_mf = datetime(date_dict['date'].year, date_dict['date'].month, date_dict['date'].day, 12, 0, 0, tzinfo=timezone('UTC'))
                    else:
                        tr.status = date_dict['status'][i]
                
                ## 2nd or later inst of sip transaction 
                elif tr.status == '6' and tr.order_type == '2':
                    if date_dict['status'][i] == '6':
                        ## update sip_num_inst_done as instalment successful
                        tr.sip_num_inst_done += 1
                        if tr.sip_num_inst_done == tr.sip_num_inst:
                            ## update to sip concluded 
                            tr.status = '8'
                    elif date_dict['status'][i] in ['-1', '1']:
                        ## update sip_dates and sip_order_ids as instalment was unsuccessful
                        last_pos = tr.sip_dates.rfind(',')
                        tr.sip_dates = tr.sip_dates[:last_pos]
                        last_pos = tr.sip_order_ids.rfind(',')
                        tr.sip_order_ids = tr.sip_order_ids[:last_pos]     
                tr.save()
示例#6
0
文件: scroll.py 项目: SaWarr/Selenium
from datetime import date
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Chrome('F:\chromedriver.exe')  
driver.get('https://formy-project.herokuapp.com/scroll');

name = driver.find_element_by_id('name')

actions = ActionChains(driver)
actions.move_to_element(name)
name.send_keys('Sam Warren')

date = driver.find_element_by_id('date')
date.send_keys('01/13/1992')
# Consider adding code to fill today's date

driver.quit()