87 lines
3.5 KiB
Python
87 lines
3.5 KiB
Python
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
|
||
|
||
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()
|
||
driver.find_element(By.CLASS_NAME, 'update').click()
|
||
driver.close()
|
||
driver.switch_to.window(original_window)
|
||
|
||
|
||
def auto_ticket(urls,users,driver):
|
||
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("Done! ✧⋆٩(ˊ ᗜ ˋ )و ♡✧") |