Files
Python/ua-pay.py
T

65 lines
2.5 KiB
Python
Raw Normal View History

2024-11-18 14:14:32 -07:00
#!/usr/bin/python3
# Description: A command-line interface to https://openpayrolls.com for University of Arizona payroll data.
# Usage: python3 ua-pay.py -fn <first_name> -ln <last_name>
# Author: Justin Oros
# Source: https://github.com/JustinOros
# Dependencies: pip install requests selenium beautifulsoup4
import argparse
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
# Setup argparse to allow command-line input for first and last name
parser = argparse.ArgumentParser(description="Scrape data for a given employee from OpenPayrolls.")
parser.add_argument('-fn', '--firstname', required=True, help="First name of the employee")
parser.add_argument('-ln', '--lastname', required=True, help="Last name of the employee")
# Parse command-line arguments
args = parser.parse_args()
# Construct URL using provided first and last name (converted to lowercase)
url = f'https://openpayrolls.com/employee/{args.firstname.lower()}-{args.lastname.lower()}-4329'
# Set up Selenium WebDriver (Chrome in headless mode)
options = Options()
options.headless = True # Ensure headless mode is enabled
options.add_argument("--no-sandbox") # Sometimes needed for headless mode to work in certain environments
options.add_argument("--disable-dev-shm-usage") # Prevents issues in some systems
# Specify the path to the ChromeDriver if it's not in the system PATH
driver = webdriver.Chrome(options=options)
# Open the target URL
driver.get(url)
# Wait for the page to fully load (use a fixed time delay or more advanced methods if necessary)
driver.implicitly_wait(10) # wait up to 10 seconds for the page to load
# Get the page source after JavaScript has been rendered
page_source = driver.page_source
# Use BeautifulSoup to parse the page content
soup = BeautifulSoup(page_source, 'html.parser')
# Extract all text from the page
page_text = soup.get_text(strip=True)
# Find portion of the text starting with "University of Arizona (UA) records show" and ending with "employees."
start_marker = "University of Arizona (UA) records show"
end_marker = "employees."
# Find the start and end positions in the text
start_index = page_text.find(start_marker)
end_index = page_text.find(end_marker, start_index) + len(end_marker)
# Extract the relevant portion of the text (if both markers are found)
if start_index != -1 and end_index != -1:
relevant_text = page_text[start_index:end_index]
print(relevant_text)
else:
print("The specified text could not be found on the page.")
# Close the browser after scraping
driver.quit()