Created
March 10, 2018 20:26
-
-
Save WillKoehrsen/127fb3963b12b4f0b339ff0c8ee14558 to your computer and use it in GitHub Desktop.
Automation of Assignment Submisison
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# selenium for web driving | |
import selenium | |
from selenium import webdriver | |
# time for pausing between navigation | |
import time | |
# Datetime for recording time of submission | |
import datetime | |
# os for file management | |
import os | |
def submit_assignment(file_tup): | |
# Using Chrome to access web | |
driver = webdriver.Chrome() | |
time.sleep(5) | |
# Open the website | |
driver.get('https://canvas.case.edu') | |
# Password for Canvas | |
with open('C:/Users/Will Koehrsen/Desktop/cp.txt', 'r') as f: | |
cp = f.read() | |
# Locate id and password | |
id_box = driver.find_element_by_name('username') | |
pass_box = driver.find_element_by_name('password') | |
# Send login information | |
id_box.send_keys('wjk68') | |
pass_box.send_keys(cp) | |
# Click login | |
login_button = driver.find_element_by_name('submit') | |
login_button.click() | |
# Find and click on list of courses | |
courses_button = driver.find_element_by_id('global_nav_courses_link') | |
courses_button.click() | |
# Wait for the page to load | |
time.sleep(2) | |
# Get the name of the folder | |
folder = file_tup[0] | |
# Class to select depends on folder | |
if folder == 'DSCI451': | |
class_select = driver.find_element_by_link_text('Applied Data Science Research (100/5047)') | |
elif folder == 'DCSI453': | |
class_select = driver.find_element_by_link_text('Data Science: Statistical Learning, Modeling and Prediction (100/5046)') | |
elif folder == 'EECS491': | |
class_select = driver.find_element_by_link_text('Artificial Intelligence: Probabilistic Graphical Models (100/10039)') | |
elif folder == 'EECS531': | |
class_select = driver.find_element_by_link_text('Computer Vision (100/10040)') | |
# Click on the specific class | |
class_select.click() | |
assignment_button = driver.find_element_by_link_text('Assignments') | |
assignment_button.click() | |
# Wait for the page to load | |
time.sleep(2) | |
# Locate the specific assignment | |
file_name = file_tup[1] | |
file_locator = file_name.split('.')[0] | |
specific_assigment = driver.find_element_by_link_text(file_locator) | |
specific_assigment.click() | |
# Click on the button to submit an assignment | |
try: | |
submit_assignment_button = driver.find_element_by_link_text('Submit Assignment') | |
# If assignment has already been submitted | |
except: | |
print('Assignment already submitted, re-submitting') | |
submit_assignment_button = driver.find_element_by_link_text('Re-submit Assignment') | |
submit_assignment_button.click() | |
# Wait for the page to load | |
time.sleep(2) | |
# Choose file button | |
choose_file = driver.find_element_by_name('attachments[0][uploaded_data]') | |
# Send the name of the file to the button | |
file_location = os.path.join(submission_dir, folder, file_name) | |
choose_file.send_keys(file_location) | |
submit_assignment = driver.find_element_by_id('submit_file_button') | |
submit_assignment.click() | |
# Wait for the page | |
time.sleep(2) | |
# Move the file to the submitted folder | |
submitted_dir = 'C:/Users/Will Koehrsen/Desktop/submitted_assignments' | |
submitted_dir = os.path.join(submitted_dir, folder) | |
submitted_file_name = 'Submitted ' + file_name | |
submitted_file_location = os.path.join(submitted_dir, submitted_file_name) | |
# os.rename(file_location, submitted_file_location) | |
print('{} Assignment for Class {} successfully submitted at {}.'.format( | |
file_name, folder, datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))) | |
print('Submitted assignment available at {}.'.format(submitted_file_location)) | |
return | |
if __name__ == "__main__": | |
# Build tuple of (folder, file) to turn in | |
submission_dir = 'C:/Users/Will Koehrsen/Desktop/completed_assignments' | |
dir_list = list(os.listdir(submission_dir)) | |
for directory in dir_list: | |
file_list = list(os.listdir(os.path.join(submission_dir, directory))) | |
if len(file_list) != 0: | |
file_tup = (directory, file_list[0]) | |
if len(file_tup) == 0: | |
print('No files to submit') | |
else: | |
print('Assignment "{}" for "{}" found.'.format(file_tup[1], file_tup[0])) | |
input('Press enter to proceed: ') | |
submit_assignment(file_tup) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thanks for the code! I found it through your blog post. Gonna adjust it a little bit to use it for the same reason ;)