Selenium-Headless-Browser-Modus

Der Headless-Browser-Modus (Headless Mode) bezeichnet das Ausführen eines Browsers ohne grafische Benutzeroberfläche (GUI). Mit anderen Worten: Der Browser läuft im Hintergrund und es erscheint kein sichtbares Fenster.

Der Headless-Browser-Modus wird häufig in Szenarien wie automatisiertem Testen, Web Scraping und Performance-Tests verwendet, da er Systemressourcen einsparen kann und auch auf Servern ohne Display normal ausgeführt werden kann.

  • Headless-Modus aktivieren: DurchChromeOptionsoderFirefoxOptionsHinzufügen--headlessParameter.

  • Optimierungseinstellungen: GPU-Beschleunigung deaktivieren, Fenstergröße festlegen usw.

  • Headless-Modus überprüfen: Überprüfen Sie die Ergebnisse der Skriptausführung, indem Sie den Seitentitel ausgeben oder Screenshots aufnehmen.

Warum den Headless-Browser-Modus verwenden?

  • Ressourcen sparen: Der Headless-Modus muss die grafische Oberfläche nicht rendern, daher lassen sich CPU- und Speicherressourcen einsparen.
  • Geschwindigkeit verbessern: Da die grafische Oberfläche nicht geladen und gerendert werden muss, ist der Headless-Modus normalerweise schneller als der normale Modus.
  • Für Automatisierung geeignet: Bei automatisierten Tests und Web-Scraping kann der Headless-Modus Störungen vermeiden und auf Servern ohne Display ausgeführt werden.
  • Einfach zu debuggen: In manchen Fällen kann der Headless-Modus Entwicklern helfen, Probleme schneller zu debuggen und zu lokalisieren.

Headless-Browser-Modus in Selenium

Chrome-Headless-Modus einstellen

In Selenium können Sie dieChromeOptionsKlasse, um den Chrome-Browser in den Headless-Modus zu versetzen. Hier ist ein einfaches Beispiel:

Beispiel

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import Durch
from selenium.webdriver.chrome.options import Optionen

# Chrome in den Headless-Modus versetzen
chrome_options = Options()
chrome_options.add_argument("--headless")  # Headless-Modus aktivieren
chrome_options.add_argument("--disable-gpu")  # GPU-Beschleunigung deaktivieren

# Eine WebDriver-Instanz erstellen
driver = webdriver.Chrome(service=Service('/path/to/chromedriver'), options=chrome_options)

# Eine Webseite öffnen
driver.get("https://www.baidu.com")

# Den Webseitentitel ausgeben
print(driver.title)

# Den Browser schließen
driver.quit()

Headless-Modus für Firefox einstellen

Für den Firefox-Browser können Sie dieFirefoxOptionsKlasse, um den Headless-Modus einzustellen. Hier ist ein Beispiel:

Beispiel

from selenium import webdriver
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.firefox.options import Optionen

# Firefox in den Headless-Modus versetzen
firefox_options = Options()
firefox_options.add_argument("--headless")  # Headless-Modus aktivieren

# Eine WebDriver-Instanz erstellen
driver = webdriver.Firefox(service=Service('/path/to/geckodriver'), options=firefox_options)

# Eine Webseite öffnen
driver.get("https://www.example.com")

# Den Webseitentitel ausgeben
print(driver.title)

# Den Browser schließen
driver.quit()

Edge-Headless-Modus einstellen

Für den Edge-Browser können Sie den folgenden Code verwenden:EdgeOptionsKlasse, um den Headless-Modus einzustellen. Hier ist ein Beispiel:

Beispiel

from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.edge.options import Optionen

# Edge in den Headless-Modus versetzen
edge_options = Options()
edge_options.add_argument("--headless")  # Headless-Modus aktivieren

# Eine WebDriver-Instanz erstellen
driver = webdriver.Edge(service=Service('/path/to/msedgedriver'), options=edge_options)

# Eine Webseite öffnen
driver.get("https://www.example.com")

# Den Webseitentitel ausgeben
print(driver.title)

# Den Browser schließen
driver.quit()

Häufige Probleme und Lösungen im Headless-Modus

Unvollständiges Laden der Seite

Im Headless-Modus kann die Seite manchmal nicht vollständig geladen werden, sodass Elemente nicht gefunden werden. Dies kann auf folgende Weise gelöst werden:

  • Wartezeit erhöhen: Verwenden SieWebDriverWaitexplizite Wartezeit, bis Elemente fertig geladen sind.
  • Fenstergröße anpassen: Manchmal ändern sich Position und Größe von Seitenelementen je nach Fenstergröße, und Sie könnendriver.set_window_size(width, height)die Fenstergröße festlegen.

Screenshots und Protokolle

Im Headless-Modus müssen Sie möglicherweise Screenshots erstellen oder Protokolle aufzeichnen, um Probleme zu debuggen. Sie können die folgenden Methoden verwenden:

  • Screenshot: Verwenden Siedriver.save_screenshot('screenshot.png')um einen Screenshot der aktuellen Seite zu speichern.
  • Protokolle: Überdriver.get_log('browser')Browser-Protokolle abrufen.

Der Headless-Browser-Modus ist ein leistungsstarkes Werkzeug im automatisierten Testen mit Selenium und beim Web-Scraping. Mit einfachen Einstellungen können Sie den Browser ohne grafische Oberfläche ausführen, Ressourcen sparen und die Effizienz verbessern. Ob Chrome, Firefox oder Edge – Selenium4 bietet einfache Möglichkeiten, den Headless-Modus zu aktivieren.

Das Folgende ist ein vollständiges Codebeispiel dafür, wie Sie Selenium im Headless-Modus verwenden, um einen Screenshot der Baidu-Startseite (www.baidu.com) zu erstellen.

Der Code aktiviert den Headless-Modus des Chrome-Browsers, erstellt einen Screenshot der Seite und speichert ihn in einer Datei.

Beispiel

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.chrome.options import Optionen
from selenium.webdriver.common.by import Durch

# Chrome-Optionen konfigurieren
chrome_options = Options()
chrome_options.add_argument("--headless")  # Headless-Modus aktivieren
chrome_options.add_argument("--disable-gpu")  # GPU-Beschleunigung deaktivieren
chrome_options.add_argument("--window-size=1920,1080")  # Fenstergröße festlegen

# Korrekten Treiberpfad festlegen
service = ChromeService(executable_path="./chromedriver-mac-arm64/chromedriver")
driver = webdriver.Chrome(service=service, options=chrome_options)

try:
    # Baidu-Startseite öffnen
    driver.get("https://www.baidu.com")
    # Warten, bis die Seite vollständig geladen ist
    time.sleep(2)  # Wartezeit nach Bedarf anpassen

    # Seitenladevorgang zwangsweise beenden
    driver.execute_script("window.stop();")
    # Seitentitel ausgeben
    print("Page title:", driver.title)

    # Screenshot der Seite aufnehmen und speichern
    screenshot_path = "baidu_screenshot.png"
    driver.save_screenshot(screenshot_path)
    print(f"Screenshot gespeichert unter: {screenshot_path}")

finally:
    # Den Browser schließen
    driver.quit()

Nach erfolgreicher Ausführung wird die folgende Ausgabe angezeigt:

页面标题: 百度一下,你就知道
截图已保存到: baidu_screenshot.png

Öffnen Sie das aktuelle Verzeichnis, und Sie sehen die Datei baidu_screenshot.png. Öffnen Sie sie, und sie wird wie folgt angezeigt:

Weitere Erweiterungen