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.

42 lines
1.1 KiB

  1. import pyppeteer
  2. import asyncio
  3. async def _get_link(browser,link):
  4. pages = await browser.pages()
  5. page = pages[0]
  6. await page.goto(link)
  7. webpage = None
  8. for i in range(20):
  9. try:
  10. webpage = await page.content()
  11. break
  12. except:
  13. time.sleep(1)
  14. return webpage
  15. async def _single_link(brower,link):
  16. webpage = await _get_link(brower,link)
  17. await brower.close()
  18. return webpage
  19. async def _multi_link(brower,links):
  20. results = {}
  21. for link in links:
  22. webpage = await _get_link(brower,link)
  23. result[link] = webpage
  24. await brower.close()
  25. return results
  26. def get_link(links,headless = False,proxy = None):
  27. loop = asyncio.get_event_loop()
  28. run = loop.run_until_complete
  29. opts = {
  30. 'headless':headless,
  31. }
  32. if proxy:
  33. opts['args'] = ['--proxy-server={}'.format(proxy)]
  34. browser = run(pyppeteer.launch(**opts))
  35. if isinstance(links,list):
  36. result = run(_multi_link(brower,links))
  37. else:
  38. result = run(_single_link(browser,links))
  39. return result