diff --git a/BBL-Automated.ipynb b/BBL-Automated.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..a3373c20391732d4342bab745501c475fb92be96
--- /dev/null
+++ b/BBL-Automated.ipynb
@@ -0,0 +1,1868 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 88,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Requirement already satisfied: selenium in /Users/icommonscrc/anaconda3/lib/python3.10/site-packages (4.8.3)\n",
+ "Requirement already satisfied: trio~=0.17 in /Users/icommonscrc/anaconda3/lib/python3.10/site-packages (from selenium) (0.22.0)\n",
+ "Requirement already satisfied: trio-websocket~=0.9 in /Users/icommonscrc/anaconda3/lib/python3.10/site-packages (from selenium) (0.10.2)\n",
+ "Requirement already satisfied: certifi>=2021.10.8 in /Users/icommonscrc/anaconda3/lib/python3.10/site-packages (from selenium) (2022.12.7)\n",
+ "Requirement already satisfied: urllib3[socks]~=1.26 in /Users/icommonscrc/anaconda3/lib/python3.10/site-packages (from selenium) (1.26.14)\n",
+ "Requirement already satisfied: sniffio in /Users/icommonscrc/anaconda3/lib/python3.10/site-packages (from trio~=0.17->selenium) (1.2.0)\n",
+ "Requirement already satisfied: attrs>=19.2.0 in /Users/icommonscrc/anaconda3/lib/python3.10/site-packages (from trio~=0.17->selenium) (22.1.0)\n",
+ "Requirement already satisfied: exceptiongroup>=1.0.0rc9 in /Users/icommonscrc/anaconda3/lib/python3.10/site-packages (from trio~=0.17->selenium) (1.1.1)\n",
+ "Requirement already satisfied: idna in /Users/icommonscrc/anaconda3/lib/python3.10/site-packages (from trio~=0.17->selenium) (3.4)\n",
+ "Requirement already satisfied: outcome in /Users/icommonscrc/anaconda3/lib/python3.10/site-packages (from trio~=0.17->selenium) (1.2.0)\n",
+ "Requirement already satisfied: async-generator>=1.9 in /Users/icommonscrc/anaconda3/lib/python3.10/site-packages (from trio~=0.17->selenium) (1.10)\n",
+ "Requirement already satisfied: sortedcontainers in /Users/icommonscrc/anaconda3/lib/python3.10/site-packages (from trio~=0.17->selenium) (2.4.0)\n",
+ "Requirement already satisfied: wsproto>=0.14 in /Users/icommonscrc/anaconda3/lib/python3.10/site-packages (from trio-websocket~=0.9->selenium) (1.2.0)\n",
+ "Requirement already satisfied: PySocks!=1.5.7,<2.0,>=1.5.6 in /Users/icommonscrc/anaconda3/lib/python3.10/site-packages (from urllib3[socks]~=1.26->selenium) (1.7.1)\n",
+ "Requirement already satisfied: h11<1,>=0.9.0 in /Users/icommonscrc/anaconda3/lib/python3.10/site-packages (from wsproto>=0.14->trio-websocket~=0.9->selenium) (0.14.0)\n",
+ "Note: you may need to restart the kernel to use updated packages.\n"
+ ]
+ }
+ ],
+ "source": [
+ "pip install selenium"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 89,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Created by Yuvraj Sharma, edited and updated by Kyle Goetke\n",
+ "\n",
+ "# from selenium import webdriver\n",
+ "from datetime import datetime\n",
+ "import time\n",
+ "# import sys\n",
+ "from selenium.webdriver.support.ui import Select\n",
+ "from selenium.webdriver.support.ui import WebDriverWait\n",
+ "from selenium.webdriver.support import expected_conditions as EC\n",
+ "from selenium.webdriver.common.action_chains import ActionChains\n",
+ "from selenium.webdriver.common.by import By\n",
+ "from selenium.common.exceptions import NoSuchElementException, NoSuchWindowException, ElementClickInterceptedException, TimeoutException, StaleElementReferenceException\n",
+ "import tkinter as tk\n",
+ "import tkinter.font as tkfont"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 90,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def already_loggedIn(id):\n",
+ " '''\n",
+ " id: id of the element\n",
+ " Returns whether the element exists, if it returns:\n",
+ " True: We need to the loggin\n",
+ " False: We don't need to login\n",
+ " '''\n",
+ " try:\n",
+ " driver.find_element(By.ID, id)\n",
+ " except NoSuchElementException:\n",
+ " return False\n",
+ " return True"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 91,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def login(url):\n",
+ " '''\n",
+ " username: Drexel username of the user\n",
+ " password: Drexel password of the user\n",
+ " URL: URL of the course\n",
+ " Returns nothing, Just ask the webdriver to check whether user is already loggedin to the browser,\n",
+ " if not it automates the process\n",
+ " '''\n",
+ " learn = driver.get(url)\n",
+ " \n",
+ " wait = WebDriverWait(driver, 10000000000000000)\n",
+ " element = wait.until(EC.title_contains('Content'))\n",
+ " \n",
+ "# time.sleep(0.5)\n",
+ "# else:\n",
+ "# pass"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 92,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def new_home():\n",
+ " '''\n",
+ " Create a new home directory by defulat to avoid web links from becoming the\n",
+ " home directory and breaking the script\n",
+ " '''\n",
+ "\n",
+ " now = datetime.now()\n",
+ " current_time = now.strftime(\"%H%M%S\")\n",
+ "\n",
+ " wait = WebDriverWait(driver, 2)\n",
+ "\n",
+ " hoverElement = driver.find_element(By.ID, \"addCmItem\")\n",
+ " hover = ActionChains(driver).move_to_element(hoverElement)\n",
+ " hover.perform()\n",
+ "\n",
+ " addElement = driver.find_element(By.ID, \"addContentAreaButton\")\n",
+ " addElement.click()\n",
+ " inputText = driver.find_element(By.ID, \"addContentAreaName\")\n",
+ " inputText.send_keys(current_time)\n",
+ "\n",
+ " checkBox = driver.find_element(By.ID, \"content_area_availability_ckbox\")\n",
+ " checkBox.click()\n",
+ "\n",
+ " addBlankPageForm = driver.find_element(By.ID, \"addContentAreaFormSubmit\")\n",
+ " addBlankPageForm.click()\n",
+ "\n",
+ " newHomeClick = driver.find_element(By.XPATH, \"//*[@title={}]\".format(current_time))\n",
+ " newHomeClick.click()\n",
+ "\n",
+ " time.sleep(1)\n",
+ " bcHoverElement = driver.find_element(By.ID, \"bcMenu_actionButton\")\n",
+ "\n",
+ " time.sleep(1)\n",
+ " bcHover = ActionChains(driver).move_to_element(bcHoverElement)\n",
+ " bcHover.perform()\n",
+ "\n",
+ " time.sleep(1)\n",
+ " item = driver.find_element(By.ID, \"content-handler-resource/x-bb-document\")\n",
+ " item.click()\n",
+ "\n",
+ " time.sleep(2)\n",
+ " itemInputText = driver.find_element(By.ID, \"user_title\")\n",
+ " itemInputText.send_keys(current_time, \" item\")\n",
+ "\n",
+ " bottomSubmit = driver.find_element(By.ID, \"bottom_Submit\")\n",
+ " bottomSubmit.click()\n",
+ "\n",
+ " ''' ***Add a Blank Page***\n",
+ " addElement = driver.find_element(By.ID, \"addBlankPageButton\")\n",
+ " addElement.click()\n",
+ "\n",
+ " inputText = driver.find_element(By.ID, \"addContentAreaName\")\n",
+ " inputText.send_keys(\"t\")\n",
+ "\n",
+ " checkBox = driver.find_element(By.ID, \"content_area_availability_ckbox\")\n",
+ " checkBox.click()\n",
+ "\n",
+ " addBlankPageForm = driver.find_element(By.ID, \"addBlankPageFormSubmit\")\n",
+ " addBlankPageForm.click()\n",
+ " '''\n",
+ " # don't delete this break\n",
+ " time.sleep(1)\n",
+ "\n",
+ " SCROLL_PAUSE_TIME = 0.5\n",
+ "\n",
+ " # Get scroll height\n",
+ " last_height = driver.execute_script(\"return document.body.scrollHeight\")\n",
+ "\n",
+ " expandCustomization = driver.find_element(By.XPATH, '//*[@title=\"Expand Customization\"]')\n",
+ " expandCustomization.click()\n",
+ "\n",
+ " teachingStyle = driver.find_element(By.XPATH, '//*[@title=\"Teaching Style\"]').click()\n",
+ "\n",
+ " # don't delete this break\n",
+ " time.sleep(1)\n",
+ "\n",
+ " SCROLL_PAUSE_TIME = 0.5\n",
+ "\n",
+ " # Get scroll height\n",
+ " last_height = driver.execute_script(\"return document.body.scrollHeight\")\n",
+ "\n",
+ " driver.implicitly_wait(2)\n",
+ "\n",
+ " while True:\n",
+ " # Scroll down to bottom\n",
+ " driver.execute_script(\"window.scrollTo(0, 700);\")\n",
+ "\n",
+ " # Wait to load page\n",
+ " time.sleep(SCROLL_PAUSE_TIME)\n",
+ "\n",
+ " # Calculate new scroll height and compare with last scroll height\n",
+ " new_height = driver.execute_script(\"return 700\")\n",
+ " if new_height == last_height:\n",
+ " break\n",
+ " last_height = new_height\n",
+ "\n",
+ " # don't delete this break\n",
+ " time.sleep(2)\n",
+ " #dropDownNewHome = driver.find_element(By.XPATH, \"//select[@name='entryCourseTocIdStr']/option[text()={}\".format(current_time))\n",
+ " dropDownNewHome = driver.find_element(By.XPATH, \"//select[@id='entryCourseTocIdStr']/option[text()={}]\".format(current_time))\n",
+ " # find_element(By.XPATH, \"//select[@id='entryCourseTocIdStr']/option[text()='option_text']\").click()\n",
+ " dropDownNewHome.click()\n",
+ "\n",
+ " driver.find_element(By.ID, \"bottom_Submit\").click()\n",
+ "\n",
+ " # don't delete this break\n",
+ " time.sleep(2)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 93,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def exp_wait1(d):\n",
+ "# wait.until(lambda d: d.find_element(By.XPATH, \"//a[@title = 'Delete' and contains(text(), 'Delete')]\")).click()\n",
+ " while True:\n",
+ " time.sleep(0.01)\n",
+ " try:\n",
+ " delete_b = d.find_element(By.XPATH, \"//a[@title = 'Delete' and contains(text(), 'Delete')]\")\n",
+ " print(delete_b)\n",
+ " except:\n",
+ " delete_b = None\n",
+ " if delete_b:\n",
+ " delete_b.click()\n",
+ " break\n",
+ " else:\n",
+ " d.find_element(By.XPATH, \"//img[contains(@alt, 'menu item options')]\").click()\n",
+ " return\n",
+ "\n",
+ "def exp_wait2(d):\n",
+ "# wait.until(lambda d: d.find_element(By.XPATH, \"//a[@title = 'Delete' and contains(text(), 'Delete')]\")).click()\n",
+ " while True:\n",
+ " time.sleep(0.01)\n",
+ " try:\n",
+ " clear_b = d.find_element(By.XPATH, \"//div[@class = 'container clearfix']/div[2]/a\")\n",
+ " except:\n",
+ " clear_b = None\n",
+ " if clear_b:\n",
+ " clear_b.click()\n",
+ " break\n",
+ " else:\n",
+ " exp_wait1(d)\n",
+ " return\n",
+ " "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 94,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def deleteNavigationpanel():\n",
+ " '''\n",
+ " Functions go through the left navigation panel of the course, and delete everything one by one\n",
+ " Returns nothing\n",
+ " '''\n",
+ " #Switches the frame to the current frame in the webpage\n",
+ " ##element = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, \"iframe[name='classic-learn-iframe']\")))\n",
+ " ##iframe = driver.find_element_by_css_selector(\"iframe[name='classic-learn-iframe']\")\n",
+ " ##driver.switch_to.frame(iframe)\n",
+ " count=-1\n",
+ " while True:\n",
+ " try:\n",
+ " if count==1:\n",
+ " print('done nav')\n",
+ " addToolKit()\n",
+ " break\n",
+ " wait = WebDriverWait(driver, 3)\n",
+ " print('ok1')\n",
+ "# wait.until(EC.presence_of_element_located((By.XPATH, \"//a[contains(@class, 'cmimg editmode jsInit')]\"))).click()\n",
+ " test = wait.until(lambda d: d.find_element(By.XPATH, \"//img[contains(@alt, 'menu item options')]\"))\n",
+ " print('ok2')\n",
+ " \n",
+ " \n",
+ "# print(test)\n",
+ "\n",
+ " test.click()\n",
+ "\n",
+ " exp_wait1(driver)\n",
+ "\n",
+ " exp_wait2(driver)\n",
+ " \n",
+ " print('ok_del')\n",
+ "\n",
+ " wait.until(lambda d: d.find_element(By.XPATH, \"//a[@class = 'genericButton' and contains(text(), 'Delete')]\")).click()\n",
+ " \n",
+ " count = len(driver.find_elements(By.XPATH, \"//img[contains(@alt, 'menu item options')]\"))\n",
+ " \n",
+ " print(count)\n",
+ "\n",
+ "# print(courseContent)\n",
+ " \n",
+ "# print((wait.until(lambda d: d.find_elements(By.XPATH, \"//a[contains(@class, 'cmimg editmode jsInit')]\")))) \n",
+ "# print('len = ',len(wait.until(lambda d: d.find_elements(By.XPATH, \"//a[contains(@class, 'cmimg editmode jsInit')]\"))))\n",
+ "# if len(wait.until(lambda d: d.find_elements(By.XPATH, \"//a[contains(@class, 'cmimg editmode jsInit')]\"))) == 0: #checks if this is the last thing in the navigation panel\n",
+ "# # print(courseContent)\n",
+ "# break\n",
+ " except:\n",
+ "# print('error')\n",
+ " pass\n",
+ "# driver.refresh()\n",
+ "# time.sleep(1)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 95,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def addToolKit():\n",
+ " #add = driver.find_element(By.XPATH, \"//li[@id = 'addCmItem']/a\")\n",
+ " add = driver.find_element(By.ID, 'addCmItem')\n",
+ " add.click()\n",
+ "\n",
+ " tool = driver.find_element(By.ID, 'addToolLinkButton')\n",
+ " tool.click()\n",
+ "\n",
+ " toolName = driver.find_element(By.ID, 'addToolLinkName')\n",
+ " toolName.send_keys('to')\n",
+ "\n",
+ " toolType = Select(driver.find_element(By.ID, \"toolSelect\"))\n",
+ " toolType.select_by_value('course_tools_area')\n",
+ "\n",
+ " toolSubmit = driver.find_element(By.ID, 'addToolLinkFormSubmit')\n",
+ " toolSubmit.click()\n",
+ "\n",
+ " time.sleep(1)\n",
+ "\n",
+ " # toolContentShow = driver.find_elements_by_xpath(\"//a[contains(@class, 'cmimg editmode')]\")\n",
+ " toolContentShow = driver.find_elements(By.XPATH, \"//a[contains(@class, 'cmimg editmode')]\")\n",
+ " i = toolContentShow[0]\n",
+ "\n",
+ " i.click()\n",
+ " toolContentShowButton = driver.find_element(By.XPATH, \"//a[@title = 'Change visibility of link' and contains(text(), 'Show Link')]\")\n",
+ " toolContentShowButton.click()\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 96,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# def deleteAnnouncements():\n",
+ "\n",
+ "# wait = WebDriverWait(driver, 1)\n",
+ " \n",
+ "# driver.find_element(By.XPATH, \"//span[contains(@title, 'to')]\").click()\n",
+ "# time.sleep(1)\n",
+ " \n",
+ "\n",
+ "# driver.find_element(By.LINK_TEXT, \"Announcements\").click()\n",
+ "\n",
+ "# while True:\n",
+ "# #don't delete this break\n",
+ "# # time.sleep(11111)\n",
+ "# time.sleep(0.5)\n",
+ "# try:\n",
+ "# wait = WebDriverWait(driver, 10000000000000000)\n",
+ "# # wait.until(click_fmo123)\n",
+ "# wait.until(lambda d: d.find_element(By.XPATH, '//*[@title=\"Click for more options\"]')).click()\n",
+ "# # courseContent = \n",
+ "\n",
+ "# time.sleep(0.5)\n",
+ "\n",
+ "# # courseContent.click()\n",
+ "# # time.sleep(0.5)\n",
+ "# # wait.until(delete_123)\n",
+ "# wait.until(lambda d: d.find_element(By.XPATH, \"//a[@title = 'Delete' and contains(text(), 'Delete')]\")).click()\n",
+ "# # delete = \n",
+ "# # time.sleep(0.5)\n",
+ "# # delete.click()\n",
+ "\n",
+ "# WebDriverWait(driver, 1).until(EC.alert_is_present())\n",
+ "# driver.switch_to.alert.accept()\n",
+ "\n",
+ "# except NoSuchElementException as g:\n",
+ "# break\n",
+ "\n",
+ "# expandCustomization = driver.find_element(By.XPATH, '//*[@title=\"to\"]')\n",
+ "# expandCustomization.click()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 97,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def deleteAnnouncements():\n",
+ "\n",
+ " wait = WebDriverWait(driver, 1)\n",
+ " time.sleep(1)\n",
+ " \n",
+ "# wait = WebDriverWait(driver, 1)\n",
+ " \n",
+ " driver.find_element(By.XPATH, \"//span[contains(@title, 'to')]\").click()\n",
+ "# time.sleep(1)\n",
+ "\n",
+ " driver.find_element(By.LINK_TEXT, \"Announcements\").click()\n",
+ "\n",
+ " while True:\n",
+ " #don't delete this break\n",
+ " # time.sleep(11111)\n",
+ " time.sleep(0.5)\n",
+ " try:\n",
+ " courseContent = driver.find_element(By.XPATH, '//*[@title=\"Click for more options\"]')\n",
+ " time.sleep(0.5)\n",
+ " courseContent.click()\n",
+ " time.sleep(0.5)\n",
+ " delete = driver.find_element(By.XPATH, \"//a[@title = 'Delete' and contains(text(), 'Delete')]\")\n",
+ " time.sleep(0.5)\n",
+ " delete.click()\n",
+ "\n",
+ " WebDriverWait(driver, 1).until(EC.alert_is_present())\n",
+ " driver.switch_to.alert.accept()\n",
+ "\n",
+ " except NoSuchElementException as g:\n",
+ " break\n",
+ "\n",
+ " expandCustomization = driver.find_element(By.XPATH, '//*[@title=\"to\"]')\n",
+ " expandCustomization.click()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 98,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def deleteContacts():\n",
+ "\n",
+ " wait = WebDriverWait(driver, 1)\n",
+ " time.sleep(1)\n",
+ "\n",
+ " driver.find_element(By.LINK_TEXT, \"Contacts\").click()\n",
+ "\n",
+ " while True:\n",
+ " #don't delete this break\n",
+ " time.sleep(0.5)\n",
+ " try:\n",
+ " courseContent = driver.find_element(By.XPATH, '//*[@title=\"Click for more options\"]')\n",
+ " time.sleep(0.5)\n",
+ " courseContent.click()\n",
+ " time.sleep(0.5)\n",
+ " delete = driver.find_element(By.XPATH, \"//a[@title = 'Delete' and contains(text(), 'Delete')]\")\n",
+ " time.sleep(0.5)\n",
+ " delete.click()\n",
+ "\n",
+ " WebDriverWait(driver, 1).until(EC.alert_is_present())\n",
+ " driver.switch_to.alert.accept()\n",
+ "\n",
+ " except NoSuchElementException as g:\n",
+ " break\n",
+ "\n",
+ " expandCustomization = driver.find_element(By.XPATH, '//*[@title=\"to\"]')\n",
+ " expandCustomization.click()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 99,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def deleteBlogs():\n",
+ "\n",
+ " wait = WebDriverWait(driver, 1)\n",
+ " time.sleep(1)\n",
+ "\n",
+ " driver.find_element(By.LINK_TEXT, \"Blogs\").click()\n",
+ "\n",
+ " time.sleep(1)\n",
+ " SCROLL_PAUSE_TIME = 0.5\n",
+ "\n",
+ " # Get scroll height\n",
+ " last_height = driver.execute_script(\"return document.body.scrollHeight\")\n",
+ "\n",
+ " while True:\n",
+ " # Scroll down to bottom\n",
+ " driver.execute_script(\"window.scrollTo(0, document.body.scrollHeight);\")\n",
+ "\n",
+ " # Wait to load page\n",
+ " time.sleep(SCROLL_PAUSE_TIME)\n",
+ "\n",
+ " # Calculate new scroll height and compare with last scroll height\n",
+ " new_height = driver.execute_script(\"return document.body.scrollHeight\")\n",
+ " if new_height == last_height:\n",
+ " break\n",
+ " last_height = new_height\n",
+ "\n",
+ " try:\n",
+ " driver.find_element(By.ID, 'listContainer_showAllButton').click()\n",
+ " time.sleep(0.5)\n",
+ " driver.find_element(By.ID, 'listContainer_selectAll').click()\n",
+ "\n",
+ " #delete = driver.find_element(By.XPATH, \"//*[contains(text(), 'Delete')]\")\n",
+ " driver.find_element(By.XPATH, \"//*[text()='Delete']\").click()\n",
+ "\n",
+ " WebDriverWait(driver, 1).until(EC.alert_is_present())\n",
+ " driver.switch_to.alert.accept()\n",
+ "\n",
+ " time.sleep(0.5)\n",
+ "\n",
+ " driver.find_element(By.ID, 'listContainer_selectAll').click()\n",
+ " driver.find_element(By.NAME, 'bottom_Remove').click()\n",
+ " except NoSuchElementException as g:\n",
+ " pass\n",
+ "\n",
+ " expandCustomization = driver.find_element(By.XPATH, '//*[@title=\"to\"]')\n",
+ " expandCustomization.click()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 100,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def deleteGlossary():\n",
+ " wait = WebDriverWait(driver, 1)\n",
+ " time.sleep(1)\n",
+ "\n",
+ " driver.find_element(By.LINK_TEXT, \"Glossary\").click()\n",
+ "\n",
+ " while True:\n",
+ " #don't delete this break\n",
+ " time.sleep(0.5)\n",
+ " try:\n",
+ " courseContent = driver.find_element(By.XPATH, '//*[@title=\"Click for more options\"]')\n",
+ " time.sleep(0.5)\n",
+ " courseContent.click()\n",
+ " time.sleep(0.5)\n",
+ " delete = driver.find_element(By.XPATH, \"//a[@title = 'Delete' and contains(text(), 'Delete')]\")\n",
+ " time.sleep(0.5)\n",
+ " delete.click()\n",
+ "\n",
+ " WebDriverWait(driver, 1).until(EC.alert_is_present())\n",
+ " driver.switch_to.alert.accept()\n",
+ "\n",
+ " except NoSuchElementException as g:\n",
+ " break\n",
+ "\n",
+ " expandCustomization = driver.find_element(By.XPATH, '//*[@title=\"to\"]')\n",
+ " expandCustomization.click()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 101,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def deleteGroups():\n",
+ "\n",
+ " wait = WebDriverWait(driver, 1)\n",
+ " time.sleep(1)\n",
+ "\n",
+ " driver.find_element(By.LINK_TEXT, \"Groups\").click()\n",
+ "\n",
+ " time.sleep(1)\n",
+ " SCROLL_PAUSE_TIME = 0.5\n",
+ "\n",
+ " # Get scroll height\n",
+ " last_height = driver.execute_script(\"return document.body.scrollHeight\")\n",
+ "\n",
+ " while True:\n",
+ " # Scroll down to bottom\n",
+ " driver.execute_script(\"window.scrollTo(0, document.body.scrollHeight);\")\n",
+ "\n",
+ " # Wait to load page\n",
+ " time.sleep(SCROLL_PAUSE_TIME)\n",
+ "\n",
+ " # Calculate new scroll height and compare with last scroll height\n",
+ " new_height = driver.execute_script(\"return document.body.scrollHeight\")\n",
+ " if new_height == last_height:\n",
+ " break\n",
+ " last_height = new_height\n",
+ "\n",
+ " time.sleep(1)\n",
+ " try:\n",
+ " driver.find_element(By.ID, 'listContainer_showAllButton').click()\n",
+ " time.sleep(0.5)\n",
+ "\n",
+ " driver.find_element(By.ID, 'listContainer_selectAll').click()\n",
+ "\n",
+ " time.sleep(0.5)\n",
+ "\n",
+ " driver.find_element(By.XPATH, \"//*[text()='Bulk Actions ']\").click()\n",
+ "\n",
+ " time.sleep(0.5)\n",
+ "\n",
+ " driver.find_element(By.XPATH, \"//*[text()='Delete Group']\").click()\n",
+ "\n",
+ " WebDriverWait(driver, 1).until(EC.alert_is_present())\n",
+ " driver.switch_to.alert.accept()\n",
+ " except NoSuchElementException as g:\n",
+ " pass\n",
+ "\n",
+ " time.sleep(1)\n",
+ " expandCustomization = driver.find_element(By.XPATH, '//*[@title=\"to\"]')\n",
+ " expandCustomization.click()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 102,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def deleteJournals():\n",
+ "\n",
+ " wait = WebDriverWait(driver, 1)\n",
+ " time.sleep(1)\n",
+ "\n",
+ " driver.find_element(By.LINK_TEXT, \"Journals\").click()\n",
+ "\n",
+ " time.sleep(1)\n",
+ " SCROLL_PAUSE_TIME = 0.5\n",
+ "\n",
+ " # Get scroll height\n",
+ " last_height = driver.execute_script(\"return document.body.scrollHeight\")\n",
+ "\n",
+ " while True:\n",
+ " # Scroll down to bottom\n",
+ " driver.execute_script(\"window.scrollTo(0, document.body.scrollHeight);\")\n",
+ "\n",
+ " # Wait to load page\n",
+ " time.sleep(SCROLL_PAUSE_TIME)\n",
+ "\n",
+ " # Calculate new scroll height and compare with last scroll height\n",
+ " new_height = driver.execute_script(\"return document.body.scrollHeight\")\n",
+ " if new_height == last_height:\n",
+ " break\n",
+ " last_height = new_height\n",
+ "\n",
+ " time.sleep(1)\n",
+ " try:\n",
+ " driver.find_element(By.ID, 'listContainer_showAllButton').click()\n",
+ " time.sleep(0.5)\n",
+ " driver.find_element(By.ID, 'listContainer_selectAll').click()\n",
+ "\n",
+ " #delete = driver.find_element(By.XPATH, \"//*[contains(text(), 'Delete')]\")\n",
+ " time.sleep(0.5)\n",
+ " driver.find_element(By.XPATH, \"//*[text()='Delete']\").click()\n",
+ "\n",
+ " WebDriverWait(driver, 2).until(EC.alert_is_present())\n",
+ " driver.switch_to.alert.accept()\n",
+ " time.sleep(0.5)\n",
+ "\n",
+ " driver.find_element(By.ID, 'listContainer_selectAll').click()\n",
+ " driver.find_element(By.NAME, 'bottom_Remove').click()\n",
+ " except NoSuchElementException as g:\n",
+ " pass\n",
+ "\n",
+ " expandCustomization = driver.find_element(By.XPATH, '//*[@title=\"to\"]')\n",
+ " expandCustomization.click()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 103,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def deleteTasks():\n",
+ " wait = WebDriverWait(driver, 1)\n",
+ " time.sleep(1)\n",
+ "\n",
+ " driver.find_element(By.LINK_TEXT, \"Tasks\").click()\n",
+ "\n",
+ " time.sleep(1)\n",
+ " SCROLL_PAUSE_TIME = 0.5\n",
+ "\n",
+ " # Get scroll height\n",
+ " last_height = driver.execute_script(\"return document.body.scrollHeight\")\n",
+ "\n",
+ " while True:\n",
+ " # Scroll down to bottom\n",
+ " driver.execute_script(\"window.scrollTo(0, document.body.scrollHeight);\")\n",
+ "\n",
+ " # Wait to load page\n",
+ " time.sleep(SCROLL_PAUSE_TIME)\n",
+ "\n",
+ " # Calculate new scroll height and compare with last scroll height\n",
+ " new_height = driver.execute_script(\"return document.body.scrollHeight\")\n",
+ " if new_height == last_height:\n",
+ " break\n",
+ " last_height = new_height\n",
+ "\n",
+ " time.sleep(1)\n",
+ " try:\n",
+ " driver.find_element(By.ID, 'listContainer_showAllButton').click()\n",
+ " time.sleep(0.5)\n",
+ " driver.find_element(By.ID, 'listContainer_selectAll').click()\n",
+ " time.sleep(0.5)\n",
+ " #delete = driver.find_element(By.XPATH, \"//*[contains(text(), 'Delete')]\")\n",
+ " driver.find_element(By.XPATH, \"//*[text()='Delete']\").click()\n",
+ "\n",
+ " WebDriverWait(driver, 2).until(EC.alert_is_present())\n",
+ " driver.switch_to.alert.accept()\n",
+ "\n",
+ " except NoSuchElementException as g:\n",
+ " pass\n",
+ "\n",
+ " time.sleep(1)\n",
+ " expandCustomization = driver.find_element(By.XPATH, '//*[@title=\"to\"]')\n",
+ " expandCustomization.click()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 104,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def deleteWikis():\n",
+ " wait = WebDriverWait(driver, 1)\n",
+ " time.sleep(1)\n",
+ "\n",
+ " driver.find_element(By.LINK_TEXT, \"Wikis\").click()\n",
+ "\n",
+ " time.sleep(1)\n",
+ " SCROLL_PAUSE_TIME = 0.5\n",
+ "\n",
+ " # Get scroll height\n",
+ " last_height = driver.execute_script(\"return document.body.scrollHeight\")\n",
+ "\n",
+ " while True:\n",
+ " # Scroll down to bottom\n",
+ " driver.execute_script(\"window.scrollTo(0, document.body.scrollHeight);\")\n",
+ "\n",
+ " # Wait to load page\n",
+ " time.sleep(SCROLL_PAUSE_TIME)\n",
+ "\n",
+ " # Calculate new scroll height and compare with last scroll height\n",
+ " new_height = driver.execute_script(\"return document.body.scrollHeight\")\n",
+ " if new_height == last_height:\n",
+ " break\n",
+ " last_height = new_height\n",
+ "\n",
+ " time.sleep(1)\n",
+ " try:\n",
+ " driver.find_element(By.ID, 'listContainer_showAllButton').click()\n",
+ " time.sleep(0.5)\n",
+ " driver.find_element(By.ID, 'listContainer_selectAll').click()\n",
+ " time.sleep(0.5)\n",
+ " #delete = driver.find_element(By.XPATH, \"//*[contains(text(), 'Delete')]\")\n",
+ " driver.find_element(By.XPATH, \"//*[text()='Delete']\").click()\n",
+ "\n",
+ " WebDriverWait(driver, 2).until(EC.alert_is_present())\n",
+ " driver.switch_to.alert.accept()\n",
+ "\n",
+ " time.sleep(0.5)\n",
+ "\n",
+ " driver.find_element(By.ID, 'listContainer_selectAll').click()\n",
+ " driver.find_element(By.NAME, 'bottom_Remove').click()\n",
+ " except NoSuchElementException as g:\n",
+ " pass\n",
+ "\n",
+ " time.sleep(1)\n",
+ " expandCustomization = driver.find_element(By.XPATH, '//*[@title=\"to\"]')\n",
+ " expandCustomization.click()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 105,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def deleteDiscussionboards():\n",
+ "\n",
+ " driver.find_element(By.LINK_TEXT, \"Discussion Board\").click()\n",
+ "\n",
+ " wait = WebDriverWait(driver, 1)\n",
+ " time.sleep(5)\n",
+ "\n",
+ " try:\n",
+ " driver.find_element(By.XPATH, \"//input[@id='bottom_Cancel']\").click()\n",
+ " except NoSuchElementException as g:\n",
+ " pass\n",
+ "\n",
+ " time.sleep(1)\n",
+ " SCROLL_PAUSE_TIME = 0.5\n",
+ "\n",
+ " # Get scroll height\n",
+ " last_height = driver.execute_script(\"return document.body.scrollHeight\")\n",
+ "\n",
+ " while True:\n",
+ " # Scroll down to bottom\n",
+ " driver.execute_script(\"window.scrollTo(0, document.body.scrollHeight);\")\n",
+ "\n",
+ " # Wait to load page\n",
+ " time.sleep(SCROLL_PAUSE_TIME)\n",
+ "\n",
+ " # Calculate new scroll height and compare with last scroll height\n",
+ " new_height = driver.execute_script(\"return document.body.scrollHeight\")\n",
+ " if new_height == last_height:\n",
+ " break\n",
+ " last_height = new_height\n",
+ "\n",
+ " time.sleep(1)\n",
+ "\n",
+ " try:\n",
+ " driver.find_element(By.ID, 'listContainer_showAllButton').click()\n",
+ " time.sleep(0.5)\n",
+ "# driver.find_element(By.XPATH, \"//a[@title='Close']\").click()\n",
+ " driver.find_element(By.XPATH, \"//input[@id='bottom_Cancel']\").click()\n",
+ " except NoSuchElementException as g:\n",
+ " pass\n",
+ "\n",
+ " time.sleep(1)\n",
+ " try:\n",
+ " driver.find_element(By.ID, 'listContainer_selectAll').click()\n",
+ "\n",
+ " #delete = driver.find_element(By.XPATH, \"//*[contains(text(), 'Delete')]\")\n",
+ " driver.find_element(By.XPATH, \"//*[text()='Delete']\").click()\n",
+ "\n",
+ " WebDriverWait(driver, 2).until(EC.alert_is_present())\n",
+ " driver.switch_to.alert.accept()\n",
+ "\n",
+ " time.sleep(0.5)\n",
+ "\n",
+ " driver.find_element(By.ID, 'listContainer_selectAll').click()\n",
+ " driver.find_element(By.NAME, 'bottom_Remove').click()\n",
+ " except NoSuchElementException as g:\n",
+ " pass\n",
+ "\n",
+ " time.sleep(1)\n",
+ " expandCustomization = driver.find_element(By.XPATH, '//*[@title=\"to\"]')\n",
+ " expandCustomization.click()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 106,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def deleteRubrics():\n",
+ " expandCustomization = driver.find_element(By.XPATH, '//*[@title=\"Expand Course Tools\"]')\n",
+ " expandCustomization.click()\n",
+ "\n",
+ " teachingStyle = driver.find_element(By.XPATH, '//*[@title=\"Rubrics\"]').click()\n",
+ "\n",
+ " wait = WebDriverWait(driver, 1)\n",
+ " time.sleep(1)\n",
+ " SCROLL_PAUSE_TIME = 0.5\n",
+ "\n",
+ " # Get scroll height\n",
+ " last_height = driver.execute_script(\"return document.body.scrollHeight\")\n",
+ "\n",
+ " while True:\n",
+ " # Scroll down to bottom\n",
+ " driver.execute_script(\"window.scrollTo(0, document.body.scrollHeight);\")\n",
+ "\n",
+ " # Wait to load page\n",
+ " time.sleep(SCROLL_PAUSE_TIME)\n",
+ "\n",
+ " # Calculate new scroll height and compare with last scroll height\n",
+ " new_height = driver.execute_script(\"return document.body.scrollHeight\")\n",
+ " if new_height == last_height:\n",
+ " break\n",
+ " last_height = new_height\n",
+ "\n",
+ " time.sleep(1)\n",
+ " try:\n",
+ " driver.find_element(By.ID, 'rubric_listContainer_showAllButton').click()\n",
+ " time.sleep(0.5)\n",
+ " driver.find_element(By.ID, 'rubric_listContainer_selectAll').click()\n",
+ " time.sleep(0.5)\n",
+ " #delete = driver.find_element(By.XPATH, \"//*[contains(text(), 'Delete')]\")\n",
+ " driver.find_element(By.XPATH, \"//*[text()='Delete']\").click()\n",
+ "\n",
+ " WebDriverWait(driver, 2).until(EC.alert_is_present())\n",
+ " driver.switch_to.alert.accept()\n",
+ "\n",
+ " except NoSuchElementException as g:\n",
+ " pass\n",
+ "\n",
+ " time.sleep(1)\n",
+ " expandCustomization = driver.find_element(By.XPATH, '//*[@title=\"to\"]')\n",
+ " expandCustomization.click()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 107,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def deleteTestsSurveysPools(TSP):\n",
+ " expandCustomization = driver.find_element(By.XPATH, '//*[@title=\"Expand Course Tools\"]')\n",
+ " expandCustomization.click()\n",
+ " \n",
+ " time.sleep(5)\n",
+ " \n",
+ " teachingStyle = driver.find_element(By.XPATH, '//*[@title=\"Tests, Surveys, and Pools\"]').click()\n",
+ " time.sleep(2)\n",
+ "\n",
+ " driver.find_element(By.LINK_TEXT, TSP).click()\n",
+ "\n",
+ " wait = WebDriverWait(driver, 1)\n",
+ " time.sleep(1)\n",
+ " SCROLL_PAUSE_TIME = 1\n",
+ "\n",
+ " # Get scroll height\n",
+ " last_height = driver.execute_script(\"return document.body.scrollHeight\")\n",
+ "\n",
+ " while True:\n",
+ " # Scroll down to bottom\n",
+ " driver.execute_script(\"window.scrollTo(0, document.body.scrollHeight);\")\n",
+ "\n",
+ " # Wait to load page\n",
+ " time.sleep(SCROLL_PAUSE_TIME)\n",
+ "\n",
+ " # Calculate new scroll height and compare with last scroll height\n",
+ " new_height = driver.execute_script(\"return document.body.scrollHeight\")\n",
+ " if new_height == last_height:\n",
+ " break\n",
+ " last_height = new_height\n",
+ "\n",
+ " try:\n",
+ " driver.find_element(By.ID, 'assessmentManager_listContainer_showAllButton').click()\n",
+ " except NoSuchElementException as g:\n",
+ " pass\n",
+ "\n",
+ "\n",
+ " #don't delete this break\n",
+ " time.sleep(1)\n",
+ "\n",
+ " SCROLL_PAUSE_TIME = 1\n",
+ "\n",
+ " # Get scroll height\n",
+ " last_height = driver.execute_script(\"return document.body.scrollHeight\")\n",
+ "\n",
+ " driver.implicitly_wait(1)\n",
+ "\n",
+ " while True:\n",
+ " # Scroll down to bottom\n",
+ " driver.execute_script(\"window.scrollTo(0, 0);\")\n",
+ "\n",
+ " # Wait to load page\n",
+ " time.sleep(SCROLL_PAUSE_TIME)\n",
+ "\n",
+ " # Calculate new scroll height and compare with last scroll height\n",
+ " new_height = driver.execute_script(\"return 0\")\n",
+ " if new_height == last_height:\n",
+ " break\n",
+ " last_height = new_height\n",
+ "\n",
+ "\n",
+ " while True:\n",
+ " #don't delete this break\n",
+ " time.sleep(1)\n",
+ " try:\n",
+ " courseContent = driver.find_element(By.XPATH, '//*[@class=\"cmimg editmode jsInit \"]')\n",
+ " time.sleep(1)\n",
+ " #courseContent.click()\n",
+ " delTestClickAttempts = 0\n",
+ " try:\n",
+ " courseContent.click()\n",
+ " except (StaleElementReferenceException) as e:\n",
+ " time.sleep(1)\n",
+ " if delTestClickAttempts < 80:\n",
+ " delTestClickAttempts = delTestClickAttempts + 1\n",
+ " else:\n",
+ " time.sleep(3)\n",
+ " courseContent.click()\n",
+ "\n",
+ " time.sleep(1)\n",
+ " delete = driver.find_element(By.XPATH, \"//a[@title = 'Delete' and contains(text(), 'Delete')]\")\n",
+ " time.sleep(1)\n",
+ " delete.click()\n",
+ "\n",
+ " WebDriverWait(driver, 2).until(EC.alert_is_present())\n",
+ " driver.switch_to.alert.accept()\n",
+ "\n",
+ " except NoSuchElementException as g:\n",
+ " break\n",
+ "\n",
+ " time.sleep(1)\n",
+ " expandCustomization = driver.find_element(By.XPATH, '//*[@title=\"to\"]')\n",
+ " expandCustomization.click()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 108,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def deleteGradeCenter():\n",
+ " ##### Not working right now :(\n",
+ " expandCustomization = driver.find_element(By.XPATH, '//*[@title=\"Expand Grade Center\"]')\n",
+ " expandCustomization.click()\n",
+ "\n",
+ " teachingStyle = driver.find_element(By.XPATH, '//*[@title=\"Full Grade Center\"]').click()\n",
+ "\n",
+ " driver.find_element(By.XPATH, \"//*[text()='Manage ']\").click()\n",
+ " driver.find_element(By.XPATH, \"//*[text()='Column Organization']\").click()\n",
+ "\n",
+ "\n",
+ " #courseContent = driver.find_elements_by_xpath(\"//a[contains(@class, 'layoutCheckBox')]\")\n",
+ " #i = courseContent[0]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 109,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def deleteContentCollection():\n",
+ " expandCustomization = driver.find_element(By.XPATH, '//*[@title=\"Expand Content Collection\"]')\n",
+ " expandCustomization.click()\n",
+ " driver.find_element(By.XPATH, '//*[@class=\"favorite\"]').click()\n",
+ "\n",
+ " time.sleep(1)\n",
+ " SCROLL_PAUSE_TIME = 0.5\n",
+ "\n",
+ " # Get scroll height\n",
+ " last_height = driver.execute_script(\"return document.body.scrollHeight\")\n",
+ "\n",
+ " while True:\n",
+ " # Scroll down to bottom\n",
+ " driver.execute_script(\"window.scrollTo(0, document.body.scrollHeight);\")\n",
+ "\n",
+ " # Wait to load page\n",
+ " time.sleep(SCROLL_PAUSE_TIME)\n",
+ "\n",
+ " # Calculate new scroll height and compare with last scroll height\n",
+ " new_height = driver.execute_script(\"return document.body.scrollHeight\")\n",
+ " if new_height == last_height:\n",
+ " break\n",
+ " last_height = new_height\n",
+ "\n",
+ " time.sleep(1)\n",
+ " try:\n",
+ " driver.find_element(By.ID, 'listContainer_showAllButton').click()\n",
+ " time.sleep(1)\n",
+ " driver.find_element(By.ID, 'listContainer_selectAll').click()\n",
+ " time.sleep(1)\n",
+ " #delete = driver.find_element(By.XPATH, \"//*[contains(text(), 'Delete')]\")\n",
+ " driver.find_element(By.XPATH, \"//*[text()='Delete']\").click()\n",
+ "\n",
+ " WebDriverWait(driver, 1).until(EC.alert_is_present())\n",
+ " driver.switch_to.alert.accept()\n",
+ "\n",
+ " time.sleep(1)\n",
+ " driver.find_element(By.NAME, 'bottom_Submit').click()\n",
+ "\n",
+ " except NoSuchElementException as g:\n",
+ " pass\n",
+ "\n",
+ " time.sleep(1)\n",
+ " expandCustomization = driver.find_element(By.XPATH, '//*[@title=\"to\"]')\n",
+ " expandCustomization.click()\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 110,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Requirement already satisfied: webdriver_manager in /Users/icommonscrc/anaconda3/lib/python3.10/site-packages (3.8.5)\r\n",
+ "Requirement already satisfied: tqdm in /Users/icommonscrc/anaconda3/lib/python3.10/site-packages (from webdriver_manager) (4.64.1)\r\n",
+ "Requirement already satisfied: python-dotenv in /Users/icommonscrc/anaconda3/lib/python3.10/site-packages (from webdriver_manager) (1.0.0)\r\n",
+ "Requirement already satisfied: packaging in /Users/icommonscrc/anaconda3/lib/python3.10/site-packages (from webdriver_manager) (22.0)\r\n",
+ "Requirement already satisfied: requests in /Users/icommonscrc/anaconda3/lib/python3.10/site-packages (from webdriver_manager) (2.28.1)\r\n",
+ "Requirement already satisfied: certifi>=2017.4.17 in /Users/icommonscrc/anaconda3/lib/python3.10/site-packages (from requests->webdriver_manager) (2022.12.7)\r\n",
+ "Requirement already satisfied: idna<4,>=2.5 in /Users/icommonscrc/anaconda3/lib/python3.10/site-packages (from requests->webdriver_manager) (3.4)\r\n",
+ "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /Users/icommonscrc/anaconda3/lib/python3.10/site-packages (from requests->webdriver_manager) (1.26.14)\r\n",
+ "Requirement already satisfied: charset-normalizer<3,>=2 in /Users/icommonscrc/anaconda3/lib/python3.10/site-packages (from requests->webdriver_manager) (2.0.4)\r\n"
+ ]
+ }
+ ],
+ "source": [
+ "!pip install webdriver_manager"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 111,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [],
+ "source": [
+ "#Just make sure this file is in the same folder as chromedriver, no need to update path now, it's not absolute anymore\n",
+ "from selenium import webdriver\n",
+ "from selenium.webdriver.chrome.service import Service\n",
+ "from webdriver_manager.chrome import ChromeDriverManager\n",
+ "driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))\n",
+ "driver.maximize_window()\n",
+ "driver.get(\"https://www.google.com\")\n",
+ "# driver = webdriver.Chrome('./chromedriver-5')\n",
+ "driver.implicitly_wait(2) # seconds\n",
+ "\n",
+ "#Enter the URL of the course\n",
+ "# url = \"https://learn.dcollege.net/ultra/courses/_288445_1/cl/outline\"\n",
+ "url = \"https://learn.dcollege.net/ultra/courses/_118298_1/cl/outline\"\n",
+ "\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 112,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "flag=0"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 113,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import tkinter as tk\n",
+ "import tkinter.font as tkfont\n",
+ "\n",
+ "def alert_message():\n",
+ "\n",
+ " def yes_action():\n",
+ " print(\"Yes button clicked\")\n",
+ " global flag\n",
+ " flag=1\n",
+ " root.destroy()\n",
+ "\n",
+ " def no_action():\n",
+ " print(\"No button clicked\")\n",
+ " root.destroy()\n",
+ "\n",
+ " # Create the main window\n",
+ " root = tk.Tk()\n",
+ " root.title(\"Custom Alert\")\n",
+ "\n",
+ " # Set the background color of the main window to light yellow\n",
+ " root.configure(bg=\"#FFFF99\")\n",
+ "\n",
+ " # Remove the window header\n",
+ "# root.overrideredirect(True)\n",
+ "\n",
+ " # Get the screen width and height\n",
+ " screen_width = root.winfo_screenwidth()\n",
+ " screen_height = root.winfo_screenheight()\n",
+ "\n",
+ " # Set the window size to 50% of the screen width and height\n",
+ " window_width = int(screen_width / 2)\n",
+ " window_height = int(screen_height / 2)\n",
+ " root.geometry(\"{}x{}+{}+{}\".format(window_width, window_height, int((screen_width - window_width) / 2), int((screen_height - window_height) / 2)))\n",
+ "\n",
+ " # Set the font for the message label\n",
+ " font_style = tkfont.Font(family=\"Helvetica\", size=36, weight=\"bold\")\n",
+ "\n",
+ " # Create the label for the message\n",
+ " alert_text='Please confirm. Are you trying to \\n delete '+ \" {\" + course_name[course_name.find(' '):] + \"} \"\n",
+ " message_label = tk.Label(root, text = alert_text , font=font_style, fg=\"#FF0000\")\n",
+ " message_label.pack(expand=True, pady=(window_height//4, 0))\n",
+ "\n",
+ " # Create an empty label\n",
+ " empty_label = tk.Label(root, text=\"\", bg=\"#FFFF99\")\n",
+ " empty_label.pack()\n",
+ "\n",
+ " # Create the frame for the buttons\n",
+ " button_frame = tk.Frame(root, bg=\"#FFFF99\")\n",
+ " button_frame.pack(expand=True)\n",
+ "\n",
+ " # Create the Yes button\n",
+ " yes_button = tk.Button(button_frame, text=\"Yes\", font=font_style, bg=\"#FFCCCC\", command=yes_action)\n",
+ " yes_button.pack(side=tk.LEFT, padx=5)\n",
+ "\n",
+ " # Create an empty label\n",
+ " empty_label2 = tk.Label(button_frame, text=\"\", bg=\"#FFFF99\")\n",
+ " empty_label2.pack(side=tk.LEFT, padx=5)\n",
+ "\n",
+ " # Create the No button\n",
+ " no_button = tk.Button(button_frame, text=\"No\", font=font_style, bg=\"#FFCCCC\", command=no_action)\n",
+ " no_button.pack(side=tk.RIGHT, padx=5)\n",
+ "\n",
+ " # Run the main loop\n",
+ " root.mainloop()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 114,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# def deleteNavigationpanel():\n",
+ "# print(\"Clearing navigation panel\")\n",
+ "\n",
+ "# def deleteAnnouncements():\n",
+ "# print(\"Deleting announcements\")\n",
+ "\n",
+ "# def deleteContacts():\n",
+ "# print(\"Deleting contacts\")\n",
+ "\n",
+ "# def deleteBlogs():\n",
+ "# print(\"Deleting blogs\")\n",
+ "\n",
+ "# def deleteGlossary():\n",
+ "# print(\"Deleting glossary\")\n",
+ "\n",
+ "# def deleteGroups():\n",
+ "# print(\"Deleting groups\")\n",
+ "\n",
+ "# def deleteJournals():\n",
+ "# print(\"Deleting journals\")\n",
+ "\n",
+ "# def deleteTasks():\n",
+ "# print(\"Deleting tasks\")\n",
+ "\n",
+ "# def deleteWikis():\n",
+ "# print(\"Deleting wikis\")\n",
+ "\n",
+ "# def deleteDiscussionboards():\n",
+ "# print(\"Deleting discussion boards\")\n",
+ "\n",
+ "# def deleteRubrics():\n",
+ "# print(\"Deleting rubrics\")\n",
+ "\n",
+ "# def deleteTestsSurveysPools(para):\n",
+ "# print(\"Deleting\",para)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 115,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def options_window():\n",
+ " root = tk.Tk()\n",
+ "# root.overrideredirect(True) # Remove window decorations\n",
+ "# root.geometry(\"{0}x{1}+0+0\".format(root.winfo_screenwidth(), root.winfo_screenheight())) # Set window to full screen\n",
+ "# root.wait_visibility(root) # Wait for window to be visible\n",
+ "# root.attributes(\"-alpha\", 0.5) # Set window transparency\n",
+ "\n",
+ " # Create overlay window\n",
+ "# overlay = tk.Toplevel(root)\n",
+ "# overlay.overrideredirect(True)\n",
+ " root.geometry('300x500+{}+{}'.format(root.winfo_screenwidth()//2-150, root.winfo_screenheight()//2-250))\n",
+ "# overlay.configure(bg='white')\n",
+ "\n",
+ " clear_items = []\n",
+ "\n",
+ " def to_clear():\n",
+ " global clear_items\n",
+ " clear_items = [option for option in check_vars if check_vars[option].get()]\n",
+ " root.destroy()\n",
+ " print(clear_items)\n",
+ " if 'All' in clear_items[0]:\n",
+ " clear_items = list(OPTIONS.keys())[1:]\n",
+ " print(clear_items)\n",
+ " for i in clear_items:\n",
+ " i='delete'+i.title()+'()'\n",
+ "# print(i)\n",
+ " if 'deleteTestssurveyspools' in i:\n",
+ " deleteTestsSurveysPools('Tests')\n",
+ " deleteTestsSurveysPools('Surveys')\n",
+ " deleteTestsSurveysPools('Pools')\n",
+ " continue\n",
+ " if 'deleteNavigationpanel' in i:\n",
+ " print(i)\n",
+ " new_home()\n",
+ " eval(i)\n",
+ " time.sleep(2)\n",
+ "# addToolKit()\n",
+ " time.sleep(2)\n",
+ " driver.get(url)\n",
+ " wait = WebDriverWait(driver, 5)\n",
+ " element = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, \"iframe[name='classic-learn-iframe']\")))\n",
+ " iframe = driver.find_element(By.CSS_SELECTOR, \"iframe[name='classic-learn-iframe']\")\n",
+ " driver.switch_to.frame(iframe)\n",
+ " continue\n",
+ " eval(i)\n",
+ "\n",
+ "\n",
+ " OPTIONS = {\n",
+ " 'All':'all',\n",
+ " 'NavigationPanel': 'clear_navigation_panel()',\n",
+ " 'Announcements': 'deleteAnnouncements()',\n",
+ " 'Contacts': 'deleteContacts()',\n",
+ " 'Blogs': 'deleteBlogs()',\n",
+ " 'Glossary': 'deleteGlossary()',\n",
+ " 'Groups': 'deleteGroups()',\n",
+ " 'Journals': 'deleteJournals()',\n",
+ " 'Tasks': 'deleteTasks()',\n",
+ " 'Wikis': 'deleteWikis()',\n",
+ " 'DiscussionBoards': 'deleteDiscussionBoards()',\n",
+ " 'Rubrics': 'deleteRubrics()',\n",
+ " 'TestsSurveysPools': 'deleteTestsSurveysPools(\"Tests\")'\n",
+ " }\n",
+ "\n",
+ " label = tk.Label(root, text='Select options to delete:', font=('Arial', 12, 'bold'), bg='white')\n",
+ " label.pack(pady=10)\n",
+ "\n",
+ " check_vars = {}\n",
+ " for option in OPTIONS:\n",
+ " check_vars[option] = tk.BooleanVar()\n",
+ " check = tk.Checkbutton(root, text=option, variable=check_vars[option], onvalue=True, offvalue=False, font=('Arial', 10, 'bold'), bg='white')\n",
+ " check.pack(anchor='w')\n",
+ "\n",
+ " button = tk.Button(root, text='Submit', command= to_clear, font=('Arial', 12, 'bold'), bg='white')\n",
+ " button.pack(pady=10)\n",
+ "\n",
+ " root.mainloop()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 116,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "calling1\n",
+ "calling2\n",
+ "Yes button clicked\n",
+ "good\n",
+ "['All']\n",
+ "['NavigationPanel', 'Announcements', 'Contacts', 'Blogs', 'Glossary', 'Groups', 'Journals', 'Tasks', 'Wikis', 'DiscussionBoards', 'Rubrics', 'TestsSurveysPools']\n",
+ "deleteNavigationpanel()\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"555b7fa7-8683-44c4-9b42-bfd17da017aa\")>\n",
+ "ok_del\n",
+ "53\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"555b7fa7-8683-44c4-9b42-bfd17da017aa\")>\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"ee89d66d-6205-4dad-bac1-b7bf21e2fc9e\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"f7552829-c6ea-4763-a05a-59338313aba4\")>\n",
+ "ok_del\n",
+ "52\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"c8b39412-bffb-4ef6-9b80-d7af3934e83b\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"7ec1bc26-74d3-4ebf-a03c-c08c8e31e09e\")>\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"b7a15a03-44f8-4e0a-a7c7-500ca88c74b0\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"6264b0cd-1c59-460b-b666-b5574efea942\")>\n",
+ "ok_del\n",
+ "50\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"6264b0cd-1c59-460b-b666-b5574efea942\")>\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"e23521b9-4138-407b-94f3-099eaed498a3\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"8e4d54bf-1f0d-4d84-a164-5cc07146fa9f\")>\n",
+ "ok_del\n",
+ "49\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"8e4d54bf-1f0d-4d84-a164-5cc07146fa9f\")>\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"382d283d-dbb1-4a25-b733-0473ac0baadc\")>\n",
+ "ok_del\n",
+ "48\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"d0e863a2-1a3b-433b-a56d-644029849a46\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"cc82277e-28e0-4c46-954e-b052e600d487\")>\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"ec3fd57c-fca6-4e48-af73-ca5b77e0aefe\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"22d1ac09-33d2-49b5-9c91-a3e034579aeb\")>\n",
+ "ok_del\n",
+ "46\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"dc342fac-f683-4dae-9d21-0879930401e2\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"fe5f224b-0bd4-4abb-8203-56081af4b3ba\")>\n",
+ "ok_del\n",
+ "45\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"8ab4c500-40d4-4d10-bd4d-9ede716152ae\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"0389bca3-dc74-460a-a6e4-7d5640bf543f\")>\n",
+ "ok_del\n",
+ "44\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"0cc6c937-b717-4dce-982e-d44427f7a99f\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"ad43bfe3-0b48-426a-8a8e-200a39d1cd07\")>\n",
+ "ok_del\n",
+ "43\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"11c97133-3a70-4b12-99f2-fc9418c9da65\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"c37cf3a4-0cf7-4e3f-ae50-34e5c38ec3f2\")>\n",
+ "ok_del\n",
+ "42\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"238133ef-b64c-4029-b142-4a5a367a339b\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"e02ceaad-e168-4550-9c1d-5e7889d2d103\")>\n",
+ "ok_del\n",
+ "41\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"e02ceaad-e168-4550-9c1d-5e7889d2d103\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"db61755c-76d9-4f78-94ea-10a50b1fa799\")>\n",
+ "ok_del\n",
+ "40\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"db61755c-76d9-4f78-94ea-10a50b1fa799\")>\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"98f2a6c8-ed5b-4727-9bad-2d57ea5518a7\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"34e8cc57-4ede-49ee-be07-1082c25415ed\")>\n",
+ "ok_del\n",
+ "39\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"f512fa4f-fe14-4cac-9a7a-387818570506\")>\n",
+ "ok_del\n",
+ "38\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"497d2833-e98c-4e0c-9247-832ec6e85acb\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"8a8c0c13-9882-49c1-9dd8-c668a7ccc213\")>\n",
+ "ok_del\n",
+ "37\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"8a8c0c13-9882-49c1-9dd8-c668a7ccc213\")>\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"2badbb96-1611-4b84-8e38-6648a69baed9\")>\n",
+ "ok_del\n",
+ "36\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"2badbb96-1611-4b84-8e38-6648a69baed9\")>\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"5197c97a-ced4-478f-855e-02ba708190b3\")>\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"1a5b5423-72b9-4202-9826-94cba175a80c\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"00edd36c-6852-41fb-91ae-ed1cdce4e4e8\")>\n",
+ "ok_del\n",
+ "34\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"00edd36c-6852-41fb-91ae-ed1cdce4e4e8\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"c73f927d-e3af-468f-99cb-04cc5804531b\")>\n",
+ "ok_del\n",
+ "33\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"c73f927d-e3af-468f-99cb-04cc5804531b\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"de0f1999-6b5c-4c68-8339-a86372537141\")>\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"4c88accc-161e-4947-800d-2b0ac2063446\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"a7139529-43d3-4dda-8ee4-a61d64e17b28\")>\n",
+ "ok_del\n",
+ "31\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"a7139529-43d3-4dda-8ee4-a61d64e17b28\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"315ff0a0-8820-4137-aae0-87b913436772\")>\n",
+ "ok_del\n",
+ "30\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"315ff0a0-8820-4137-aae0-87b913436772\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"99c8002c-0ab9-4e68-8432-8c1f2b625890\")>\n",
+ "ok_del\n",
+ "29\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"99c8002c-0ab9-4e68-8432-8c1f2b625890\")>\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"0785345a-67a1-4b30-ac64-8911afea4ad7\")>\n",
+ "ok_del\n",
+ "28\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"0785345a-67a1-4b30-ac64-8911afea4ad7\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"b3566944-00c8-4f70-bac6-5b8d37b7d13b\")>\n",
+ "ok_del\n",
+ "27\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"b3566944-00c8-4f70-bac6-5b8d37b7d13b\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"08262d28-e43a-4c6a-b704-71a773a9cdf5\")>\n",
+ "ok_del\n",
+ "26\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"08262d28-e43a-4c6a-b704-71a773a9cdf5\")>\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"5a005970-6fe1-4fc3-91dc-59d1ea6de4c5\")>\n",
+ "ok_del\n",
+ "25\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"5a005970-6fe1-4fc3-91dc-59d1ea6de4c5\")>\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"77643085-8875-4b95-a970-fc07047d5bda\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"e9d912a5-51e7-49c4-9858-897976b4b618\")>\n",
+ "ok_del\n",
+ "24\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"e9d912a5-51e7-49c4-9858-897976b4b618\")>\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"19ec4cd6-7247-4f05-a7ca-27996be66baa\")>\n",
+ "ok_del\n",
+ "23\n",
+ "ok1\n",
+ "ok2\n",
+ "ok1\n",
+ "ok2\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"19ec4cd6-7247-4f05-a7ca-27996be66baa\")>\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"d80df39f-e175-49b3-bd25-fb477e2966f6\")>\n",
+ "ok_del\n",
+ "22\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"d80df39f-e175-49b3-bd25-fb477e2966f6\")>\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"7b0e9893-5acd-4c50-b15c-04eed37867d5\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"cc43a2e4-5761-4639-b3a2-ffc31cbd3dfa\")>\n",
+ "ok_del\n",
+ "21\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"07f3aab9-a64c-41e4-b590-13857b8f2815\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"3c2af36e-1232-4adb-8446-bf78ce6169c6\")>\n",
+ "ok_del\n",
+ "20\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"3c2af36e-1232-4adb-8446-bf78ce6169c6\")>\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"d3299b80-f8ac-42e7-a543-ebb9d734871e\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"f2efbb76-bd96-41ec-be85-2f7e101490d4\")>\n",
+ "ok_del\n",
+ "19\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"f2efbb76-bd96-41ec-be85-2f7e101490d4\")>\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"c1a5b91e-e598-49e8-8acc-f9147d8f4864\")>\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"e95e2bae-4c2b-415b-a15d-08393f7c7c74\")>\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"85007bb0-69c8-4e45-b58b-9fca7b548b11\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"f62603e8-8efe-4d55-99b1-659992509c08\")>\n",
+ "ok_del\n",
+ "16\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"f62603e8-8efe-4d55-99b1-659992509c08\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"82abdb95-c8ef-4ef5-a4c6-69ca1fe76944\")>\n",
+ "ok_del\n",
+ "15\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"de01ce10-d278-4293-a78d-58dc205de0e4\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"4821e078-9868-4ffc-ae85-d1aec4a670ed\")>\n",
+ "ok_del\n",
+ "14\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"4821e078-9868-4ffc-ae85-d1aec4a670ed\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"99cec0e1-5360-485b-a41a-d6002f0cbfd2\")>\n",
+ "ok_del\n",
+ "13\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"99cec0e1-5360-485b-a41a-d6002f0cbfd2\")>\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"3a2b24cc-c3a7-4b0c-ba39-da5247382d14\")>\n",
+ "ok_del\n",
+ "12\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"3a2b24cc-c3a7-4b0c-ba39-da5247382d14\")>\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"3e831869-53fe-4389-8fdd-34c0d61fe337\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"a871ae33-a97a-412a-92ed-cf7aff2a7bb9\")>\n",
+ "ok_del\n",
+ "11\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"a871ae33-a97a-412a-92ed-cf7aff2a7bb9\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"fd9575e2-5376-4c93-867f-38299ee92483\")>\n",
+ "ok_del\n",
+ "10\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"fd9575e2-5376-4c93-867f-38299ee92483\")>\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"9afa17a0-3896-4a6c-91e5-e8f590b77c61\")>\n",
+ "ok_del\n",
+ "9\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"9afa17a0-3896-4a6c-91e5-e8f590b77c61\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"f7272df1-3f1c-4dd8-a159-15314f4155c4\")>\n",
+ "ok_del\n",
+ "8\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"f7272df1-3f1c-4dd8-a159-15314f4155c4\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"32f154a2-3a4d-4683-9137-f88673cf6540\")>\n",
+ "ok_del\n",
+ "7\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"32f154a2-3a4d-4683-9137-f88673cf6540\")>\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"233fb17f-7145-4ff0-a65e-0b98d41d3649\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"7bbc2adf-233a-4465-b66d-26dfa1c487c1\")>\n",
+ "ok_del\n",
+ "6\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"7bbc2adf-233a-4465-b66d-26dfa1c487c1\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"94abef9e-d535-4bba-bc3b-a05e8ecedc8b\")>\n",
+ "ok_del\n",
+ "5\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"6af04624-4a7f-4904-96c1-ca6036cd49fa\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"68fbb43b-c56c-48fd-9d5c-c0968d1e7f6c\")>\n",
+ "ok_del\n",
+ "4\n",
+ "ok1\n",
+ "ok2\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"a0f3e517-aacf-409f-8c2d-7295d7f6da16\")>\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "ok_del\n",
+ "3\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"b10ce79e-d5fd-4724-8f7a-118e05d6ad2f\")>\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"ebd8fe6f-c7ee-4826-8322-155739c7e02b\")>\n",
+ "ok_del\n",
+ "2\n",
+ "ok1\n",
+ "ok2\n",
+ "<selenium.webdriver.remote.webelement.WebElement (session=\"3da7f6e83c43e64a6e2075dad34f948f\", element=\"fef5042c-cd36-4ada-b1e3-fd0ebf0fa94f\")>\n",
+ "ok_del\n",
+ "1\n",
+ "done nav\n",
+ "done nav\n",
+ "\n",
+ "all complete\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "Exception in Tkinter callback\n",
+ "Traceback (most recent call last):\n",
+ " File \"/Users/icommonscrc/anaconda3/lib/python3.10/tkinter/__init__.py\", line 1921, in __call__\n",
+ " return self.func(*args)\n",
+ " File \"/var/folders/jn/76ft68hs2yl13ckvzmcpd__h6mwsv8/T/ipykernel_33423/3555025028.py\", line 28, in to_clear\n",
+ " deleteTestsSurveysPools('Tests')\n",
+ " File \"/var/folders/jn/76ft68hs2yl13ckvzmcpd__h6mwsv8/T/ipykernel_33423/2154378556.py\", line 7, in deleteTestsSurveysPools\n",
+ " teachingStyle = driver.find_element(By.XPATH, '//*[@title=\"Tests, Surveys, and Pools\"]').click()\n",
+ " File \"/Users/icommonscrc/anaconda3/lib/python3.10/site-packages/selenium/webdriver/remote/webelement.py\", line 94, in click\n",
+ " self._execute(Command.CLICK_ELEMENT)\n",
+ " File \"/Users/icommonscrc/anaconda3/lib/python3.10/site-packages/selenium/webdriver/remote/webelement.py\", line 404, in _execute\n",
+ " return self._parent.execute(command, params)\n",
+ " File \"/Users/icommonscrc/anaconda3/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py\", line 440, in execute\n",
+ " self.error_handler.check_response(response)\n",
+ " File \"/Users/icommonscrc/anaconda3/lib/python3.10/site-packages/selenium/webdriver/remote/errorhandler.py\", line 245, in check_response\n",
+ " raise exception_class(message, screen, stacktrace)\n",
+ "selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable\n",
+ " (Session info: chrome=111.0.5563.110)\n",
+ "Stacktrace:\n",
+ "0 chromedriver 0x0000000105943428 chromedriver + 4899880\n",
+ "1 chromedriver 0x00000001058c0a23 chromedriver + 4364835\n",
+ "2 chromedriver 0x000000010550aa71 chromedriver + 473713\n",
+ "3 chromedriver 0x000000010554fd78 chromedriver + 757112\n",
+ "4 chromedriver 0x0000000105540cf3 chromedriver + 695539\n",
+ "5 chromedriver 0x0000000105574562 chromedriver + 906594\n",
+ "6 chromedriver 0x0000000105540361 chromedriver + 693089\n",
+ "7 chromedriver 0x000000010557471e chromedriver + 907038\n",
+ "8 chromedriver 0x000000010558fb5b chromedriver + 1018715\n",
+ "9 chromedriver 0x0000000105574333 chromedriver + 906035\n",
+ "10 chromedriver 0x000000010553e55f chromedriver + 685407\n",
+ "11 chromedriver 0x000000010553fa7e chromedriver + 690814\n",
+ "12 chromedriver 0x000000010591079e chromedriver + 4691870\n",
+ "13 chromedriver 0x0000000105915961 chromedriver + 4712801\n",
+ "14 chromedriver 0x000000010591c2ff chromedriver + 4739839\n",
+ "15 chromedriver 0x000000010591685a chromedriver + 4716634\n",
+ "16 chromedriver 0x00000001058e8fce chromedriver + 4530126\n",
+ "17 chromedriver 0x00000001059365c8 chromedriver + 4847048\n",
+ "18 chromedriver 0x0000000105936747 chromedriver + 4847431\n",
+ "19 chromedriver 0x000000010594b87f chromedriver + 4933759\n",
+ "20 libsystem_pthread.dylib 0x00007fff203de8fc _pthread_start + 224\n",
+ "21 libsystem_pthread.dylib 0x00007fff203da443 thread_start + 15\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "#Function Calls\n",
+ "login(url)\n",
+ "\n",
+ "# time.sleep(10) # delay to ender 2FA code\n",
+ "wait = WebDriverWait(driver, 1)\n",
+ "element = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, \"iframe[name='classic-learn-iframe']\")))\n",
+ "iframe = driver.find_element(By.CSS_SELECTOR, \"iframe[name='classic-learn-iframe']\")\n",
+ "driver.switch_to.frame(iframe)\n",
+ "print('calling1')\n",
+ "\n",
+ "a_tag = driver.find_element(By.XPATH, \"//a[@id='courseMenu_link']\")\n",
+ "course_name = a_tag.get_attribute(\"title\")\n",
+ "\n",
+ "\n",
+ "time.sleep(1)\n",
+ "print('calling2')\n",
+ "alert_message()\n",
+ "\n",
+ "print('good')\n",
+ "if flag:\n",
+ " options_window()\n",
+ " \n",
+ "\n",
+ "# print(\"tests...\", end=\"\\r\")\n",
+ "# deleteTestsSurveysPools(\"Tests\")\n",
+ "# print(\"tests complete\")\n",
+ "# time.sleep(1)\n",
+ "\n",
+ "# print(\"surveys...\", end=\"\\r\")\n",
+ "# deleteTestsSurveysPools(\"Surveys\")\n",
+ "# print(\"surveys complete\")\n",
+ "# time.sleep(1)\n",
+ "\n",
+ "# print(\"pools...\", end=\"\\r\")\n",
+ "# deleteTestsSurveysPools(\"Pools\")\n",
+ "# print(\"pools complete\")\n",
+ "# time.sleep(1)\n",
+ "\n",
+ "# #####deleteGradeCenter()##### Not working right now :(\n",
+ "\n",
+ "# deleteContentCollection()\n",
+ "\n",
+ "print(\"\\nall complete\")"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.10.9"
+ },
+ "vscode": {
+ "interpreter": {
+ "hash": "bfbd41900f4606bc1fe03692a08741356f9ff1925665a921e8b2198fd530f771"
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}