Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python2
- import selenium
- import getpass
- import sys
- import time
- from selenium import webdriver
- from selenium.webdriver.common.keys import Keys
- import urllib2
- import argparse
- parser = argparse.ArgumentParser()
- parser.add_argument('username')
- parser.add_argument('contest', nargs='?', default=None)
- parser.add_argument('submit', type=int)
- parser.add_argument('file')
- args = parser.parse_args()
- browser = webdriver.Firefox()
- browser.implicitly_wait(5)
- browser.get("https://satori.tcs.uj.edu.pl/login?redir=/logout")
- username = browser.find_element_by_id("id_login")
- password = browser.find_element_by_id("id_password")
- username.send_keys(args.username)
- password.send_keys(getpass.getpass())
- time.sleep(3)
- login_attempt = browser.find_element_by_xpath("//*[@type='submit']")
- time.sleep(3)
- login_attempt.submit()
- time.sleep(3)
- header = browser.find_element_by_id("header").get_attribute("innerText")
- if "Logged in" in header:
- pass
- else:
- print "Invalid credentials"
- sys.exit(1)
- select_contest = browser.find_element_by_link_text('Select contest')
- select_contest.click()
- time.sleep(3)
- def openOldContests():
- dropdown = browser.find_element_by_xpath('//select[@name="participating_filter_archived"]')
- dropdown.click()
- time.sleep(1)
- dropdown.send_keys(Keys.ARROW_DOWN, Keys.ENTER)
- filter_buttons = browser.find_element_by_xpath("//*[@type='submit']")
- filter_buttons.click()
- time.sleep(3)
- openOldContests()
- contests = browser.find_elements_by_xpath('//table[@class="results"][1]//tr')[1:]
- contest_links = []
- for contest_elem in contests:
- contest_clickable_link = contest_elem.find_element_by_class_name("stdlink")
- contest_description = contest_elem.find_element_by_class_name("description")
- if args.contest is None:
- contest_links.append(contest_clickable_link)
- elif args.contest in contest_clickable_link.text or args.contest in contest_description.text:
- contest_links.append(contest_clickable_link)
- if args.contest is None:
- pass
- elif len(contest_links) == 0:
- print "not found contest"
- sys.exit(1)
- elif len(contest_links) > 1:
- print "ambiguous contest"
- sys.exit(1)
- def lookforsubmit():
- time.sleep(3)
- results = browser.find_element_by_link_text('Results')
- # print "results found = " + results.text
- results.click()
- # print "clicked results"
- time.sleep(6)
- elems = browser.find_elements_by_class_name("wheelitem")
- elems_amount = len(elems)
- submits = browser.find_elements_by_class_name("stdlink")
- for submit in submits:
- # print args.submit
- # print submit.text
- if(args.submit == int(submit.text)):
- submit.click()
- time.sleep(3)
- download_link = browser.find_element_by_link_text('download')
- url = download_link.get_attribute('href')
- token = 'satori_token=' + browser.get_cookie('satori_token')['value']
- opener = urllib2.build_opener()
- opener.addheaders.append(('Cookie', token))
- code = opener.open(url).read()
- file_to_write = open(args.file, "w+")
- file_to_write.write(code)
- file_to_write.close()
- browser.close()
- sys.exit(0)
- for i in range(0, elems_amount):
- elems = browser.find_elements_by_class_name("wheelitem")
- elems[i].click()
- time.sleep(3)
- submits = browser.find_elements_by_class_name("stdlink")
- for submit in submits:
- # print args.submit
- # print submit.text
- if(args.submit == int(submit.text)):
- submit.click()
- time.sleep(3)
- download_link = browser.find_element_by_link_text('download')
- url = download_link.get_attribute('href')
- token = 'satori_token=' + browser.get_cookie('satori_token')['value']
- opener = urllib2.build_opener()
- opener.addheaders.append(('Cookie', token))
- code = opener.open(url).read()
- file_to_write = open(args.file, "w+")
- file_to_write.write(code)
- file_to_write.close()
- browser.close()
- sys.exit(0)
- # print submit
- link_texts = []
- for link in contest_links:
- link_texts.append(link.text)
- for link_text in link_texts:
- clickable_link = browser.find_element_by_link_text(link_text)
- clickable_link.click()
- # print "inside of " + link_text
- lookforsubmit()
- parent = browser.find_element_by_id("clock")._parent
- change_contest = parent.find_element_by_link_text("change")
- change_contest.click()
- time.sleep(3)
- openOldContests()
- print "not found proper submit"
- sys.exit(1)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement