Error calling screenshot_as_base64 on lambda, while MacOS is working

Viewed 89

I am testing with the same code on MacOS and then deploying on AWS lambda. Everything works except for one function getting the screenshot.

For AWS lambda I am using setup described in https://github.com/21Buttons/pychromeless

With

Chrome driver https://chromedriver.storage.googleapis.com/2.37/chromedriver_linux64.zi

headless chrome https://github.com/adieuadieu/serverless-chrome/releases/download/v1.0.0-37/stable-headless-chromium-amazonlinux-2017-03.zip

def get_image_fullpage_screenshot(browser):
    logger.info("get_image_fullpage_screenshot")
    required_width = browser.execute_script('return document.body.parentNode.scrollWidth')
    required_height = browser.execute_script('return document.body.parentNode.scrollHeight')
    browser.set_window_size(required_width, required_height)
    logger.info("Browser required_width %d , required_height %d" % (required_width, required_height))
    # driver.save_screenshot(path)  # has scrollbar
    body_element = browser.find_element_by_tag_name('body')
    logging.info("Got body")
    logging.info(dir(body_element))
    bs4 = None
    try:
        bs4 = body_element.screenshot_as_base64
        logging.info("Worked body_element.screenshot")
    except Exception as e:
        logging.info("Can't body_element.screenshot_as_base64 %s " %str(e))
    return bs4

The error that I am getting is

Can't body_element.screenshot_as_base64 Message: unknown command: session/1423106400075214591ff2e5def5f55a/element/0.5505971093767275-1/screenshot

However, is dir on the object gives this:

    ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_execute', '_id', '_parent', '_upload', '_w3c', 'clear', 'click', 'find_element', 'find_element_by_class_name', 'find_element_by_css_selector', 'find_element_by_id', 'find_element_by_link_text', 'find_element_by_name', 'find_element_by_partial_link_text', 'find_element_by_tag_name', 'find_element_by_xpath', 'find_elements', 'find_elements_by_class_name', 'find_elements_by_css_selector', 'find_elements_by_id', 'find_elements_by_link_text', 'find_elements_by_name', 'find_elements_by_partial_link_text', 'find_elements_by_tag_name', 'find_elements_by_xpath', 'get_attribute', 'get_property', 'id', 'is_displayed', 'is_enabled', 'is_selected', 'location', 'location_once_scrolled_into_view', 'parent', 'rect', 'screenshot', 'screenshot_as_base64', 'screenshot_as_png', 'send_keys', 'size', 'submit', 'tag_name', 'text', 'value_of_css_property']

so the function does exist but not?

Any suggestions would be apprechiated

1 Answers

As it turned out the lambda was running out of memory, of course, no error given. After increasing memory to 1024MB, everything works as expected.

Sanity restored.

Related