Как вернуть изображение, не закрывая лямбда-запрос? - PullRequest
0 голосов
/ 27 марта 2019

У меня есть код Python 3.6 в AWS Lambda, который открывает веб-сайт с использованием селена и драйвера Chrome.Он открывает страницу, делает снимок экрана и возвращает строку Base64 на мой локальный ПК, который затем сохраняет ее в виде файла .PNG.Можно ли вернуть это изображение без остановки лямбда-кода.Я пытаюсь просмотреть все веб-страницы, по которым он переходит по одной за раз.

lambda_function.py сейчас выглядит так.

def lambda_handler(event, context):
    # TODO implement
    print("Starting Chrome")
    chrome_options = Options()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--no-sandbox')
    chrome_options.add_argument('--disable-gpu')
    chrome_options.add_argument('--window-size=1280x1696')
    chrome_options.add_argument('--user-data-dir=/tmp/user-data')
    chrome_options.add_argument('--hide-scrollbars')
    chrome_options.add_argument('--enable-logging')
    chrome_options.add_argument('--log-level=0')
    chrome_options.add_argument('--v=99')
    chrome_options.add_argument('--single-process')
    chrome_options.add_argument('--data-path=/tmp/data-path')
    chrome_options.add_argument('--ignore-certificate-errors')
    chrome_options.add_argument('--homedir=/tmp')
    chrome_options.add_argument('--disk-cache-dir=/tmp/cache-dir')
    chrome_options.add_argument('user-agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36')
    chrome_options.binary_location = os.getcwd() + "/bin/headless-chromium"

    driver = webdriver.Chrome(chrome_options=chrome_options)
    png = ""
    if 'url' in event.keys():
        driver.get(event['url'])
        # take first screenshot here
        # png = driver.get_screenshot_as_base64()
        try:
            send = driver.find_element_by_id("action-button")
            send.click()
            time.sleep(4)
            # take second screenshot here
            # png = driver.get_screenshot_as_base64()
        except NoSuchElementException:
            return "action-button not found"
        time.sleep(15)
        png = driver.get_screenshot_as_base64()
    driver.close()
    return png

Я бы хотел бытьвозможность просматривать каждую страницу при загрузке во время выполнения.

Ответы [ 2 ]

0 голосов
/ 27 марта 2019

Вы можете сделать это, попросив Lambda отправить результат изображения для каждой страницы на ваш электронный адрес через SES , или загрузив изображение в S3 , а затем отправив ссылку на объектна вашу электронную почту / телефон / и т. д.через SNS .

Все эти сервисы имеют хорошо документированных SDK

0 голосов
/ 27 марта 2019

Нет. Оператор return завершает выполнение функции Lambda.

Хотя в Python есть команда yield, которая останавливает выполнение до тех пор, пока не будет запрошена следующая итерация, она не применима для Lambda.

Вы можете отслеживать функцию Lambda через вывод журнала в журналах CloudWatch, но есть небольшая задержка, прежде чем запись журнала станет доступной.

...