canvas_upload.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. # selenium for web driving
  2. import selenium
  3. from selenium import webdriver
  4. # time for pausing between navigation
  5. import time
  6. # Datetime for recording time of submission
  7. import datetime
  8. # os for file management
  9. import os
  10. def submit_assignment(file_tup):
  11. # Using Chrome to access web
  12. driver = webdriver.Chrome()
  13. time.sleep(5)
  14. # Open the website
  15. driver.get("https://canvas.case.edu")
  16. # Password for Canvas
  17. with open("C:/Users/Will Koehrsen/Desktop/cp.txt", "r") as f:
  18. cp = f.read()
  19. # Locate id and password
  20. id_box = driver.find_element_by_name("username")
  21. pass_box = driver.find_element_by_name("password")
  22. # Send login information
  23. id_box.send_keys("wjk68")
  24. pass_box.send_keys(cp)
  25. # Click login
  26. login_button = driver.find_element_by_name("submit")
  27. login_button.click()
  28. # Find and click on list of courses
  29. courses_button = driver.find_element_by_id("global_nav_courses_link")
  30. courses_button.click()
  31. # Wait for the page to load
  32. time.sleep(2)
  33. # Get the name of the folder
  34. folder = file_tup[0]
  35. # Class to select depends on folder
  36. if folder == "DSCI451":
  37. class_select = driver.find_element_by_link_text(
  38. "Applied Data Science Research (100/5047)"
  39. )
  40. elif folder == "DCSI453":
  41. class_select = driver.find_element_by_link_text(
  42. "Data Science: Statistical Learning, Modeling and Prediction (100/5046)"
  43. )
  44. elif folder == "EECS491":
  45. class_select = driver.find_element_by_link_text(
  46. "Artificial Intelligence: Probabilistic Graphical Models (100/10039)"
  47. )
  48. elif folder == "EECS531":
  49. class_select = driver.find_element_by_link_text("Computer Vision (100/10040)")
  50. # Click on the specific class
  51. class_select.click()
  52. assignment_button = driver.find_element_by_link_text("Assignments")
  53. assignment_button.click()
  54. # Wait for the page to load
  55. time.sleep(2)
  56. # Locate the specific assignment
  57. file_name = file_tup[1]
  58. file_locator = file_name.split(".")[0]
  59. specific_assigment = driver.find_element_by_link_text(file_locator)
  60. specific_assigment.click()
  61. # Click on the button to submit an assignment
  62. try:
  63. submit_assignment_button = driver.find_element_by_link_text("Submit Assignment")
  64. # If assignment has already been submitted
  65. except:
  66. print("Assignment already submitted, re-submitting")
  67. submit_assignment_button = driver.find_element_by_link_text(
  68. "Re-submit Assignment"
  69. )
  70. submit_assignment_button.click()
  71. # Wait for the page to load
  72. time.sleep(2)
  73. # Choose file button
  74. choose_file = driver.find_element_by_name("attachments[0][uploaded_data]")
  75. # Send the name of the file to the button
  76. file_location = os.path.join(submission_dir, folder, file_name)
  77. choose_file.send_keys(file_location)
  78. submit_assignment = driver.find_element_by_id("submit_file_button")
  79. submit_assignment.click()
  80. # Wait for the page
  81. time.sleep(2)
  82. # Move the file to the submitted folder
  83. submitted_dir = "C:/Users/Will Koehrsen/Desktop/submitted_assignments"
  84. submitted_dir = os.path.join(submitted_dir, folder)
  85. submitted_file_name = "Submitted " + file_name
  86. submitted_file_location = os.path.join(submitted_dir, submitted_file_name)
  87. # os.rename(file_location, submitted_file_location)
  88. print(
  89. "{} Assignment for Class {} successfully submitted at {}.".format(
  90. file_name, folder, datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  91. )
  92. )
  93. print("Submitted assignment available at {}.".format(submitted_file_location))
  94. return
  95. if __name__ == "__main__":
  96. # Build tuple of (folder, file) to turn in
  97. submission_dir = "C:/Users/Will Koehrsen/Desktop/completed_assignments"
  98. dir_list = list(os.listdir(submission_dir))
  99. for directory in dir_list:
  100. file_list = list(os.listdir(os.path.join(submission_dir, directory)))
  101. if len(file_list) != 0:
  102. file_tup = (directory, file_list[0])
  103. if len(file_tup) == 0:
  104. print("No files to submit")
  105. else:
  106. print('Assignment "{}" for "{}" found.'.format(file_tup[1], file_tup[0]))
  107. input("Press enter to proceed: ")
  108. submit_assignment(file_tup)