[PYTHON] So erstellen Sie AWS Lambda-Schichten, wenn Selen × Chrom auf AWS Lambda ausgeführt wird

In diesem Artikel

Von AWS Lambda, wenn Sie den Browser mit Selen × Chrom betreiben möchten Ich bin süchtig danach, wie man eine Ebene erstellt, also werde ich sie veröffentlichen.

Was du machen willst

Ich möchte Selen x Chrom auf AWS Lambda ausführen.

Umgebung

windows 10 Pro python 3.7 chromdriver 2.37 headless-chromium 64.0.3282.167

Nicht auflisten

Wo ich gestolpert bin

  1. Einheit zur Herstellung von AWS Lambda-Schichten
  2. So installieren und rufen Sie AWS Lambda Layers auf

1. Einheit zur Herstellung von AWS Lambda-Schichten

Erstens sind AWS Lambda-Schichten wie allgemeine Funktionen, die von Lamda gemeinsam verwendet werden können. Es kann wie unten gezeigt vom Lambda-Hauptgerät aus als aufgerufen bezeichnet werden. Indem Sie einen Teil der Funktion ausschneiden, können Sie den Lambda-Körper leichter machen. image.png Indem Sie es leichter machen, können Sie den Nachteil vermeiden, dass der Code nicht angezeigt werden kann, weil die Kapazität des Modulsatzes beispielsweise zu groß ist, wie unten gezeigt. image.png

Dieses Mal wollte ich es mit chromeDriver aus Python mit Selen implementieren, also Erstellen Sie die folgenden zwei Ebenen.

** 1. Schicht, in der die Selenbibliothek gespeichert ist ** ** 2. Ebene zum Speichern von chromeDriver **

↓ Ebenenkonfiguration image.png

Das Herstellungsverfahren wird unten beschrieben.

1. Schicht, in der die Selenbibliothek gespeichert ist

1. Vorbereitung einer Reihe von zu installierenden Bibliotheken

Führen Sie den folgenden Befehl in einem beliebigen Ordner aus. Ich denke, Sie haben bereits Selen mit Pip installiert. Da es eine Aufgabe ist, die zu installierende Bibliothek vorzubereiten, erfolgt dies an einem anderen Ort als dem Ausführungsmodul.

Vorbereitung des Selenmoduls


   pip install -t ./python/lib/python3.7/site-packages selenium

2. Die folgende Konfiguration ist abgeschlossen. (In einer Windows-Umgebung implementiert.)

image.png

3.zip Komprimierung

Zip aus dem Python-Ordner. image.png

4. Erstellen Sie AWS Lambda-Ebenen

Erstellen Sie neue Ebenen auf dem Lambda-Konsolenbildschirm. Geben Sie zum Zeitpunkt der Erstellung die Zip-Datei 3 an und erstellen Sie sie. image.png

5. Fügen Sie der Lambda-Funktion eine Ebene hinzu

Siehe die in 4 mit der Lambda-Funktion erstellten Ebenen. Wenn Sie im Bildschirm "Ebeneneinstellungen" die Option "Benutzerdefinierte Ebene **" auswählen, wird diese in den Optionen angezeigt. image.png

6. Mit Import anrufen

Anruf von Lambda mit Import.

Importanweisung


from selenium import webdriver

Wenn die obige Konfiguration falsch ist, tritt der folgende Fehler auf.

Fehleranweisung


[ERROR] Runtime.ImportModuleError: Unable to import module 'lambda_function': No module named 'selenium'

2. Ebene zum Speichern von chromeDriver

1. Vorbereitung des Fahrers

Bereiten Sie den offiziell verteilten Treiber vor (2 Punkte). Chromdriver-Händler: https://chromedriver.storage.googleapis.com/index.html?path=2.37/ Headless-Chrom-Distributor: https://github.com/adieuadieu/serverless-chrome/releases/download/v1.0.0-37/stable-headless-chromium-amazonlinux-2017-03.zip

2.zip Komprimierung

Platzieren Sie die beiden oben genannten Punkte in demselben Ordner und komprimieren Sie sie in einer Linux-Umgebung. image.png

Wenn Sie es in einer Windows-Umgebung komprimieren, wird der folgende Fehler angezeigt, auch wenn Sie lamda ausführen. Selbst in der Linux-Umgebung tritt der folgende Fehler auf, wenn die Berechtigung jeder Datei nicht 777 ist.

Fehleranweisung


[ERROR] WebDriverException: Message: 'chromedriver' executable may have wrong permissions. Please see https://sites.google.com/a/chromium.org/chromedriver/home

Für WindowsPC gibt es die folgenden Methoden zum Komprimieren in der Linux-Umgebung. Ich könnte es auch tun.

  1. Zip in WSL-Umgebung * Berechtigung 777 festlegen
  2. Erstellen Sie mit Docker Desktop eine geeignete Umgebung (Ich habe diese PHP-Umgebung verwendet, die ich zufällig verwendet habe. Https://hub.docker.com/_/php)

3. Fügen Sie der Lambda-Funktion eine Ebene hinzu

Siehe die in 4 mit der Lambda-Funktion erstellten Ebenen.

4. Anruf von Lambda

Rufen Sie es auf, indem Sie den folgenden Pfad von Lambda angeben. In der Spezifikation der AWS Lambda-Schichten wird sie in ** / opt ** platziert. Geben Sie daher Folgendes an.

Importanweisung


driver = webdriver.Chrome(executable_path ="/opt/chromedriver", chrome_options=options)

Wenn der Pfad falsch ist, z. B. wenn keine Option vorhanden ist, tritt ein Fehler auf.

Fehleranweisung


[ERROR] WebDriverException: Message: 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home

Ein weiterer Punkt zu beachten

Sowohl Lamda als auch Selen sind langsam. Stellen Sie daher den Timeout-Wert von Lamda auf einen längeren Wert ein. Der Standardwert ist 3 Sekunden, daher tritt fast eine Zeitüberschreitung auf und der folgende Fehler tritt auf.

Fehleranweisung


Task timed out after XX.XX seconds

Einstellen des Timeout-Werts image.png

Implementierung

Der endgültige Code für Lamda ist unten.

lamda_function.py


from selenium import webdriver
from selenium.webdriver.chrome.options import Options

def lambda_handler(event, context):
    LINE_NOTIFY_URL = "https://notify-api.line.me/api/notify"

    options = Options()
    options.binary_location = '/opt/headless-chromium'
    options.add_argument('--headless')
    options.add_argument('--no-sandbox')
    options.add_argument('--single-process')
    options.add_argument('--disable-dev-shm-usage')

    driver = webdriver.Chrome(executable_path ='/opt/chromedriver', chrome_options=options)
    driver.get("https://xxxxxxxxxxx")

Zusammenfassung

Bei anderen Artikeln verwendeten die meisten serverless.yml oder cloudFormation. Ich wusste nicht viel darüber, also habe ich die obige Methode gewählt. Ich hoffe, es ist hilfreich für diejenigen, die Selen zum ersten Mal ohne Server installieren.

Recommended Posts

So erstellen Sie AWS Lambda-Schichten, wenn Selen × Chrom auf AWS Lambda ausgeführt wird
Vorsichtsmaßnahmen beim Ausführen von Python unter EC2 über AWS Lambda (Befehl ausführen)
So konfigurieren Sie Layer auf Lambda mit AWS SAM
Wie man Selen so leicht wie möglich macht
[Python] Führen Sie Headless Chrome unter AWS Lambda aus
Zusammenfassung des Schreibens von AWS Lambda
Bequem zum Verwenden von Ebenen beim Laden von Bibliotheken auf Lambda
[Version 2020] So installieren Sie Python3 auf EC2 von AWS
So machen Sie mehrere Kernel auf Jupyter auswählbar
[AWS / Lambda] Laden einer externen Python-Bibliothek
So erkennt die AWS-Erkennung lokale Bilddateien
Bilden Sie Lambda-Schichten mit Lambda
Wie man Selen debuggt
Überprüfen Sie types_map, wenn Sie Mimetypen mit AWS Lambda (Python) verwenden.
Versuchen Sie, Schedule auszuführen, um Instanzen in AWS Lambda (Python) zu starten und zu stoppen.
So laden Sie Dateien von Selenium of Python in Chrome herunter
Ich möchte Lambda mit Python auf Mac AWS!
[AWS EC2] So installieren Sie Maven unter Amazon Linux 2
Eine kleine Geschichte, die beim Schreiben von Twilio-Anwendungen mit Python auf AWS Lambda süchtig macht
So wechseln Sie mit Python + Selenium + Chrome in den Smartphone-Modus
Hinweise zum Betrieb von Firefox mit Selen unter Windows
[AWS] So erweitern Sie den Speicherplatz unter Amazon Linux
Gepostet als Anhang zu Slack auf AWS Lambda (Python)
[AWS] Was tun, wenn Sie mit Lambda pfeifen möchten?
So laden Sie keine Bilder, wenn Sie PhantomJS mit Selen verwenden
Wie erstelle ich ein Multiplayer-Online-Actionspiel mit Slack?
Suchtpunkte beim Herunterladen von Dateien mit boto auf AWS Lambda
AWS Lambda Layers Eine kurze Erklärung von der Erstellung bis zur Verknüpfung
[Python] Ermöglicht den Import von pip3-Paketen in AWS Lambda
So registrieren Sie sich bei pypi
Wie benutzt man Python Lambda?
[Python / AWS Lambda-Ebenen] Ich möchte nur Module in AWS Lambda-Ebenen wiederverwenden
So erstellen Sie eine .dylib-Bibliothek aus einer .a-Bibliothek mit OSX (El Capitan)
So installieren Sie Chrome Driver für Chrome automatisch mit Python + Selenium + Chrome
So erstellen Sie mit AWS Lambda eine serverlose API für maschinelles Lernen
Wie erstelle ich eine japanisch-englische Übersetzung?
So installieren Sie mysql-connector-python auf einem Mac
Verwendung von Dataiku unter Windows
Hinweise zur Verwendung von Pywinauto
Wie man einen lockeren Bot macht
So installieren Sie das Graph-Tool unter macOS
So installieren Sie VMware-Tools unter Linux
Wie erstelle ich einen Crawler?
So stellen Sie den Django-Kompressor unter Windows bereit
Führen Sie Python planmäßig auf AWS Lambda aus
Hinweise zur Verwendung von featuretools
So erstellen Sie eine rekursive Funktion
[EC2] So führen Sie einen Selen-Webdriver aus
So fügen Sie sudo hinzu, wenn Sie das Debug ausführen
So installieren Sie OpenCV auf einem Mac
Wie man Matplotlib auf Heroku ausführt
So installieren Sie PyPy unter CentOS
Wie benutzt man Homebrew in Debian?
Missverständnisse beim Verbinden von cnn
So installieren Sie TensorFlow unter CentOS 7