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.
53 lines
1.7 KiB
53 lines
1.7 KiB
import asyncio
|
|
import os
|
|
import pyppeteer
|
|
import time
|
|
def run(coroutine):
|
|
loop = asyncio.get_event_loop()
|
|
return loop.run_until_complete(coroutine)
|
|
|
|
class browser:
|
|
'''wrapper around pyppeteer browser'''
|
|
def __init__(self,**launch_opts):
|
|
self.browser = None
|
|
self.launch_opts = launch_opts
|
|
self.page = None
|
|
|
|
def restart_browser(self,proxy=None,use_adblock=True,start_page='about:blank'):
|
|
if self.browser is not None:
|
|
self.close()
|
|
opts = {}
|
|
opts.update(self.launch_opts)
|
|
if use_adblock:
|
|
if __name__ == "__main__":
|
|
ext = os.path.join(os.getcwd(),'uBlock')
|
|
else:
|
|
ext = os.path.abspath(os.path.join(os.path.dirname(__file__),'uBlock'))
|
|
# print(ext)
|
|
opts.setdefault('args',[]).extend(['--disable-extensions-except='+ext, '--load-extension='+ext])
|
|
if proxy is not None:
|
|
opts.setdefault('args',[]).extend(['--proxy-server='+proxy])
|
|
opts.setdefault('args',[]).append(start_page)
|
|
self.browser = run(pyppeteer.launch(**opts))
|
|
self.page = run(self.browser.pages())[0]
|
|
run(self.page.waitForNavigation())
|
|
|
|
def open(self,url,wait_for = 0):
|
|
if self.page is None:
|
|
page = run(self.browser.pages())[0]
|
|
run(page.goto(url))
|
|
time.sleep(wait_for)
|
|
return self.get_source()
|
|
|
|
def close(self):
|
|
run(self.browser.close())
|
|
|
|
def get_source(self):
|
|
if self.page is None:
|
|
self.page = run(self.browser.pages())[0]
|
|
return run(self.page.content())
|
|
if __name__ == "__main__":
|
|
b = browser(headless=False)
|
|
b.restart_browser(start_page='https://www.google.com')
|
|
source = b.get_source()
|
|
b.close()
|