Python Algos - abdullahbintahir/Python-Snippet GitHub Wiki
Downloading Receipts from SAP Concur
from selenium import webdriver
from selenium.webdriver.edge.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver import ActionChains
import time
import pandas as pd
import pyautogui
#Setting up webdriver so it dosent close automatically after code ends
options = Options()
options.add_experimental_option("detach", True)
driver = webdriver.Edge(options=options)
# Open Concur
driver.get("https://eu1.concursolutions.com")
#Maximize Window
driver.maximize_window()
#Login
email_input=driver.find_element(By.CSS_SELECTOR, '#username-input')
email_input.send_keys("[email protected]")
Next_Button=driver.find_element(By.ID,'btnSubmit')
Next_Button.click()
deloitte_sso = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//body[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/section[1]/div[1]/div[1]/div[2]/div[1]/div[1]/button[1]")))
deloitte_sso.click()
#Report search criteria dropdown click
search_dropdown = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "ext-gen257")))
search_dropdown.click()
time.sleep(1)
#Report Key list option click
Report_Key_Criteria = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "/html[1]/body[1]/div[12]/div[1]/div[2]")))
Report_Key_Criteria.click()
#Click on each line item and saving recipt with "Report Key- Amount" naming convention
df=pd.read_excel("C:/Users\moxtahir/OneDrive - Deloitte (O365D)/Desktop/Report Keys.xlsx")
keys = df['Report Key'].tolist()
for Report_Key in keys:
try: #Return to Process Reports page if no further line items found
#Click on Process Reports tab
ProcessReports = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//body[1]/otsitewarning[1]/div[1]/div[1]/div[2]/div[1]/nav[2]/ul[1]/li[3]/a[1]/span[1]")))
ProcessReports.click()
#Enter Report Key
report_key_textbox = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//body[1]/otsitewarning[1]/div[3]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[2]/div[1]/div[2]/div[1]/div[1]/div[3]/input[1]")))
report_key_textbox.clear()
report_key_textbox.send_keys(Report_Key)
#Click Go button
gobtn = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//body[1]/otsitewarning[1]/div[3]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[2]/div[1]/div[2]/div[1]/div[2]/div[6]/input[1]")))
gobtn.click()
# #Click on report
time.sleep(2)
rprt=driver.find_element(By.XPATH,"//tbody/tr[2]/td[1]/div[1]/ol[1]")
rprt.click()
time.sleep(2)
try: #to expand the hidden itemizations
Expand_btn = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH,"//body[1]/otsitewarning[1]/div[3]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[4]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/table[1]/thead[1]/tr[1]/td[1]/div[1]/div[1]")))
Expand_btn.click()
except:
pass
for i in range(1, 100):
try: #to find an itemization if next line item is not found
#Clicking on line item
LineItem = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH,f"//body[1]/otsitewarning[1]/div[3]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[4]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[2]/div[1]/div[{i}]/table[1]/tbody[1]/tr[1]/td[5]/div[1]/b[1]")))
LineItem.click()
Amount = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH,f"//body[1]/otsitewarning[1]/div[3]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[4]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[2]/div[1]/div[{i}]/table[1]/tbody[1]/tr[1]/td[7]/div[1]")))
Approved_Amount = Amount.text
except:
#Clicking on ltemization
itemization = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH,f"//body[1]/otsitewarning[1]/div[3]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[4]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[2]/div[1]/div[{i}]/table[1]/tbody[1]/tr[1]/td[5]/div[1]/div[1]")))
itemization.click()
try: #If Receipt Image tab is not found, code will go to next line item
#Clicking on Receipt image tab
Receipt_Tab = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//body[1]/otsitewarning[1]/div[3]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[4]/div[1]/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[2]/ul[1]/li[7]/a[2]/em[1]/span[1]/span[1]")))
time.sleep(2)
Receipt_Tab.click()
time.sleep(2)
try:
#Enlarging Image
ZoomInButton=WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//body[1]/otsitewarning[1]/div[3]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[4]/div[1]/div[1]/div[3]/div[1]/div[1]/div[2]/div[2]/div[2]/div[3]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/table[1]/tbody[1]/tr[1]/td[1]/table[1]/tbody[1]/tr[1]/td[2]/table[1]/tbody[1]/tr[2]/td[2]/em[1]/button[1]")))
ZoomInButton.click()
ZoomInButton.click()
ZoomInButton.click()
ZoomInButton.click()
#Saving Png recipt
Receipt_Image = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//body[1]/otsitewarning[1]/div[3]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[4]/div[1]/div[1]/div[3]/div[1]/div[1]/div[2]/div[2]/div[2]/div[3]/div[1]/div[1]/div[1]/div[1]/div[2]/div[1]/canvas[1]")))
ActionChains(driver).context_click(Receipt_Image).perform()
time.sleep(1)
pyautogui.press('down')
time.sleep(1)
pyautogui.press('enter')
time.sleep(1)
pyautogui.write(str(Report_Key)+"_"+Approved_Amount+"_"+str(i))
time.sleep(2)
pyautogui.press('enter')
except:
#Saving Pdf
Receipt_Tab = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//body[1]/otsitewarning[1]/div[3]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[4]/div[1]/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[2]/ul[1]/li[7]/a[2]/em[1]/span[1]/span[1]")))
time.sleep(2)
Receipt_Tab.click()
time.sleep(2)
Receipt_Image = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "#EntryLineItemReceipt-Tab_ImgPanel_RcptLoadingFrame")))
ActionChains(driver).context_click(Receipt_Image).perform()
time.sleep(1)
pyautogui.press('down')
pyautogui.press('down')
time.sleep(1)
pyautogui.press('enter')
time.sleep(1)
pyautogui.write(str(Report_Key)+"_"+Approved_Amount+"_"+str(i))
time.sleep(1)
pyautogui.press('enter')
except:
continue
except:
continue