29 lines
1018 B
Markdown
29 lines
1018 B
Markdown
```python
|
|
from playwright.async_api import async_playwright as aP
|
|
from db import DB
|
|
import xvfbwrapper, io, PIL.Image, os
|
|
|
|
async def Page(browser='chromium', headless=True):
|
|
if headless: xvfbwrapper.Xvfb().start()
|
|
else: os.environ['DISPLAY'] = ':0'
|
|
db = DB()
|
|
|
|
playwright = await aP().start()
|
|
browser = await getattr(playwright, browser).launch(headless=False)
|
|
context = await browser.new_context(accept_downloads=True)
|
|
context.set_default_timeout(0)
|
|
|
|
async def handle_request(route):
|
|
url = route.request.url
|
|
if body := db[url]: return await route.fulfill(body=body)
|
|
if response := await route.continue_():
|
|
if response.ok and not db.exists(url):
|
|
db[url] = await response.body()
|
|
await route.fulfill(response=response)
|
|
|
|
await context.route('**/*', handle_request)
|
|
for block in ['**/*.gif', '**/css*.js']:
|
|
await context.route(block, lambda route: route.abort())
|
|
|
|
return await context.new_page()
|
|
``` |