Files
work-auto-tag/AutoTicket.py

98 lines
3.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
import time
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.CLASS_NAME, "control-label").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")))
time.sleep(1)
controls = driver.find_element(By.ID, 'ticket-controls').find_elements(By.CLASS_NAME, "ticket-control")
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, 'select2-container')))
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)
#assigned_json[lowest_name] +=
driver.find_element(By.CLASS_NAME, 'update').click()
driver.close()
driver.switch_to.window(original_window)
#assigned_json = {}
def auto_ticket(urls,users,driver,tickets_sorted):
#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:
if tickets_sorted == False:
get_filters(driver)
time.sleep(2.5)
namecount = get_names(users,driver)
print(namecount)
assign_tickets(namecount,driver)
#print(assigned_json)
print("Done! ✧⋆٩(ˊˋ )و ♡✧")