Я пытаюсь настроить обработчик Lambda AWS, который включает использование pyppeteer (python-порта безголового Chrome в node.js) для создания снимка экрана.
def getSavePath():
path = "picture_{}.png".format(random.randint(100, 1000))
loop = asyncio.get_event_loop()
loop.run_until_complete(._screenshot(path))
print("Done taking screenshot...")
return path
async def _screenshot(path):
browser = await launch()
page = await browser.newPage()
await page.goto(URL, {"waitUntil": "networkidle0"})
textBox = await page.querySelector('[name="section"]')
submitButton = await page.querySelector('#submit')
canvas = await page.querySelector("#canvas")
await textBox.click({"clickCount": 3});
await textBox.type(self.wkt)
await submitButton.click()
await canvas.screenshot({'path': path})
await browser.close()
Когда я запускаю это локально, снимок экрана получается, и путь возвращается правильно.
Когда я запускаю это на AWS Lambda, я получаю:
loop.run_until_complete(._screenshot(path))
File "/var/task/asyncio/base_events.py", line 296, in run_until_complete
future = tasks.async(future, loop=self)
File "/var/task/asyncio/tasks.py", line 516, in async
raise TypeError('A Future or coroutine is required')
TypeError: A Future or coroutine is required
/var/task/slash.py:50: RuntimeWarning: coroutine '_screenshot' was never awaited
Есть мысли о том, почему это будет работать локально, но не на Lambda?
Я использую Python версии 3.6 как локально, так и на Lambda.