You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

46 lines
1.7 KiB

  1. from pyppeteer import launch
  2. import asyncio
  3. import time
  4. import scraper
  5. set_semester = "document.getElementsByName('term_in')[0].selectedIndex = 0"
  6. xpaths = {
  7. 'tab':".//a[text()='Current Student']",
  8. 'schedule':".//a[text()='Student Detail Schedule']",
  9. 'submit':"//input[@value='Submit']",
  10. 'frame':"//frame[@src='/cp/ip/login?sys=sctssb&url=https://ssb.neiu.edu/mercury_neiuprod/bwskfshd.P_CrseSchdDetl']"
  11. }
  12. async def xpath_single_element(xpath,page):
  13. await page.waitForXPath(xpath)
  14. elements = await page.xpath(xpath)
  15. return elements[0]
  16. async def main_loop(login):
  17. browser = await launch(headless = False)
  18. page_list = await browser.pages()
  19. page = page_list[0]
  20. r = await page.goto('https://neiuport.neiu.edu/cp/home/displaylogin')
  21. await page.evaluate(login)
  22. await page.waitFor('#tab')
  23. student_tab = await xpath_single_element(xpaths['tab'],page)
  24. await student_tab.click()
  25. await page.waitForXPath(xpaths['schedule'])
  26. schedule = await xpath_single_element(xpaths['schedule'],page)
  27. await schedule.click()
  28. page.waitForXPath(xpaths['frame'])
  29. await asyncio.sleep(3)
  30. frame = page.frames[-1]
  31. submit= await xpath_single_element(xpaths['submit'],frame)
  32. await submit.click()
  33. await asyncio.sleep(1)
  34. content = await page.frames[-1].content()
  35. await browser.close()
  36. return scraper.get_classes(content)
  37. def get_classes(user,password):
  38. login = """document.getElementById('user').value='{}'
  39. document.getElementById('pass').value='{}'
  40. login()""".format(user,password)
  41. loop = asyncio.get_event_loop()
  42. r = loop.run_until_complete
  43. return r(main_loop(login))
  44. if __name__ == "__main__":
  45. cl = get_classes('rlroberts5','YxmZZ905p0w6')