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")