
Étend les bindings Python de Selenium pour vous permettre d'inspecter les requêtes émises par le navigateur.
Selenium Wire n'est plus maintenu. Merci pour votre soutien et toutes vos contributions.
Selenium Wire étend les bindings Python de Selenium <https://www.selenium.dev/documentation/en/>_ pour vous donner accès aux requêtes sous-jacentes effectuées par le navigateur. Vous écrivez votre code de la même manière qu'avec Selenium, mais vous disposez d'API supplémentaires pour inspecter les requêtes et les réponses et les modifier à la volée.
.. 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
Exemple simple~~~~~~~~~~~~~~
.. 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`_
* `Configuration du navigateur`_
* `OpenSSL`_
- `Création du Webdriver`_
- `Accéder aux requêtes`_
- `Objets de requête`_
- `Objets de réponse`_
- `Intercepter les requêtes et réponses`_
* `Exemple : Ajouter un en-tête de requête`_
* `Exemple : Remplacer un en-tête de requête existant`_
* `Exemple : Ajouter un en-tête de réponse`_
* `Exemple : Ajouter un paramètre de requête`_
* `Exemple : Mettre à jour le JSON dans le corps d'une requête POST`_
* `Exemple : Authentification de base`_
* `Exemple : Bloquer une requête`_
* `Exemple : Simuler une réponse`_
* `Désactiver un intercepteur`_
- `Limiter la capture de requêtes`_
- `Stockage des requêtes`_
* `Stockage en mémoire`_
- `Proxies`_
* `SOCKS`_
* `Changement dynamique`_
- `Détection de bots`_
- `Certificats`_
* `Utiliser votre propre certificat`_
- `Toutes les options`_
- `Licence`_
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
Assurez-vous d'importer webdriver depuis le paquet seleniumwire :
.. code:: python
from seleniumwire import webdriver
Ensuite, instanciez simplement le webdriver comme vous le feriez si vous utilisiez Selenium directement. Vous pouvez transmettre toutes les capacités souhaitées ou les options spécifiques au navigateur - telles que le chemin de l'exécutable, le mode headless, etc. Selenium Wire possède également ses propres options_ qui peuvent être transmises dans l'attribut seleniumwire_options.
.. code:: python
# Create the driver with no options (use defaults)
driver = webdriver.Chrome()
# Or create using browser specific options and/or seleniumwire_options options
driver = webdriver.Chrome(
options = webdriver.ChromeOptions(...),
seleniumwire_options={...}
)
.. _propres options: #all-options
Notez que pour les sous-paquets de webdriver, vous devez continuer à les importer directement depuis selenium. Par exemple, pour importer WebDriverWait :
.. code:: python
# Sub-packages of webdriver must still be imported from `selenium` itself
from selenium.webdriver.support.ui import WebDriverWait
Webdriver distant
Selenium Wire offre une prise en charge limitée pour l'utilisation du client webdriver distant. Lorsque vous créez une instance du webdriver distant, vous devez spécifier le nom d'hôte ou l'adresse IP de la machine (ou du conteneur) qui exécute Selenium Wire. Cela permet à l'instance distante de communiquer ses requêtes et réponses à Selenium Wire.
.. code:: python
options = {
'addr': 'hostname_or_ip' # Address of the machine running Selenium Wire. Explicitly use 127.0.0.1 rather than localhost if remote session is running locally.
}
driver = webdriver.Remote(
command_executor='http://www.example.com',
seleniumwire_options=options
)
Si la machine qui exécute le navigateur doit utiliser une adresse différente pour communiquer avec la machine qui exécute Selenium Wire, vous devez configurer le navigateur manuellement. Ce problème <https://github.com/wkeeling/selenium-wire/issues/220>_ fournit plus de détails.
Accéder aux requêtes~~~~~~~~~~~~~~~~~~
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].