Advertisement
Guest User

Untitled

a guest
Jan 31st, 2017
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.34 KB | None | 0 0
  1. #!/usr/bin/env python2
  2.  
  3. import selenium
  4. import getpass
  5. import sys
  6. import time
  7. from selenium import webdriver
  8. from selenium.webdriver.common.keys import Keys
  9. import urllib2
  10. import argparse
  11.  
  12. parser = argparse.ArgumentParser()
  13. parser.add_argument('username')
  14. parser.add_argument('contest', nargs='?', default=None)
  15. parser.add_argument('submit', type=int)
  16. parser.add_argument('file')
  17. args = parser.parse_args()
  18.  
  19. browser = webdriver.Firefox()
  20. browser.implicitly_wait(5)
  21. browser.get("https://satori.tcs.uj.edu.pl/login?redir=/logout")
  22.  
  23. username = browser.find_element_by_id("id_login")
  24. password = browser.find_element_by_id("id_password")
  25.  
  26. username.send_keys(args.username)
  27. password.send_keys(getpass.getpass())
  28.  
  29. time.sleep(3)
  30. login_attempt = browser.find_element_by_xpath("//*[@type='submit']")
  31. time.sleep(3)
  32. login_attempt.submit()
  33. time.sleep(3)
  34.  
  35. header = browser.find_element_by_id("header").get_attribute("innerText")
  36. if "Logged in" in header:
  37.     pass
  38. else:
  39.     print "Invalid credentials"
  40.     sys.exit(1)
  41.  
  42. select_contest = browser.find_element_by_link_text('Select contest')
  43. select_contest.click()
  44. time.sleep(3)
  45.  
  46. def openOldContests():
  47.     dropdown = browser.find_element_by_xpath('//select[@name="participating_filter_archived"]')
  48.     dropdown.click()
  49.     time.sleep(1)
  50.     dropdown.send_keys(Keys.ARROW_DOWN, Keys.ENTER)
  51.     filter_buttons = browser.find_element_by_xpath("//*[@type='submit']")
  52.     filter_buttons.click()
  53.     time.sleep(3)
  54.  
  55. openOldContests()
  56.  
  57. contests = browser.find_elements_by_xpath('//table[@class="results"][1]//tr')[1:]
  58.  
  59. contest_links = []
  60. for contest_elem in contests:
  61.     contest_clickable_link = contest_elem.find_element_by_class_name("stdlink")
  62.     contest_description = contest_elem.find_element_by_class_name("description")
  63.     if args.contest is None:
  64.         contest_links.append(contest_clickable_link)
  65.     elif args.contest in contest_clickable_link.text or args.contest in contest_description.text:
  66.             contest_links.append(contest_clickable_link)
  67.  
  68. if args.contest is None:
  69.     pass
  70. elif len(contest_links) == 0:
  71.     print "not found contest"
  72.     sys.exit(1)
  73. elif len(contest_links) > 1:
  74.     print "ambiguous contest"
  75.     sys.exit(1)
  76.  
  77. def lookforsubmit():
  78.     time.sleep(3)
  79.     results = browser.find_element_by_link_text('Results')
  80.     # print "results found = " + results.text
  81.     results.click()
  82.     # print "clicked results"
  83.     time.sleep(6)
  84.     elems = browser.find_elements_by_class_name("wheelitem")
  85.     elems_amount = len(elems)
  86.  
  87.     submits = browser.find_elements_by_class_name("stdlink")
  88.    
  89.     for submit in submits:
  90.         # print args.submit
  91.         # print submit.text
  92.         if(args.submit == int(submit.text)):
  93.             submit.click()
  94.             time.sleep(3)
  95.            
  96.             download_link = browser.find_element_by_link_text('download')
  97.             url = download_link.get_attribute('href')
  98.             token = 'satori_token=' + browser.get_cookie('satori_token')['value']
  99.            
  100.             opener = urllib2.build_opener()
  101.             opener.addheaders.append(('Cookie', token))
  102.             code = opener.open(url).read()
  103.  
  104.             file_to_write = open(args.file, "w+")
  105.             file_to_write.write(code)
  106.             file_to_write.close()
  107.  
  108.             browser.close()
  109.             sys.exit(0)
  110.  
  111.     for i in range(0, elems_amount):
  112.         elems = browser.find_elements_by_class_name("wheelitem")
  113.         elems[i].click()
  114.         time.sleep(3)
  115.  
  116.         submits = browser.find_elements_by_class_name("stdlink")
  117.         for submit in submits:
  118.             # print args.submit
  119.             # print submit.text
  120.             if(args.submit == int(submit.text)):
  121.                 submit.click()
  122.                 time.sleep(3)
  123.                
  124.                 download_link = browser.find_element_by_link_text('download')
  125.                 url = download_link.get_attribute('href')
  126.                 token = 'satori_token=' + browser.get_cookie('satori_token')['value']
  127.                
  128.                 opener = urllib2.build_opener()
  129.                 opener.addheaders.append(('Cookie', token))
  130.                 code = opener.open(url).read()
  131.  
  132.                 file_to_write = open(args.file, "w+")
  133.                 file_to_write.write(code)
  134.                 file_to_write.close()
  135.  
  136.                 browser.close()
  137.                 sys.exit(0)
  138.             # print submit
  139. link_texts = []
  140. for link in contest_links:
  141.     link_texts.append(link.text)
  142.  
  143. for link_text in link_texts:
  144.     clickable_link = browser.find_element_by_link_text(link_text)
  145.     clickable_link.click()
  146.     # print "inside of " + link_text
  147.     lookforsubmit()
  148.     parent = browser.find_element_by_id("clock")._parent
  149.     change_contest = parent.find_element_by_link_text("change")
  150.     change_contest.click()
  151.     time.sleep(3)
  152.     openOldContests()
  153.  
  154. print "not found proper submit"
  155. sys.exit(1)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement