[PYTHON] Erstellen Sie mit Selenium ein Programm, mit dem Sie Ihr Lieblingsbild erstellen können

Einführung

Kürzlich habe ich als persönliches Hobby ein Programm zum Zeichnen und Twittern der seismischen Intensitätsverteilungskarte eines Erdbebens und die dort verwendete Bilderzeugung erstellt Ich denke, ich werde es als Memorandum schreiben, weil ich denke, dass es mit anderen Dingen verwendet werden kann.

Prinzip

Das ** Selenium ** -Framework von Python wird zum Testen von Webanwendungen verwendet, aber auch zum Scrapen dynamischer Websites. Das Rendern erfolgt mit dem Headless Prouser von Google Chrome, einem CUI-basierten Chrome.

Da Selenium über eine Screenshot-Funktion verfügt, können Sie Ihr Lieblingsbild mit HTML / CSS erstellen, indem Sie einen lokalen Server einrichten und dort die erforderlichen Informationen abrufen.

Dinge notwendig

Derzeit scheint Selen auch in Ruby und JS zu sein. Ein Framework zum Erfassen von Webseiten. Die Installationsmethode mit pip ist wie folgt

pip install selenium

Es ist nicht erforderlich, wenn Chrome bereits unter Windows oder Mac installiert ist. Bei der Ausführung über VPN wird Chrome jedoch in Docker ausgeführt.

--Lokaler Server

Node.js, Deno usw. sind ebenfalls in Ordnung. Dieses Mal werden wir Flsak verwenden, ein Python-Framework.

erstellen

Der diesmal erstellte Quellcode finden Sie unter hier.

Erstellen Sie einen Webserver

Erstellen Sie es diesmal mit Flask und stellen Sie es als Container mit Docker Compose zusammen. Daher möchte ich Python-Module mit pipenv verwalten.

Geben Sie Folgendes ein, um Pipenv und Flask zu installieren.

pip install pipenv
pipenv --python 3.8
pipenv install flask

Fügen Sie außerdem eine fehlende Datei usw. hinzu und gehen Sie wie folgt vor. Die Verzeichnisstruktur ist wie folgt.

server
   ├── Dockerfile
   ├── Pipfile
   ├── Pipfile.lock
   ├── run.py
   ├── static
   │  └── css
   │     └── style.css
   └── templates
      └── index.html

Erstellen Sie "run.py", "index.html" und "style.css" nach Ihren Wünschen. Dieses Mal wird nur die Zeichenfolge GET mit dem URL-Parameter auf dem Bildschirm angezeigt.

Die Docker-Datei wird wie folgt beschrieben. Der Ausgangsport ist 5000, aber ich denke, es ist okay.

Dockerfile


FROM python:3.8

COPY run.py /run.py
COPY templates /templates
COPY static /static
COPY Pipfile /Pipfile
COPY Pipfile.lock /Pipfile.lock

RUN pip install pipenv
RUN pipenv install --system --deploy

EXPOSE 5000

Versuchen Sie pipenv shell && python run.py und wenn es normal in einem Browser usw. angezeigt werden kann, ist es OK.

Machen Sie ein Capture-Teil

Erstellen Sie eine Programmdatei zur Generierung oben im zuvor erstellten "Server" -Verzeichnis. Das Verzeichnis sollte so aussehen.

.
├── docker-compose.yml
├── Dockerfile
├── images
├── main.py
├── Pipfile
├── Pipfile.lock
├── README.md
└── server

Das mit pipenv zu installierende Modul ist Selen.

pipenv install selenium

Die Docker-Datei für die Bilderzeugung lautet wie folgt. Dazu muss auch Google Chrome installiert sein.

Dockerfile


FROM python:3.8

COPY main.py /main.py
COPY Pipfile /Pipfile
COPY Pipfile.lock /Pipfile.lock

RUN apt-get update && apt-get install -y unzip

#install google-chrome, vim
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add && \
    echo 'deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main' | tee /etc/apt/sources.list.d/google-chrome.list && \
    apt-get update && \
    apt-get install -y google-chrome-stable
RUN apt-get install -y vim

#install ChromeDriver
ADD https://chromedriver.storage.googleapis.com/84.0.4147.30/chromedriver_linux64.zip /opt/chrome/
RUN cd /opt/chrome/ && \
    unzip chromedriver_linux64.zip

ENV PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/chrome

RUN pip install pipenv
RUN pipenv install --system --deploy

ADD https://chromedriver.storage.googleapis.com/84.0.4147.30/chromedriver_linux64.zip / opt / chrome / erfordert einen Link zur aktuellen Chrome-Version

https://chromedriver.storage.googleapis.com/index.html

Fügen Sie von den Link für die aktuelle Version ein.

Erstellen Sie außerdem "docker-compose.yml", um den Servercontainer mit diesem Container zu verbinden.

docker-compose.yml


version:  '3'
services:
    server:
        container_name: server
        build:
            context: server
            dockerfile: Dockerfile
        ports:
            - '5000:5000'
        tty: true
        # restart: always
        command: python3 run.py
    main:
        container_name: main
        build: .
        tty: true
        # restart: always
        links:
            - server
        volumes:
            - ./images/:/images/
        command: python3 main.py

Das Wichtigste dabei ist, dass Sie, wenn Sie das generierte Image außerhalb von Docker verwenden möchten, das Verzeichnis angeben müssen, in dem es in "Volumes" gespeichert werden soll.

Sie werden eine Menge von "main.py" als Selenium-Erfassungsmethode finden, aber dieses Mal werden wir es so erstellen.

main.py


import os

from selenium import webdriver


def main():
    image_save_path = os.path.join('images', 'image.png')

    text = 'Hello'

    captcha(image_save_path, text)


def captcha(image_save_path: str, text: str) -> None:
    url = f'http://server:5000/?text={text}'

    options = webdriver.ChromeOptions()

    options.add_argument('--headless')
    options.add_argument('--no-sandbox')

    driver = webdriver.Chrome(options=options)

    driver.set_window_size(1920, 1080)
    driver.execute_script("document.body.style.zoom='100%'")
    driver.get(url)
    driver.implicitly_wait(3)
    driver.save_screenshot(image_save_path)
    driver.quit()


if __name__ == "__main__":
    main()

Versuche dich zu bewegen

docker-compose up

Wenn die Bilder tatsächlich im Verzeichnis "images" generiert werden, ist dies erfolgreich.

Quellcode: https://github.com/yuto51942/image-generate

Schließlich

Das Bild wird auf die gleiche Weise für Erdbeben-Alarm erstellt, die ich kürzlich als Hobby erstellt habe. Schauen Sie also bitte mal rein. Ich will auch Star.

Möglicherweise können Sie Bilder mit anderen Methoden generieren, aber ich denke, diese Methode ist die flexibelste Methode, um verschiedene Bilder zu generieren. Versuch es bitte.

Recommended Posts

Erstellen Sie mit Selenium ein Programm, mit dem Sie Ihr Lieblingsbild erstellen können
Erstellen Sie eine Web-API, die Bilder mit Django liefern kann
Erstellen Sie einen BOT, der mit Discord registrierte Bilder wie Piktogramme aufrufen kann
[Python] Ein Programm, das Treppen mit # erstellt
[Python] Ein Programm, das die maximale Anzahl von Spielzeugen findet, die mit Ihrem Geld gekauft werden können
Erstellen Sie eine Web-App, die mit Plotly Dash einfach visualisiert werden kann
Nogizaka46 Ein Programm, das Blog-Bilder automatisch speichert
Erstellen Sie eine Seite, die unbegrenzt mit Python geladen wird
Sie können auch mit Python problemlos eine GUI erstellen
Konvertieren Sie Bilder aus dem FlyCapture SDK in ein Formular, das mit openCV verwendet werden kann
Generieren Sie zufällige Sätze aus Ihren Tweets mit Trigramm
Erstellen Sie einen Chatbot, der die kostenlose Eingabe mit Word2Vec unterstützt
Erstellen Sie einen Stapel von Bildern und blasen Sie sie mit ImageDataGenerator auf
[Python] Erstellen Sie mit cx_Freeze eine Verteilungsdatei für das Tkinter-Programm
Richten Sie eine automatische Testumgebung für den Browser ein, in der Selenium + Pytest mit Docker Compose ausgeführt werden kann
Ist Ihre DLL eine DLL, die Multi-Core nutzen kann?
Erstellen Sie eine Web-App, die Zahlen mit einem neuronalen Netzwerk erkennt
Erstellen Sie eine PythonBox, die nach der PEPPER-Eingabe mit Random ausgegeben wird
Generieren Sie mit apg ein leicht zu merkendes Passwort
Erstellen wir ein Skript, das sich bei Ideone.com in Python registriert.
Erstellen Sie ein Lebensspiel, das manuell mit tkinter aktualisiert wird
Tornado - Erstellen wir eine Web-API, die JSON problemlos mit JSON zurückgibt
[Golang] Ein Programm, das die Runde mit Zufallszahlen bestimmt
Ich habe ein Plug-In erstellt, das "Daruma-san Fell" mit Minecraft ausführen kann
Lassen Sie uns ein Diagramm erstellen, auf das mit IPython geklickt werden kann
Erstellen Sie eine Homepage mit Django
Erstellen Sie ein Verzeichnis mit Python
Verstehen Sie die Wahrscheinlichkeiten und Statistiken, die für das Fortschrittsmanagement mit einem Python-Programm verwendet werden können
[Python] Erstellen Sie ein Diagramm, das mit Plotly verschoben werden kann
Ich habe ein Paket erstellt, das morphologische Analysegeräte mit Python vergleichen kann
[Python] Erstellen Sie basierend auf Ihrem bevorzugten Desktop-Image automatisch ein Terminal- / Vim- / VS-Code-Thema, das mit einem Befehl zu Ihrem Gefühl passt.
Erstellen Sie eine Spinbox, die mit Tkinter in Binär angezeigt werden kann
[Ev3dev] Erstellen Sie ein Programm, das das LCD (Bildschirm) mit Python erfasst
Ich habe ein Shuffle gemacht, das mit Python zurückgesetzt (zurückgesetzt) werden kann
[LINE Messaging API] Erstellen Sie einen BOT, der eine Verbindung zu jemandem mit Python herstellt
Ich habe versucht, Bulls and Cows mit einem Shell-Programm zu erstellen
Erstellen Sie ein Währungsdiagramm, das mit Plotly (2) verschoben werden kann.
Erstellen Sie eine Spinbox, die mit Tkinter in HEX angezeigt werden kann
Erstellen Sie ein Währungsdiagramm, das mit Plotly (1) verschoben werden kann.
Einführung des Befehls lsix, mit dem eine Liste von Bildern angezeigt werden kann
Ich habe ein Programm erstellt, das den Tierkreis mit tkinter automatisch berechnet
Erstellen Sie ein Kompatibilitätsbewertungsprogramm mit dem Zufallsmodul von Python.
Generieren Sie mit SciPy eine Normalverteilung
Erstellen Sie eine virtuelle Umgebung mit Python!
Machen wir ein LGTM-Bild mit GIMP! (Python-Fu)
Generieren Sie eine vorsignierte URL mit golang
[Python] Generiere ein Passwort mit Slackbot
Erstellen Sie einen Poisson-Stepper mit numpy.random
Erstellen Sie mit Django einen Datei-Uploader
Technologie, die einen Geldwerfdienst unterstützt, der ein Blog mit einem Tag monetarisieren kann
[EC2] So machen Sie mit Selen eine Bildschirmaufnahme Ihres Smartphones
[Python] Ein Programm, das ein Paar findet, das durch einen bestimmten Wert geteilt werden kann
Das LXC Web Panel, das LXC mit einem Browser bedienen kann, war wunderbar
Ich habe versucht, ein Programm zu erstellen, das Hexadezimalzahlen mit Python in Dezimalzahlen konvertiert
Erstellen Sie einen Discord Bot, der Bilder suchen und einfügen kann