canvas_upload.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  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('Applied Data Science Research (100/5047)')
  38. elif folder == 'DCSI453':
  39. class_select = driver.find_element_by_link_text('Data Science: Statistical Learning, Modeling and Prediction (100/5046)')
  40. elif folder == 'EECS491':
  41. class_select = driver.find_element_by_link_text('Artificial Intelligence: Probabilistic Graphical Models (100/10039)')
  42. elif folder == 'EECS531':
  43. class_select = driver.find_element_by_link_text('Computer Vision (100/10040)')
  44. # Click on the specific class
  45. class_select.click()
  46. assignment_button = driver.find_element_by_link_text('Assignments')
  47. assignment_button.click()
  48. # Wait for the page to load
  49. time.sleep(2)
  50. # Locate the specific assignment
  51. file_name = file_tup[1]
  52. file_locator = file_name.split('.')[0]
  53. specific_assigment = driver.find_element_by_link_text(file_locator)
  54. specific_assigment.click()
  55. # Click on the button to submit an assignment
  56. try:
  57. submit_assignment_button = driver.find_element_by_link_text('Submit Assignment')
  58. # If assignment has already been submitted
  59. except:
  60. print('Assignment already submitted, re-submitting')
  61. submit_assignment_button = driver.find_element_by_link_text('Re-submit Assignment')
  62. submit_assignment_button.click()
  63. # Wait for the page to load
  64. time.sleep(2)
  65. # Choose file button
  66. choose_file = driver.find_element_by_name('attachments[0][uploaded_data]')
  67. # Send the name of the file to the button
  68. file_location = os.path.join(submission_dir, folder, file_name)
  69. choose_file.send_keys(file_location)
  70. submit_assignment = driver.find_element_by_id('submit_file_button')
  71. submit_assignment.click()
  72. # Wait for the page
  73. time.sleep(2)
  74. # Move the file to the submitted folder
  75. submitted_dir = 'C:/Users/Will Koehrsen/Desktop/submitted_assignments'
  76. submitted_dir = os.path.join(submitted_dir, folder)
  77. submitted_file_name = 'Submitted ' + file_name
  78. submitted_file_location = os.path.join(submitted_dir, submitted_file_name)
  79. # os.rename(file_location, submitted_file_location)
  80. print('{} Assignment for Class {} successfully submitted at {}.'.format(
  81. file_name, folder, datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')))
  82. print('Submitted assignment available at {}.'.format(submitted_file_location))
  83. return
  84. if __name__ == "__main__":
  85. # Build tuple of (folder, file) to turn in
  86. submission_dir = 'C:/Users/Will Koehrsen/Desktop/completed_assignments'
  87. dir_list = list(os.listdir(submission_dir))
  88. for directory in dir_list:
  89. file_list = list(os.listdir(os.path.join(submission_dir, directory)))
  90. if len(file_list) != 0:
  91. file_tup = (directory, file_list[0])
  92. if len(file_tup) == 0:
  93. print('No files to submit')
  94. else:
  95. print('Assignment "{}" for "{}" found.'.format(file_tup[1], file_tup[0]))
  96. input('Press enter to proceed: ')
  97. submit_assignment(file_tup)