title: Running Selenium on AWS Lambda
body: <p>I know this is a frequently asked question, I have checked many answers and tried everything but still can't find a solution.</p>
  
  <p>I am trying to run Selenium with Python 3.6 on AWS Lambda and created the deployment package using Docker. I followed the following steps for Docker:</p>
  
  <pre><code>sudo docker run -v $(pwd):/outputs --name linked_in -d amazonlinux:latest tail -f /dev/null
  sudo docker exec -i -t linked_in /bin/bash /outputs/buildPack_py.sh
  </code></pre>
  
  <p>This is what my <code>buildPack_py.sh</code> file looks like:</p>
  
  <pre><code>
  python_install (){
  
    wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tar.xz
    tar xJf Python-3.6.0.tar.xz
    cd Python-3.6.0
  
    ./configure
    make -j 5
    make install -j 5
    export PATH=/usr/local/bin/:$PATH
    cd ..
    rm Python-3.6.0.tar.xz
    rm -rf Python-3.6.0
  }
  
  dev_install () {
    yum -y update
    yum -y upgrade
    yum install -y \
    wget \
    curl \
    apt-get \
    gcc \
    gcc-c++ \
    findutils \
    zlib-devel \
    zip \
    xz \
    tar \
    make \
    openssl-devel \
    unzip \
    atlas atlas-devel lapack-devel blas-devel
  #  curl https://intoli.com/install-google-chrome.sh | bash
  #  mv /usr/bin/google-chrome /usr/bin/google-chrome-stable
    wget https://chromedriver.storage.googleapis.com/2.37/chromedriver_linux64.zip
    unzip chromedriver_linux64.zip
    curl -SL https://github.com/adieuadieu/serverless-chrome/releases/download/v1.0.0-37/stable-headless-chromium-amazonlinux-2017-03.zip &gt; headless-chromium.zip
      unzip headless-chromium.zip -d bin/
  }
  
  install_packages () {
    cd /home/
      rm -rf env
    pip3 install virtualenv
    python3 -m virtualenv env --python=python3
    source env/bin/activate
    pip install datetime
    pip install requests
    pip install math
    pip install lxml
    pip install selenium
    pip install beautifulsoup4
    deactivate
  }
  
  
  gather_pack () {
    # packing
    cd /home/
      source env/bin/activate
  
    rm -rf lambdapack5
    mkdir lambdapack5
    cd lambdapack5
  
    cp -R /home/env/lib/python3.6/site-packages/* .
    cp -R /home/env/lib64/python3.6/site-packages/* .
    cp /outputs/linkedinScraper.py /home/lambdapack5/
    cp /chromedriver /home/lambdapack5/chromedriver
    cp /bin/headless-chromium /home/lambdapack5/headless-chromium
      echo "original size $(du -sh /home/lambdapack5 | cut -f1)"
  
    # cleaning libs
    rm -rf external
    #    find . -type d -name "tests" -exec rm -rf {} +
  
    # cleaning
    find -name "*.so" ! -name "_imaging.cpython-36m-x86_64-linux-gnu.so" | xargs strip
    #    find -name "*.so.*" | xargs strip
    find . -name test -type d -print0|xargs -0 rm -rf --
      rm -r pip
    rm -r pip-*
      rm -r wheel
    rm -r wheel-*
      rm easy_install.py
    find . -name \*.pyc -delete
    # find . -name \*.txt -delete
    echo "stripped size $(du -sh /home/lambdapack5 | cut -f1)"
  
    # compressing
    zip -FS -r9 /outputs/linkedinApi.zip * &gt; /dev/null
    echo "compressed size $(du -sh /outputs/linkedinApi.zip | cut -f1)"
  }
  
  main () {
    dev_install
    python_install
    install_packages
    gather_pack
  }
  
  main
  </code></pre>
  
  <p>I am using the following versions:</p>
  
  <p><strong>chromedriver</strong>: 2.35
  <strong>serverless-chromium</strong>: 1.0.0-37</p>
  
  <p>The error I get after uploading the zip file to Lambda is:</p>
  
  <blockquote>
    <p>selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally</p>
  </blockquote>
  
  <p>On going through other posts, I found the versions mentioned above that work well together. I also saw mention of <code>Xvfb</code> but is it really required if I am using headless browser.</p>
  
  <p>This is a part of the Selenium code:</p>
  
  <pre><code>    options = webdriver.ChromeOptions()
      options.add_argument('--headless')
      options.add_argument("--no-sandbox")
      options.add_argument('--disable-gpu')
      options.add_argument('--window-size=1280x1696')
      options.add_argument('--user-data-dir=/tmp/')
      options.add_argument('--hide-scrollbars')
      options.add_argument('--enable-logging')
      options.add_argument('--log-level=0')
      options.add_argument('--v=99')
      options.add_argument('--single-process')
      options.add_argument('--data-path=/tmp/')
      options.add_argument('--ignore-certificate-errors')
      options.add_argument('--homedir=/tmp/')
      options.add_argument('--disk-cache-dir=/tmp/')
      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')
      options.binary_location = "headless-chromium"
      driver = webdriver.Chrome(executable_path=os.path.abspath("chromedriver"),options=options)
  </code></pre>
  
  <p>Any help is greatly greatly appreciated!</p>