How to check if I am fetching the right request token

55 Views Asked by At

I am trying to create an auto login for zerodha. This is the code I am using but I keep getting error at this part

data = kite.generate_session(request_token, api_secret=key_secret[1])

The error is:

Traceback (most recent call last):
File "c:\Users\prith\Downloads\AccessTokenGenenrator-master\AccessTokenGenenrator-master\webscoketcode.py", line 96, in autologin()
File "c:\Users\prith\Downloads\AccessTokenGenenrator-master\AccessTokenGenenrator-master\webscoketcode.py", line 86, in autologin
data = kite.generate_session(request_token, api_secret=key_secret[1])

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File "C:\Users\prith\AppData\Local\Programs\Python\Python311\Lib\site-packages\kiteconnect\connect.py", line 262, in generate_session
resp = self._post("api.token", params={
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\prith\AppData\Local\Programs\Python\Python311\Lib\site-packages\kiteconnect\connect.py", line 855, in _post
return self._request(route, "POST", url_args=url_args, params=params, is_json=is_json, query_params=query_params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\prith\AppData\Local\Programs\Python\Python311\Lib\site-packages\kiteconnect\connect.py", line 927, in _request
raise exp(data["message"], code=r.status_code)

kiteconnect.exceptions.TokenException: Token is invalid or has expired.

My code:

def autologin():
    token_path = "api_key.txt"
    key_secret = open(token_path, 'r').read().split()
    kite = KiteConnect(api_key=key_secret[0])
    #service = webdriver.chrome.service.Service("C:/Users/prith/Downloads/AccessTokenGenenrator-master/AccessTokenGenenrator-master/chromedriver-win64/chromedriver.exe")
    CHROMEDRIVER_PATH = 'C:/Users/prith/Downloads/AccessTokenGenenrator-master/AccessTokenGenenrator-master/chromedriver-win64/chromedriver.exe'
    #service.start()
    
    # Initialize ChromeOptions and set desired options
    options = webdriver.ChromeOptions()
    service = ChromeService(executable_path=CHROMEDRIVER_PATH)
    #options.add_argument('--headless')
    #options = options.to_capabilities()
    driver = webdriver.Chrome(service=service,options=options)
    driver.get(kite.login_url())
    driver.implicitly_wait(10)
    wait = WebDriverWait(driver, 10)
    username = driver.find_element(By.XPATH,"//input[@type='text']")
    password = driver.find_element(By.XPATH,"//input[@type='password']")
    username.send_keys(key_secret[2])
    password.send_keys(key_secret[3])
    driver.find_element(By.XPATH,"//button[@type='submit']").click()
    totp_input = driver.find_element(By.XPATH,"//input[@type = 'text']")
    totp = TOTP(key_secret[4])
    token = totp.now()
    totp_input.send_keys(token)
    driver.find_element(By.XPATH,"//button[@type='submit']").click()
    time.sleep(10)
    request_token = driver.current_url.split('&sess_id=')[1]
    with open('request_token.txt','w') as the_file:
        the_file.write(request_token)
        print("request_file created")
    driver.quit()
    # generating and storing access token - valid till 6 am the next day
    request_token = open("request_token.txt",'r').read()
    key_secret = open("api_key.txt",'r').read().split()
    kite = KiteConnect(api_key=key_secret[0])
    data = kite.generate_session(request_token, api_secret=key_secret[1])
    with open('access_token.txt', 'w') as file:
        file.write(data["access_token"])
        print("access_file created")
    print("Auto login Completed")
0

There are 0 best solutions below