
Расширяет Python-привязки Selenium, предоставляя вам возможность проверять запросы, совершаемые браузером.
Selenium Wire больше не поддерживается. Спасибо за вашу поддержку и все ваши вклады.
Selenium Wire расширяет Python-привязки Selenium <https://www.selenium.dev/documentation/en/>_, давая вам доступ к базовым запросам, выполняемым браузером. Вы пишете код так же, как и при работе с Selenium, но получаете дополнительные API для проверки запросов и ответов, а также для их изменения на лету.
.. 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
Простой пример~~~~~~~~~~~~~~
.. 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
- `Установка`_
* `Настройка браузера`_
* `OpenSSL`_
- `Создание WebDriver`_
- `Доступ к запросам`_
- `Объекты запросов`_
- `Объекты ответов`_
- `Перехват запросов и ответов`_
* `Пример: добавление заголовка запроса`_
* `Пример: замена существующего заголовка запроса`_
* `Пример: добавление заголовка ответа`_
* `Пример: добавление параметра запроса`_
* `Пример: обновление JSON в теле POST-запроса`_
* `Пример: базовая аутентификация`_
* `Пример: блокировка запроса`_
* `Пример: имитация ответа`_
* `Снятие перехватчика`_
- `Ограничение захвата запросов`_
- `Хранение запросов`_
* `Хранилище в памяти`_
- `Прокси`_
* `SOCKS`_
* `Динамическое переключение`_
- `Обнаружение ботов`_
- `Сертификаты`_
* `Использование собственного сертификата`_
- `Все параметры`_
- `Лицензия`_
Установка~~~~~~~~~~~~
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
Убедитесь, что вы импортируете webdriver из пакета seleniumwire:
.. code:: python
from seleniumwire import webdriver
Затем просто создайте экземпляр webdriver так же, как если бы вы использовали Selenium напрямую. Вы можете передать любые желаемые возможности или параметры браузера — например, путь к исполняемому файлу, headless-режим и т.д. Selenium Wire также имеет собственные параметры_, которые можно передать в атрибуте 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={...}
)
.. _собственные параметры: #all-options
Обратите внимание, что для подпакетов webdriver их по-прежнему следует импортировать непосредственно из selenium. Например, чтобы импортировать WebDriverWait:
.. code:: python
# Sub-packages of webdriver must still be imported from `selenium` itself
from selenium.webdriver.support.ui import WebDriverWait
Удалённый Webdriver
Selenium Wire имеет ограниченную поддержку использования клиента удалённого webdriver. При создании экземпляра удалённого webdriver необходимо указать имя хоста или IP-адрес машины (или контейнера), на которой запущен Selenium Wire. Это позволяет удалённому экземпляру отправлять свои запросы и ответы обратно в 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
)
Если машине, на которой работает браузер, нужно использовать другой адрес для связи с машиной, на которой работает Selenium Wire, вам необходимо настроить браузер вручную. Этот вопрос <https://github.com/wkeeling/selenium-wire/issues/220>_ рассматривается более подробно.
Доступ к запросам~~~~~~~~~~~~~~~~~~
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].