Python-Selenium-Bibliothek

Selenium ist ein leistungsstarkes Tool zur Automatisierung von Webbrowser-Vorgängen und wird häufig in Szenarien wie Webanwendungstests, Web-Scraping und Aufgabenautomatisierung eingesetzt.

Selenium bietet APIs für verschiedene Programmiersprachen zum Testen. Die aktuelle offizielle API-Dokumentation umfasst C#, JavaScript, Java, Python und Ruby.

Selenium-Tutorial:https://www.example.com/selenium/


Selenium und WebDriver installieren

Selenium installieren

Um Selenium verwenden zu können, müssen Sie zuerst die selenium-Bibliothek installieren und den WebDriver für Ihren Browser herunterladen.

Selenium mit pip installieren:

pip install selenium

Nach der Installation können Sie den folgenden Befehl verwenden, um die Versionsinformationen von selenium zu überprüfen:

pip show selenium

Du kannst es auch mit Python-Code überprüfen:

import selenium
print(selenium.__version__)

WebDriver herunterladen

Selenium benötigt einen WebDriver, um mit dem Browser zu interagieren.

Verschiedene Browser benötigen unterschiedliche WebDriver. Zum Beispiel benötigt der Chrome-Browser ChromeDriver. Du musst den entsprechenden WebDriver für den von dir verwendeten Browser herunterladen und sicherstellen, dass er sich im PATH deines Systems befindet.

Wähle einen Browser und initialisiere den WebDriver:

Beispiel

from selenium import webdriver

# Chrome-Browser verwenden
driver = webdriver.Chrome(executable_path='/path/to/chromedriver')

# Oder Firefox-Browser verwenden
# driver = webdriver.Firefox(executable_path='/path/to/geckodriver')

# Oder Edge-Browser verwenden
# driver = webdriver.Edge(executable_path='/path/to/msedgedriver')

Ab Selenium 4 hat sich die Verwaltung von Browser-Treibern geändert: Selenium 4 versucht, die auf dem System installierte Browserversion automatisch zu erkennen und den entsprechenden Treiber herunterzuladen. Das bedeutet, dass Benutzer den Treiber nicht mehr manuell herunterladen und den Treiberpfad festlegen müssen, es sei denn, sie benötigen eine bestimmte Version des Treibers.

Beispiel

from selenium import webdriver

driver = webdriver.Chrome()  # Wenn ein anderer Browser wie Firefox verwendet wird, entsprechend anpassen

In inländischen Netzwerkumgebungen erfordert das automatische Erkennen und Herunterladen des Treibers eine andere Netzwerkumgebung, daher wird empfohlen, den Treiber manuell herunterzuladen und dann den Treiberpfad anzugeben.

In Selenium 4 legen Sie den Treiberpfad nicht direkt in webdriver.Chrome fest, sondern führen ein Service-Objekt ein. Dadurch werden Veraltungswarnungen vermieden und sichergestellt, dass der Treiber korrekt geladen wird. Zum Beispiel:

Beispiel

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService

service = ChromeService(executable_path="PATH_TO_DRIVER")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)

Der folgende Code gibt den Treiberdateipfad an, um den Seitentitel abzurufen:

Beispiel

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService

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


# Eine Website öffnen
driver.get("https://cn.bing.com")

# Den Seitentitel abrufen
print(driver.title)

# Den Browser schließen
driver.quit()

Grundlegende Verwendung

WebDriver initialisieren

Wähle einen Browser und initialisiere den WebDriver:

Beispiel

from selenium import webdriver

# Chrome-Browser verwenden
driver = webdriver.Chrome()

# Oder Firefox-Browser verwenden
# driver = webdriver.Firefox()

# Oder Edge-Browser verwenden
# driver = webdriver.Edge()

Eine Webseite öffnen

Verwenden Sie die Methode get(), um eine Webseite zu öffnen:

driver.get("https://www.baidu.com")

Seitenelemente finden

Seitenelemente können auf verschiedene Weise gefunden werden, wie z. B. anhand von ID, Klassenname, Tag-Name usw.:

Beispiel

# Element anhand der ID finden
search_box = driver.find_element("id", "kw")

# Element anhand des Klassennamens finden
search_button = driver.find_element("class name", "s_ipt")

# Element anhand des Tag-Namens finden
links = driver.find_elements("tag name", "a")

Benutzeraktionen simulieren

Selenium kann Benutzeraktionen im Browser simulieren, wie z. B. Klicken, Texteingabe usw.:

Beispiel

# Text in das Suchfeld eingeben
search_box.send_keys("Selenium Python")

# Auf die Suchschaltfläche klicken
search_button.click()

Elementattribute und Text abrufen

Sie können die Attributwerte oder den Textinhalt von Seitenelementen abrufen:

Beispiel

# Den Text des Elements abrufen
element_text = search_box.text

# Den Attributwert des Elements abrufen
element_attribute = search_box.get_attribute("placeholder")

Wartezeiten

Manchmal braucht die Seite Zeit zum Laden. Sie können explizites Warten oder implizites Warten verwenden, um sicherzustellen, dass das Element interagierbar ist:

Beispiel

from selenium.webdriver.common.by import Durch
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# Explizites Warten
element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "kw"))
)

# Implizites Warten
driver.implicitly_wait(10)

Browser schließen

Denken Sie nach Abschluss der Vorgänge daran, den Browser zu schließen:

driver.quit()

Einfache Web-Automatisierung

Unten ist ein einfaches Selenium-Projektbeispiel, mit dem eine Keyword-Suche automatisiert und der Titel der Ergebnisseite abgerufen werden kann.

Beispiel

from selenium import webdriver
from selenium.webdriver.common.by import By  # Importiere das By-Modul
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# Treiberpfad festlegen und Browser starten
service = ChromeService(executable_path="/EXAMPLE/Downloads/chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)


try:
    # Baidu-Startseite öffnen
    driver.get("https://www.baidu.com")

    # Suchfeld-Element finden
    search_box = driver.find_element(By.ID, "kw")

    # Suchinhalt eingeben
    search_box.send_keys("Selenium Python")

    # Suchformular absenden
    search_box.send_keys(Keys.RETURN)

    # Warten, bis Suchergebnisse geladen sind
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "content_left"))
    )

    # Seitentitel ausgeben
    print("Der Seitentitel ist:", driver.title)

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

Gängige Selenium-Methoden

Die folgende Tabelle listet die gängigen Methoden der Selenium-Bibliothek auf:

MethodeBeschreibungBeispielcode
webdriver.Chrome()Initialisiert eine Chrome-Browser-Instanz.driver = webdriver.Chrome()
driver.get(url)Ruft die angegebene URL-Adresse auf.driver.get("https://example.com")
driver.find_element(By, value)Sucht das erste passende Element.element = driver.find_element(By.ID, "id")
driver.find_elements(By, value)Alle übereinstimmenden Elemente finden.elements = driver.find_elements(By.CLASS_NAME, "class")
element.click()Auf ein Element klicken.element.click()
element.send_keys(value)Tastatureingabe an ein Eingabefeld senden.element.send_keys("text")
element.textDen Textinhalt eines Elements abrufen.text = element.text
driver.back()Im Browser zurück.driver.back()
driver.forward()Im Browser vorwärts.driver.forward()
driver.refresh()Aktuelle Seite aktualisieren.driver.refresh()
driver.execute_script(script, *args)JavaScript-Skript ausführen.driver.execute_script("alert('Hello!')")
driver.switch_to.frame(frame_reference)Zum angegebenen iframe wechseln.driver.switch_to.frame("frame_id")
driver.switch_to.default_content()Zurück zum Hauptdokument wechseln.driver.switch_to.default_content()
driver.quit()Den Browser schließen und den Treiber beenden.driver.quit()
driver.close()Das aktuelle Fenster schließen.driver.close()
Weitere Erweiterungen