Selenium mit Chrom Kopflos laufen

Selenium mit Chrom Kopflos laufen
Wenn Sie Selenium Web Automation oder Web -Scraping mit Chrome Webbrowser durchführen möchten, wird die grafische Version des Chrome -Webbrowsers standardmäßig ausgeführt. Es ist kein Problem, wenn Sie Ihr Selenium -Skript aus einer grafischen Linux -Desktop -Umgebung ausführen (i.e., GNOME 3, KDE, XFCE4). Aber wenn Sie Ihr Selenium -Skript in einer kopflosen Umgebung ausführen möchten (ich.e., Ubuntu Server, CentOS/Rhel Server), in dem Sie keine grafische Desktop -Umgebung installiert haben, dann funktioniert dies nicht.

Glücklicherweise können Sie Selenium so konfigurieren, dass der Chrome -Webbrowser im Kopflosenmodus ausgeführt wird. In diesem Modus wird der Chrome -Webbrowser ohne grafische Benutzeroberfläche ausgeführt. Selen kann also Webautomation, Web -Schrott, Browser -Tests usw. durchführen. Verwenden des Chrome -Webbrowsers in Linux -Servern, in dem Sie keine grafische Desktop -Umgebung installiert haben.

In diesem Artikel werde ich Ihnen zeigen, wie Sie Selenium mit dem Chrome -Webbrowser im kopflosen Modus ausführen können. Ich werde die Selenium Python Library verwenden und die Selenium -Skripte mit der Programmiersprache Python 3 schreiben. Also lasst uns anfangen.

Voraussetzungen:

Um die Befehle und Beispiele aus diesem Artikel auszuprobieren, müssen Sie haben,

1) Eine Linux -Verteilung (vorzugsweise Ubuntu), die auf Ihrem Computer installiert ist.
2) Python 3 auf Ihrem Computer installiert.
3) PIP 3 auf Ihrem Computer installiert.
4) Google Chrome auf Ihrem Computer installiert.

Sie können viele Artikel zu diesen Themen unter LinuxHint finden.com. Schauen Sie sich sie an, wenn Sie Hilfe benötigen.

Vorbereitung der virtuellen Umgebung von Python 3 für das Projekt:

Die virtuelle Python -Umgebung wird verwendet, um ein isoliertes Python -Projektverzeichnis zu erstellen. Die Python -Module, die Sie mit PIP installieren, werden nur im Projektverzeichnis installiert, nicht global.

Python virtualenv Das Modul wird verwendet, um virtuelle Python -Umgebungen zu verwalten.

Sie können Python installieren virtualenv Modul weltweit mit PIP 3 wie folgt:

$ sudo pip3 install virtualenv

Python virtualenv sollte installiert werden.

Erstellen Sie ein Projektverzeichnis verchromtheadlos/ In Ihrem aktuellen Arbeitsverzeichnis wie folgt:

$ mkdir -pv Chrom -Headless/Treiber

Navigieren Sie zu Ihrem neu erstellten Projektverzeichnis verchromtheadlos/ folgendermaßen:

$ cd chrome-headless /

Erstellen Sie eine virtuelle Python -Umgebung in Ihrem Projektverzeichnis mit dem folgenden Befehl:

$ virtualenv .Venv

Die virtuelle Python -Umgebung sollte in der geschaffen werden .Venv/ Verzeichnis in Ihrem Projektverzeichnis.

Aktivieren Sie die virtuelle Python -Umgebung Ihres Projektverzeichnisses mit dem folgenden Befehl:

$ Quelle .Venv/bin/aktivieren

Installation von Selenium Python Library:

Die Selenium Library ist im offiziellen Python Pypi -Repository erhältlich.

Sie können die Selenium -Python -Bibliothek mit PIP 3 wie folgt installieren:

$ pip3 Selen installieren

Die Selenium -Python -Bibliothek sollte installiert werden.

Installieren Sie den Chrome -Web -Treiber:

Mit einem Chrome -Web -Treiber können Sie den Google Chrome -Webbrowser von Selen steuern oder automatisieren.

In diesem Abschnitt werde ich Ihnen zeigen, wie Sie den Chrome -Web -Treiber installieren.

Öffnen Sie zunächst Google Chrome und besuchen Sie Chrome: // Einstellungen/Hilfe.

Sobald die Seite geladen wird, sollten Sie die Google Chrome -Versionsnummer in der finden Über Chrom Abschnitt. Beachten Sie die ersten 3 Abschnitte der Versionsnummer, wie im folgenden Screenshot markiert.

Um den Chrome -Web -Treiber herunterzuladen, besuchen Sie die offizielle Chrome -Treiber -Download -Seite.

Im Aktuelle Veröffentlichungen Abschnitt, Chrome -Web -Treiber für die aktuellsten Veröffentlichungen des Google Chrome -Webbrowsers sollte verfügbar sein, wie Sie im Screenshot unten sehen können. Einer der aktuellen Chrome -Web -Treiber -Veröffentlichungen sollte eine passende Versionsnummer mit Ihrem Google Chrome -Webbrowser haben. Die ersten 3 Abschnitte der Versionsnummer des Chrome -Web -Treibers und des Google Chrome -Webbrowsers müssen übereinstimmen.

Wenn die Version, die Sie suchen, nicht in der ist Aktuelle Veröffentlichungen Abschnitt, scrollen Sie ein wenig nach unten, und Sie sollten es finden können.

Sobald Sie auf die Versionsnummer des Chrome -Web -Treibers klicken, sollte es auf die Download -Seite gelangen. Klick auf das chromedriver_linux64.Reißverschluss Datei von hier.

Das Archiv von Chrome Web Driver sollte heruntergeladen werden.

Das heruntergeladen chromedriver_linux64.Reißverschluss Datei sollte in Ihrem sein ~/Downloads Verzeichnis.

$ ls -lh ~/downloads

Extrahieren Sie die chromedriver_linux64.Reißverschluss Archiv aus dem ~/Downloads Verzeichnis zum Treiber/ Verzeichnis Ihres Projekts wie folgt:

$ unzip ~/downloads/chromedriver_linux64.ZIP -D -Treiber/

Eine neue Datei Chromedriver sollte in der erstellt werden Treiber/ Verzeichnis Ihres Projekts Sobald das Chrome -Web -Treiber -Archiv extrahiert wird, wie Sie im Screenshot unten sehen können.

Testen Sie den Chrome -Web -Treiber im Kopflosenmodus:

In diesem Abschnitt werde ich Ihnen zeigen, wie Sie Selenium mit Chrome -Treiber im Kopflosenmodus ausführen können.

Erstellen Sie zunächst ein neues Python -Skript Ex01.py In Ihrem Projektverzeichnis und in die folgenden Codes -Zeilen eingeben.

vom Selenium importieren Webdriver
Aus Selen.Webdriver.gemeinsam.Schlüssel importieren Schlüsseln
Aus Selen.Webdriver.Chrom.Optionen importieren Optionen
ChromeOptions = Optionen ()
Chromoptionen.Kopflos = wahr
browser = webdriver.Chrome (ausführbarer_path = "./Treiber/Chromedriver ", Optionen = Chromeoptionen)
Browser.Get ("http: // linuxHint.com ")
Druck ("Titel: % s" % Browser.Titel)
Browser.aufhören()

Sobald Sie fertig sind, speichern Sie die Ex01.py Python -Skript.

Diese Zeilen importieren alle erforderlichen Dinge aus dem Selen Bibliothek.

Wie ich bereits sagte, versucht der Chrome -Treiber standardmäßig, Google Chrome im grafischen Modus auszuführen. Um Google Chrome im kopflosen Modus auszuführen, müssen wir dem Chrome -Treiber einige zusätzliche Optionen übergeben. Diese Zeile erstellt eine Optionen Objekt, das wir später an den Chrome -Web -Treiber weitergeben können.

Sie können Google Chrome im Kopflosenmodus einfach ausführen, indem Sie die festlegen kopflos Eigentum des Chromoptionen Objekt zu WAHR.

Oder Sie können die verwenden add_argument () Methode der Chromoptionen Objekt zum Hinzufügen des Hinzufügens -kopflos Befehlszeilenargument, mit dem Google Chrome im Kopflosenmodus mit dem Selenium Chrome-Web-Treiber ausgeführt werden kann.

Sie können a verwenden Webdriver.Chrom() Methode zum Initialisieren/Ausführen eines Google Chrome -Webbrowsers aus Selen. Der Executable_Path Das Argument wird verwendet, um Selenium zu sagen, dass sie die verwenden soll Chromedriver binär von der Treiber/ Projektverzeichnis. Der Optionen Das Argument fordert Selenium an, unsere benutzerdefinierten Optionen zu verwenden Chromoptionen.

Sobald Selenium mit dem Selenium Chrome -Web -Treiber einen Google Chrome -Webbrowser ausgeführt hat, gibt es a zurück Browser Objekt. Wir können es verwenden, um die Google Chrome -Instanz später zu steuern.

Der Browser.erhalten() Methode lädt die LinuxHint.com Website im Google Chrome -Webbrowser im Hintergrund (im kopflosen Modus).

Sobald die Seite geladen wird, Browser.Titel Immobilie wird den Titel der Website haben. Die Python drucken() Methode druckt den Titel der Website auf der Konsole.

Dann ist die Browser.aufhören() Die Methode schließt den Google Chrome -Webbrowser.

Führen Sie das Python -Skript aus, um zu testen, ob Selen im kopflosen Modus funktionieren kann Ex01.py folgendermaßen:

$ python3 ex01.py

Es sollte den Titel der Website auf der Konsole drucken, ohne den Google Chrome -Webbrowser im grafischen Modus zu öffnen.

Nur um Ihnen zu zeigen, dass es von Linux Headless -Servern funktioniert (wo keine grafische Benutzeroberfläche installiert ist), habe ich das Python -Skript ausgeführt Ex01.py auf Ubuntu Server 20.04 LTS. Wie Sie sehen können, funktioniert das Skript gut gut.

Web -Scraping mit Selen im kopflosen Modus mit dem Chrome -Web -Treiber:

In diesem Abschnitt zeige ich Ihnen ein Beispiel für das Verschrotten in Selen mit dem Chrome -Web -Treiber im kopflosen Modus in Selen.

Besuchen Sie zunächst den Random-Namen-Generator.Informationen von Google Chrome oder einem anderen Webbrowser. Diese Website generiert 10 zufällige Namen, wenn Sie die Seite neu laden, wie Sie im Screenshot unten sehen können. Unser Ziel ist es, diese zufälligen Namen mit Selen in kopflosem Modus zu extrahieren.

Um die HTML -Struktur der Liste zu finden, müssen Sie die öffnen Chrome Developer Tool. Drücken Sie dazu die rechte Maustaste (RMB) auf der Seite und klicken Sie auf Prüfen oder drücken Sie + + ICH.

Chrome Developer Tool sollte geöffnet werden. Klick auf das Ikone inspizieren () wie im Screenshot unten markiert.

Dann schweben Sie über die Liste von Zufällige Namen. Die Liste sollte als markiert im Screenshot unten hervorgehoben werden. Drücken Sie dann die linke Maustaste (LMB), um die Liste auszuwählen.

Der HTML -Code der Liste sollte in der hervorgehoben werden Elemente Tab der Chrome Developer Tool. Hier befindet sich die Liste der zufälligen Namen in a div Element. Der div Element hat das Klasse Name Ergebnisse. Darin haben wir eine ol Element mit dem Klasse Name Namensliste. In der ol Element, jeder der Namen ist in a li Element.

Daraus können wir das sagen, um zum zu gelangen li Tags müssen wir folgen div.Ergebnisse> ol.Namelist> li

Unser CSS -Selektor wird also sein div.Ergebnisse ol.Namelist Li (Ersetzen Sie einfach das > Zeichen mit Whitespace)

Erstellen Sie zum Extrahieren dieser zufälligen Namen ein neues Python -Skript Ex02.py und geben Sie die folgenden Codes -Zeilen darin ein.

vom Selenium importieren Webdriver
Aus Selen.Webdriver.gemeinsam.Schlüssel importieren Schlüsseln
Aus Selen.Webdriver.Chrom.Optionen importieren Optionen
ChromeOptions = Optionen ()
Chromoptionen.Kopflos = wahr
browser = webdriver.Chrome (ausführbarer_path = "./Treiber/Chromedriver ", Optionen = Chromeoptionen)
Browser.Get ("http: // random-name generator.die Info/")
Namelist = Browser.find_elements_by_css_selector ('div.Ergebnisse ol.Namelist Li ')
Für den Namen in Namelist:
Druck (Name.Text)
Browser.aufhören()

Sobald Sie fertig sind, speichern Sie die Ex02.py Python -Skript.

Ich habe die Zeilen 1-8 im früheren Abschnitt dieses Artikels erläutert. Diese sind die gleichen wie in Ex01.py.

Zeile 10 lädt die Website des zufälligen Namensgenerators mit dem Browser.erhalten() Methode.

Zeile 11 wählt die Namensliste mit dem aus Browser.find_elements_by_css_selector () Methode. Diese Methode verwendet den CSS -Selektor div.Ergebnisse ol.Namelist Li Um die Namensliste zu finden. Dann wird die Namensliste in der gespeichert Namensliste Variable.

In den Zeilen 13 und 14 a für Schleife wird verwendet, um durch die zu iterieren Namensliste Liste von li Elemente. In jeder Iteration der Inhalt des li Element wird auf der Konsole gedruckt.

Führen Sie nun das Python -Skript aus Ex02.py folgendermaßen:

$ python3 ex02.py

Wie Sie sehen können, das Python -Skript Ex02.py hat alle zufälligen Namen von der Webseite abgerufen.

Wenn Sie das Skript ein zweites Mal ausführen, sollte es eine neue Liste zufälliger Namen zurückgeben, wie Sie im Screenshot unten sehen können.

Probleme, mit denen Sie im Kopflosenmodus Selen ausführen können:

Sie haben früher gesehen, dass das Ausführen von Selen im Kopflosenmodus mit dem Chromtreiber so einfach ist wie das Einstellen der Chromoptionen.kopflos Flagge an WAHR.

Diese Lösung funktioniert bei einigen Linux -Verteilungen möglicherweise nicht für Sie. In diesem Abschnitt werde ich über einige der Probleme sprechen, mit denen Sie mit dem Chrome -Web -Treiber Selen im Kopflosenmodus ausführen können.

Standardmäßig macht der Google Chrome -Webbrowser viel Sandboxing (führt viele Dinge in einer isolierten Umgebung aus). Dies kann zu Problemen führen, wenn Sie Selenium im kopflosen Modus mit dem Chrome -Web -Treiber ausführen. Sie können Sandboxen für Google Chrome mithilfe der deaktivieren -No-Sandbox Flagge.

Um das hinzuzufügen -No-Sandbox Fahnen Sie die folgende Zeile hinzu, bevor Sie den Selenium -Chrom -Treiber initialisieren Webdriver.Chrom() Methode (Zeile 8 In Ex01.py Python -Skript).

Chromoptionen.add_argument ("-no-sandbox")

Möglicherweise haben Sie Probleme, bestimmte Dinge im Google Chrome -Webbrowser aus Selen aus zu tun, z. B. Screenshots der Website und so weiter. Dies kann geschehen, da Google Chrome im Kopflosenmodus möglicherweise eine falsche virtuelle Bildschirmauflösung festlegt. Ihre Website sieht also möglicherweise nicht richtig aus. Sie können Ihre gewünschte virtuelle Bildschirmauflösung für den Google Chrome -Webbrowser im kopflosen Modus mit dem festlegen -Fenstergröße Befehlszeilenoption.

Zum Beispiel, um die virtuelle Bildschirmbreite auf festzulegen 1280 px und Höhe zu 720 px, Ergänzen Sie die -Fenstergröße Befehlszeilenoption vor dem Initialisieren des Selenium -Chrom -Treibers mithilfe Webdriver.Chrom() Methode (Zeile 8 In Ex01.py Python -Skript) wie folgt:

Chromoptionen.add_argument ("-Fenstergröße = 1280,720")

Ihr Server hat möglicherweise keine GPU installiert, oder es hat möglicherweise eine GPU, die der Google Chrome -Webbrowser nicht weiß, wie er verwendet wird. Standardmäßig sollte Google Chrome automatisch die GPU -Beschleunigung deaktivieren, wenn eine GPU nicht verfügbar ist oder wenn eine nicht unterstützte GPU verfügbar ist. In einigen Fällen kann dies nicht tun. In diesem Fall kann Selen den Google Chrome -Webbrowser im Kopflosenmodus möglicherweise nicht ausführen. Um dieses Problem zu lösen, müssen Sie die GPU -Beschleunigung mit dem deaktivieren -deaktivieren-gpu Flagge.

Um das hinzuzufügen -deaktivieren-gpu Fahnen Sie die folgende Zeile hinzu, bevor Sie den Selenium -Chrom -Treiber initialisieren Webdriver.Chrom() Methode (Zeile 8 In Ex01.py Python -Skript).

Chromoptionen.add_argument ("-deaktivieren-gpu")

Abschluss:

In diesem Artikel habe ich Ihnen gezeigt. Ich habe die Grundlagen behandelt, die Ihnen helfen, mit Headless Selenium Browser Automation, Webtests und Web Scraping zu beginnen.

Ich habe auch einige der Google Chrome -Befehlszeilenargumente/-flags abgedeckt, mit denen Sie einige der Probleme lösen können.

Es gibt viele weitere Google Chrome-Befehlszeilenoptionen, die ich in diesem Artikel nicht behandelt habe. Diese Befehlszeilenoptionen können für Ihr Projekt nützlich sein. Sie finden alle unterstützten Google Chrome-Befehlszeilenoptionen in der Liste der Chromium-Befehlszeilenschalter von Peter Beverloo Page.