Hello Readers,
Today we will try to learn browser automation using Python and Selenium automation tool.
We will write a code to automate login process of Zerodha trading platform using selenium and python in Google Chrome browser.
Place a file named zerodha-credentials.json at the same location as the actual python script with zerodha credentials as below:
{ | |
"username": "ab12312", | |
"password": "changeit", | |
"pin": "123123" | |
} |
Run the below script to automatically login, code is mostly self-explanatory leave a comment if any doubt, I will try to respond.
from selenium import webdriver | |
# used to ID the different keys on the keyboard define options | |
from selenium.webdriver.chrome.options import Options | |
# locate | |
from selenium.webdriver.common.by import By | |
from selenium.webdriver.support import expected_conditions as EC | |
from selenium.webdriver.support.ui import WebDriverWait | |
import time | |
import json | |
def load_credentials(): | |
with open("zerodha-credentials.json") as creds: | |
data = json.load(creds) | |
return data | |
def get_access_token(): | |
options = Options() | |
options.add_argument("start-maximized") | |
options.add_argument("disable-infobars") | |
options.add_argument("--disable-extensions") | |
driver = webdriver.Chrome(options=options) | |
# the website we want to open | |
driver.get("https://kite.zerodha.com") | |
data = load_credentials() | |
# identify login section | |
WebDriverWait(driver, 10).until( | |
EC.visibility_of_element_located((By.XPATH, '//div[@class="login-form"]//form'))) | |
# enter the ID | |
driver.find_element_by_xpath("//*[@type='text']").send_keys(data['username']) | |
# enter the password | |
driver.find_element_by_xpath("//*[@type='password']").send_keys(data['password']) | |
# submit | |
driver.find_element_by_xpath("//*[@type='submit']").click() | |
driver.maximize_window() | |
# sleep for a second so that the page can submit and proceed to upcoming question (2fa) | |
time.sleep(1) | |
# identify login section for 2fa | |
WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, '//div[@class="login-form"]//form'))) | |
# enter the 2fa code | |
driver.find_element_by_xpath("//*[@type='password']").send_keys(data['pin']) | |
# submit | |
driver.find_element_by_xpath("//*[@type='submit']").click() | |
print(driver.current_url) | |
# Click on Postions Page | |
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//span[text()='Positions']"))).click() | |
# wait for redirection | |
WebDriverWait(driver, 10).until(EC.url_contains('status=success')) | |
if __name__ == "__main__": | |
get_access_token() |
Note: Think before storing your credentials in plain text, potential risk of it being compromised. This post is for education purpose to learn how we can automate web surfing using Python.
No comments:
Post a Comment