Con las funciones de AWS Lambda con Python y Selenium, quiero crear un raspador de cromo sin cabeza indetectable al pasar una prueba de cromo sin cabeza . Compruebo la indetectabilidad de mi raspador sin cabeza abriendo la prueba y tomando una captura de pantalla. Ejecuté esta prueba en un IDE local y en un servidor Lambda.
Usaré una biblioteca de python llamada selenium-stealth y seguiré su configuración básica:
stealth(driver, languages=["en-US", "en"], vendor="Google Inc.", platform="Win32", webgl_vendor="Intel Inc.", renderer="Intel Iris OpenGL Engine", fix_hairline=True, )Implementé esta configuración en un IDE local y en un servidor Lambda de AWS para comparar los resultados.
A continuación se encuentran los resultados de las pruebas que se ejecutan en un IDE local: 
Cuando ejecuto esto en un servidor Lambda, tanto el proveedor como el renderizador de WebGL están en blanco. Como se muestra abajo:
Incluso traté de cambiar manualmente el Proveedor/Procesador de WebGL usando el siguiente comando de JavaScript:
driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {"source": "WebGLRenderingContext.prototype.getParameter = function(parameter) {if (parameter === 37445) {return 'VENDOR_INPUT';}if (parameter === 37446) {return 'RENDERER_INPUT';}return getParameter(parameter);};"})Entonces pensé que tal vez podría haber algún problema con el número de parámetro. Configuré la ejecución del comando sin la declaración if, pero sucedió lo mismo: funcionó en mi IDE local pero no tuvo efecto en un servidor AWS Lambda.
¿Es posible agregar Proveedor/Procesador en AWS Lambda ? En mis esfuerzos, parece que no hay manera posible. Me aseguré de enviar este problema en el repositorio GitHub de selenium-stealth.
Una solución que encontré para el proveedor/renderizador de WebGL que faltaba era usar un contenedor acoplable en lugar de las capas normales de Lambda al crear una función. No solo aumenta el almacenamiento en un factor de 40X , sino que también resuelve el problema del proveedor/procesador de WebGL: 