
Erweitert die Python-Bindings von Selenium, damit Sie die vom Browser gesendeten Anfragen untersuchen können.
Selenium Wire wird nicht mehr gepflegt. Vielen Dank für deine Unterstützung und alle deine Beiträge.
Selenium Wire erweitert die Python-Bindings von Selenium <https://www.selenium.dev/documentation/en/>_, um dir Zugriff auf die zugrunde liegenden Anfragen des Browsers zu geben. Du schreibst deinen Code auf dieselbe Weise wie mit Selenium, erhältst aber zusätzliche APIs, um Anfragen und Antworten zu untersuchen und sie spontan zu ändern.
.. image:: https://github.com/wkeeling/selenium-wire/workflows/build/badge.svg :target: https://github.com/wkeeling/selenium-wire/actions
.. image:: https://codecov.io/gh/wkeeling/selenium-wire/branch/master/graph/badge.svg :target: https://codecov.io/gh/wkeeling/selenium-wire
.. image:: https://img.shields.io/badge/python-3.7%2C%203.8%2C%203.9%2C%203.10-blue.svg :target: https://pypi.python.org/pypi/selenium-wire
.. image:: https://img.shields.io/pypi/v/selenium-wire.svg :target: https://pypi.python.org/pypi/selenium-wire
.. image:: https://img.shields.io/pypi/l/selenium-wire.svg :target: https://pypi.python.org/pypi/selenium-wire
.. image:: https://pepy.tech/badge/selenium-wire/month :target: https://pepy.tech/project/selenium-wire
Einfaches Beispiel~~~~~~~~~~~~~~
.. code:: python
from seleniumwire import webdriver # Import from seleniumwire
# Create a new instance of the Chrome driver
driver = webdriver.Chrome()
# Go to the Google home page
driver.get('https://www.google.com')
# Access requests via the `requests` attribute
for request in driver.requests:
if request.response:
print(
request.url,
request.response.status_code,
request.response.headers['Content-Type']
)
Prints:
.. code:: bash
https://www.google.com/ 200 text/html; charset=UTF-8
https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_120x44dp.png 200 image/png
https://consent.google.com/status?continue=https://www.google.com&pc=s×tamp=1531511954&gl=GB 204 text/html; charset=utf-8
https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png 200 image/png
https://ssl.gstatic.com/gb/images/i2_2ec824b0.png 200 image/png
https://www.google.com/gen_204?s=webaft&t=aft&atyp=csi&ei=kgRJW7DBONKTlwTK77wQ&rt=wsrt.366,aft.58,prt.58 204 text/html; charset=UTF-8
...
Features
* Pure Python, user-friendly API
* HTTP and HTTPS requests captured
* Intercept requests and responses
* Modify headers, parameters, body content on the fly
* Capture websocket messages
* HAR format supported
* Proxy server support
Compatibilty
Table of Contents
- `Installation`_
* `Browser-Einrichtung`_
* `OpenSSL`_
- `Erstellen des Webdrivers`_
- `Zugriff auf Requests`_
- `Request-Objekte`_
- `Response-Objekte`_
- `Abfangen von Requests und Responses`_
* `Beispiel: Einen Request-Header hinzufügen`_
* `Beispiel: Einen vorhandenen Request-Header ersetzen`_
* `Beispiel: Einen Response-Header hinzufügen`_
* `Beispiel: Einen Request-Parameter hinzufügen`_
* `Beispiel: JSON in einem POST-Request-Body aktualisieren`_
* `Beispiel: Basis-Authentifizierung`_
* `Beispiel: Einen Request blockieren`_
* `Beispiel: Eine Response mocken`_
* `Interceptor aufheben`_
- `Begrenzung der Request-Erfassung`_
- `Request-Speicherung`_
* `In-Memory-Speicherung`_
- `Proxys`_
* `SOCKS`_
* `Dynamisches Umschalten`_
- `Bot-Erkennung`_
- `Zertifikate`_
* `Verwenden eines eigenen Zertifikats`_
- `Alle Optionen`_
- `Lizenz`_
Installation~~~~~~~~~~~~
Install using pip:
.. code:: bash
pip install selenium-wire
If you get an error about not being able to build cryptography you may be running an old version of pip. Try upgrading pip with ``python -m pip install --upgrade pip`` and then re-run the above command.
Browser Setup
-------------
No specific configuration should be necessary except to ensure that you have downloaded the relevent webdriver executable for your browser and placed it somewhere on your system PATH.
- `Download <https://sites.google.com/chromium.org/driver/>`__ webdriver for Chrome
- `Download <https://github.com/mozilla/geckodriver/>`__ webdriver for Firefox
- `Download <https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/>`__ webdriver for Edge
OpenSSL
-------
Selenium Wire requires OpenSSL for decrypting HTTPS requests. This is probably already installed on your system (you can check by running ``openssl version`` on the command line). If it's not installed you can install it with:
**Linux**
.. code:: bash
# For apt based Linux systems
sudo apt install openssl
# For RPM based Linux systems
sudo yum install openssl
# For Linux alpine
sudo apk add openssl
**MacOS**
.. code:: bash
brew install openssl
**Windows**
No installation is required.
Creating the Webdriver
Stellen Sie sicher, dass Sie webdriver aus dem Paket seleniumwire importieren:
.. code:: python
from seleniumwire import webdriver
Instanziieren Sie dann einfach den Webdriver, so wie Sie es tun würden, wenn Sie Selenium direkt verwenden. Sie können beliebige gewünschte Fähigkeiten oder browserspezifische Optionen übergeben – wie etwa den Pfad zur ausführbaren Datei, den Headless-Modus usw. Selenium Wire verfügt außerdem über eigene Optionen_, die im Attribut seleniumwire_options übergeben werden können.
.. code:: python
# Den Treiber ohne Optionen erstellen (Standardwerte verwenden)
driver = webdriver.Chrome()
# Oder mit browserspezifischen Optionen und/oder seleniumwire_options erstellen
driver = webdriver.Chrome(
options = webdriver.ChromeOptions(...),
seleniumwire_options={...}
)
.. _eigene Optionen: #all-options
Beachten Sie, dass Sie für Unterpakete von webdriver diese weiterhin direkt aus selenium importieren sollten. Um beispielsweise WebDriverWait zu importieren:
.. code:: python
# Unterpakete von webdriver müssen weiterhin aus `selenium` selbst importiert werden
from selenium.webdriver.support.ui import WebDriverWait
Remote-Webdriver
Selenium Wire bietet eingeschränkte Unterstützung für die Verwendung des Remote-Webdriver-Clients. Wenn Sie eine Instanz des Remote-Webdrivers erstellen, müssen Sie den Hostnamen oder die IP-Adresse des Rechners (oder Containers) angeben, auf dem Selenium Wire ausgeführt wird. Dadurch kann die Remote-Instanz ihre Anfragen und Antworten an Selenium Wire zurücksenden.
.. code:: python
options = {
'addr': 'hostname_or_ip' # Adresse des Rechners, auf dem Selenium Wire ausgeführt wird. Verwenden Sie explizit 127.0.0.1 statt localhost, wenn die Remote-Sitzung lokal ausgeführt wird.
}
driver = webdriver.Remote(
command_executor='http://www.example.com',
seleniumwire_options=options
)
Wenn der Rechner, auf dem der Browser ausgeführt wird, eine andere Adresse verwenden muss, um mit dem Rechner zu kommunizieren, auf dem Selenium Wire läuft, müssen Sie den Browser manuell konfigurieren. Dieses Problem <https://github.com/wkeeling/selenium-wire/issues/220>_ geht näher darauf ein.
Zugriff auf Anfragen~~~~~~~~~~~~~~~~~~
Selenium Wire captures all HTTP/HTTPS traffic made by the browser [1]_. The following attributes provide access to requests and responses.
driver.requests
The list of captured requests in chronological order.
driver.last_request
Convenience attribute for retrieving the most recently captured request. This is more efficient than using driver.requests[-1].