from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.action_chains import ActionChains import datetime import json def get_filters(driver): print("Setting up filters...") driver.find_element(By.CLASS_NAME, "select2-selection__clear").click() group_fields = search_fields = driver.find_elements(By.CLASS_NAME, "select2-search__field") group_fields[1].send_keys("noc-prov") group_fields[1].send_keys(Keys.ENTER) group_fields[1].send_keys("provisioning") group_fields[1].send_keys(Keys.ENTER) driver.find_element(By.CSS_SELECTOR, ".fa-cogs").click() clear_buttons = driver.find_elements(By.CLASS_NAME, "select2-selection__clear") clear_buttons[1].click() driver.find_element(By.CSS_SELECTOR, ".search-btn").click() WebDriverWait(driver, 3) def get_names(users,driver): tbody = driver.find_element(By.TAG_NAME, "tbody") rows = tbody.find_elements(By.TAG_NAME, "tr") name_count = {} for name in users: count = 0 for row in rows: tds = row.find_elements(By.TAG_NAME, 'td') if name in tds[2].text: count += 1 name_count[name] = count return name_count def find_lowest_and_increment(dictionary): if not dictionary: return None min_key = min(dictionary, key=dictionary.get) dictionary[min_key] += 1 return min_key def assign_tickets(namecount,driver): original_window = driver.current_window_handle tbody = driver.find_element(By.TAG_NAME, "tbody") rows = tbody.find_elements(By.TAG_NAME, "tr") for row in rows: tds = row.find_elements(By.TAG_NAME, 'td') if tds[2].text == "none": lowest_name = find_lowest_and_increment(namecount) tds[1].find_element(By.TAG_NAME, 'a').send_keys(Keys.CONTROL + Keys.ENTER) WebDriverWait(driver, 10).until(EC.number_of_windows_to_be(2)) for window_handle in driver.window_handles: if window_handle != original_window: driver.switch_to.window(window_handle) break WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "owner"))) controls = driver.find_element(By.ID, 'ticket-controls').find_elements(By.CLASS_NAME, "ticket-control") owner_button = controls[3].find_element(By.CLASS_NAME, 'select2-container') owner_button.click() search_fields = driver.find_elements(By.CLASS_NAME, 'select2-search__field') owner_field = search_fields[3] owner_field.send_keys(lowest_name) owner_field.send_keys(Keys.ENTER) print("Check to see if this worked, then press enter") input() #assigned_json[lowest_name] += 1 driver.find_element(By.CLASS_NAME, 'update').click() driver.close() driver.switch_to.window(original_window) #assigned_json = {} def auto_ticket(urls,users,driver): #for user in users: # assigned_json[user] = 0 driver.get(urls['TICKETS']) print("") print("Please use the browser to log in. I won't look (づ_ど)") try: element = WebDriverWait(driver, 500).until( EC.presence_of_element_located((By.CLASS_NAME, "select2-selection__clear")) ) finally: get_filters(driver) namecount = get_names(users,driver) print(namecount) assign_tickets(namecount,driver) #print(assigned_json) print("Done! ✧⋆٩(ˊ ᗜ ˋ )و ♡✧")