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.

49 lines
1.4 KiB

7 years ago
  1. import pyppeteer
  2. import asyncio
  3. import os
  4. async def _get_link(browser,link):
  5. pages = await browser.pages()
  6. page = pages[0]
  7. await page.goto(link,timeout=60_000)
  8. webpage = None
  9. for i in range(20):
  10. try:
  11. webpage = await page.content()
  12. break
  13. except:
  14. time.sleep(1)
  15. return webpage
  16. async def _single_link(browser,link):
  17. webpage = await _get_link(browser,link)
  18. await browser.close()
  19. return webpage
  20. async def _multi_link(browser,links):
  21. results = {}
  22. for link in links:
  23. webpage = await _get_link(browser,link)
  24. results[link] = webpage
  25. await browser.close()
  26. return results
  27. def get_link(links,headless = True,proxy = None):
  28. ext = os.path.join(os.path.dirname(__file__),'uBlock0.chromium')
  29. loop = asyncio.get_event_loop()
  30. run = loop.run_until_complete
  31. opts = {
  32. 'headless':headless,
  33. }
  34. opts['args'] = [f'--disable-extensions-except={ext}', f'--load-extension={ext}']
  35. if proxy:
  36. opts['args'] += [f'--proxy-server={proxy}']
  37. # print(opts)
  38. browser = run(pyppeteer.launch(**opts))
  39. try:
  40. if isinstance(links,list):
  41. result = run(_multi_link(browser,links))
  42. else:
  43. result = run(_single_link(browser,links))
  44. return result
  45. except Exception as e:
  46. run(browser.close())
  47. raise e