ΠΊΠ°ΠΊ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ selenium python windows
1. InstallationΠΒΆ
1.1. IntroductionΠΒΆ
Selenium Python bindings provides a simple API to write functional/acceptance tests using Selenium WebDriver. Through Selenium Python API you can access all functionalities of Selenium WebDriver in an intuitive way.
Selenium Python bindings provide a convenient API to access Selenium WebDrivers like Firefox, Ie, Chrome, Remote etc. The current supported Python versions are 3.5 and above.
This documentation explains Selenium 2 WebDriver API. Selenium 1 / Selenium RC API is not covered here.
1.2. Installing Python bindings for SeleniumΠΒΆ
You may consider using virtualenv to create isolated Python environments. Python 3 has venv which is almost the same as virtualenv.
You can also download Python bindings for Selenium from the PyPI page for selenium package. and install manually.
1.3. Instructions for Windows usersΠΒΆ
1.4. Installing from Git sourcesΠΒΆ
To build Selenium Python from the source code, clone the official repository. It contains the source code for all official Selenium flavors, like Python, Java, Ruby and others. The Python code resides in the /py directory. To build, you will also need the Bazel build system.
Currently, as Selenium gets near to the 4.0.0 release, it requires Bazel 3.2.0 (Install instructions), even though 3.3.0 is already available.
To build a Wheel from the sources, run the following command from the repository root:
1.5. DriversΠΒΆ
Failure to observe this step will give you an error selenium.common.exceptions.WebDriverException: Message: Π²ΠΒgeckodriverΠ²Π™ executable needs to be in PATH.
Other supported browsers will have their own drivers available. Links to some of the more popular browser drivers follow.
Chrome: | https://sites.google.com/chromium.org/driver/ |
Edge: | https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/ |
Firefox: | https://github.com/mozilla/geckodriver/releases |
Safari: | https://webkit.org/blog/6900/webdriver-support-in-safari-10/ |
For more information about driver installation, please refer the official documentation.
1.6. Downloading Selenium serverΠΒΆ
The Selenium server is only required if you want to use the remote WebDriver. See the Using Selenium with remote WebDriver section for more details. If you are a beginner learning Selenium, you can skip this section and proceed with next chapter.
Selenium server is a Java program. Java Runtime Environment (JRE) 1.6 or newer version is recommended to run Selenium server.
If Java Runtime Environment (JRE) is not installed in your system, you can download the JRE from the Oracle website. If you are using a GNU/Linux system and have root access in your system, you can also use your operating system instructions to install JRE.
If java command is available in the PATH (environment variable), you can start the Selenium server using this command:
Replace 2.x.x with the actual version of Selenium server you downloaded from the site.
If JRE is installed as a non-root user and/or if it is not available in the PATH (environment variable), you can type the relative or absolute path to the java command. Similarly, you can provide a relative or absolute path to Selenium server jar file. Then, the command will look something like this:
ΠΠ°ΡΠΈΠ½Π°Π΅ΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Selenium Π² Python
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΡΠ°Π±ΠΎΡΡ Ρ Π²Π΅Π±-Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠΌ Π½Π°Π±ΠΈΡΠ°Π΅Ρ Π²ΡΠ΅ Π±ΠΎΠ»ΡΡΡΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΡΡΡ ΠΈ Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΏΠΎΡΠ²ΠΈΠ»ΠΎΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ², ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ, ΠΎΡ Β«Π²ΡΠ΅ΠΌΠΎΠ³ΡΡΠΈΡ Β» ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ² Π½Π°ΡΡΠΎΡΡΠΈΡ Β«ΡΠ²Π΅ΠΉΡΠ°ΡΡΠΊΠΈΡ Π½ΠΎΠΆΠ΅ΠΉΒ» Π΄ΠΎ ΡΠ·ΠΊΠΎΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΡΠΈΠ»ΠΈΡ.
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Ρ Π²Π΅Π±-Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠΌ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² Ρ ΠΎΠ΄Π΅ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ( development ), ΡΠ°ΠΊ ΠΈ Π½Π° ΡΡΠ°Π΄ΠΈΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΡΠ°Π±ΠΎΡΡ Π½Π°Π΄ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ ( production ). Π’Π°ΠΊΠΆΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²Π΅Π±-Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΠΎΡΠΊΡΡΡΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² ΡΠ΅ΡΠΈ ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ Π΄Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ Π΄Π°Π½Π½ΡΡ .
Π’ΠΎ ΠΊΠ°ΠΊ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°Π±ΠΎΡΡ Ρ Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ Π·Π°Π²ΠΈΡΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡ Π²Π°Ρ, ΠΏΡΠΎΡΡΠΎ ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΡΠΎ, ΡΡΠΎ Π²Ρ Π΄Π΅Π»Π°Π΅ΡΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π·Π°ΠΊΠΎΠ½Π½ΡΠΌ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Β«Π±ΠΎΡΡΒ», ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ, ΠΌΠΎΠ³ΡΡ Π½Π°ΡΡΡΠ°ΡΡ Π·Π°ΠΊΠΎΠ½Π½ΡΠ΅ ΠΏΡΠ°Π²Π° Π²Π»Π°Π΄Π΅Π»ΡΡΠ΅Π² ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° ΡΠ°ΠΉΡΠΎΠ² ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΡΠ°.
Selenium ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ Π²Π΅Π±-Π±ΡΠ°ΡΠ·Π΅ΡΠ°, ΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΡΠΈΡΠΎΠΊΠΈΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠΌ.
ΠΠ½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΠ·ΡΠΊΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ C #, Java, Perl, PHP ΠΈ Ruby. ΠΠ΄Π½Π°ΠΊΠΎ Π² Π½Π°ΡΠ΅ΠΉ ΡΡΠ°ΡΡΠ΅ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Ρ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Ρ ΠΏΠΎ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Ρ Python Π² Windows.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Selenium?
Selenium β ΠΎΡΠ»ΠΈΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΡΠΌΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ (ΠΈΠΌΠΈΡΠΈΡΠΎΠ²Π°ΡΡ) Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΡΡΠΎΠΊ ΠΊΠΎΠ΄Π°. ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ, ΠΎΡΠ΅Π½Ρ Π»Π΅Π³ΠΊΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡ Π² Π±ΡΠ°ΡΠ·Π΅Ρ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΈΠΌΠΈΡΠ°ΡΠΈΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Ρ Π΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΠΈ Π΄Π°ΠΆΠ΅ Ρ ΡΡΠ΅ΡΠΎΠΌ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ ΡΠ΅Π»ΠΎΠ²Π΅ΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ.
Π’Π°ΠΊ Π΄Π»Ρ Π±ΠΎΡΡΠ±Ρ Ρ Β«Π±ΠΎΡΠ°ΠΌΠΈΒ», ΠΈΠΌΠΈΡΠΈΡΡΡΡΠΈΠΌΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π»ΡΠ΄Π΅ΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ Π΄Π»Ρ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°Π±ΠΎΡΡ Ρ Π²Π΅Π±-Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠΌ.
ΠΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ Π·Π°Π΄Π°Ρ, ΡΠ΅ΡΠ°Π΅ΠΌΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Selenium, Ρ ΠΎΡΡ Π²Π΅ΡΡ ΠΈΡ ΡΠΏΠΈΡΠΎΠΊ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅ Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΌΠΈ Π½ΠΈΠΆΠ΅:
ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΠΊ ΡΠ°Π±ΠΎΡΠ΅
ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΌΡ Π½Π°ΡΠ½Π΅ΠΌ, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΎΠ΄Π΅Π»Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ:
ΠΡΠ½ΠΎΠ²Ρ ΡΠ°Π±ΠΎΡΡ Ρ Selenium
ΠΡΠ»ΠΈΡΠ½ΠΎ, ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΡ Π³ΠΎΡΠΎΠ²Ρ Π½Π°ΡΠ°ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Selenium. ΠΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ Π·Π°ΠΏΡΡΡΠΈΡΡ Π±ΡΠ°ΡΠ·Π΅Ρ ΠΈ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡ URL:
ΠΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅
ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π²Π°ΠΌ ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π²ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ, Π° Π»ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΅Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΠ°ΡΡΠ΅ΠΉ (HTML ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²). ΠΠΎΡΡΠΎΠΌΡ Π²Π½Π°ΡΠ°Π»Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½ΡΠΆΠ½ΠΎΠ³ΠΎ Π½Π°ΠΌ HTML ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅, Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Inspect Element ΠΈΠ· ΡΠΎΡΡΠ°Π²Π° web developer tools Π±ΡΠ°ΡΠ·Π΅ΡΠ° Google Chrome.
ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π½Π°ΡΠ΅ΠΉ Π·Π°Π΄Π°ΡΠΈ, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ·Π½Π°ΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠ΅Π³Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, Π½Π°Π΄ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΡΠ°Π±ΠΎΡΠ°ΡΡ. Π Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ Π² ΠΎΠ±ΡΡΠ½ΠΎΠΉ ΡΠ΅ΡΡΠΈΠΈ Google Chome:
ΠΡΠ±Π΅ΡΠΈΡΠ΅ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΠΌ ΠΌΠ΅Π½Ρ Β«ΠΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΠΊΠΎΠ΄Β»
ΠΠ°ΠΊ Π΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ Π½Π° ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΌ ΡΠ°ΠΉΡΠ΅.
ΠΠΎΠ»ΡΡΠΈΠ² ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ Π½ΡΠΆΠ½ΡΡ Π½Π°ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π½Π°Π΄ Π½ΠΈΠΌΠΈ ΠΈ ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ.
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΈ ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΠΏΠΎ id
ΠΡΠ»ΠΈ Π·Π½Π°Π΅ΡΠ΅ id Π½ΡΠΆΠ½ΠΎΠ³ΠΎ Π²Π°ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, ΡΠΎ Π΅Π³ΠΎ ΡΠΎ Π²ΡΠ΅ΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ, Π° ΡΠ°ΠΊΠΆΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΌΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ, ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ:
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠ° name
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌΡ ΠΏΡΠΈΠΌΠ΅ΡΡ:
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ»Π°ΡΡΠ°
Π ΡΠ½ΠΎΠ²Π°, Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌΡ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΊΠΎΠ΄Π°:
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ΅Π³Π° HTML
Π’Π°ΠΊ ΠΆΠ΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΡΡΠ°Π½ΠΈΡΡ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ΅Π³Π°:
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠΈΠ½ΠΊΡΠ°ΠΊΡΠΈΡΠ° XPath
ΠΠ°ΠΊ Π²Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΠ΅ Π½Π΅ Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΡΡΠ°Π½ΠΈΡΡ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ. ΠΠ»ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠ»ΡΡΠΈΠ² Π΄ΠΎΡΡΡΠΏ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° find_elements_by_tag_name ΠΊΠΎ Π²ΡΠ΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΡΠ΅Π³ΠΎΠΌ, Π½Π°ΠΌ Π² ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ , Π° Π»ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΈΠ· Π²ΡΠ±ΠΎΡΠΊΠΈ.
ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ Π·Π°Π΄Π°Ρ Π±ΡΠ»ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Ρ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° XPath (ΡΠ·ΡΠΊΠ° Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ XML Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°). Π‘ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ XPath Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ Π±ΠΎΠ»Π΅Π΅ Π±ΡΡΡΡΡΠΌ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ:
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ tag_list ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΡΡΠ°Π½ΠΈΡΡ Ρ ΡΠ΅Π³ΠΎΠΌ tag Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π·Π°Π΄Π°Π½ Π°ΡΡΠΈΠ±ΡΡ attr Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ val :
Selenium WebElement
ΠΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΈΠ· Π½ΠΈΡ :
Selenium WebDriver
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° WebDriver Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, Π° ΡΠΎΡΠ½Π΅Π΅ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΎΠ΄Π΅Π»ΡΠ²Π°ΡΡ Π²ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ Ρ ΠΎΠ±ΡΡΠ½ΡΠΌ Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠΌ.
ΠΠΎΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΡΠ΅ Π΅Π³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ:
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΠΊΠ½Π° Π±ΡΠ°ΡΠ·Π΅ΡΠ° Π½Π° Π»ΡΠ±ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π½ΠΎ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π΄Π»Ρ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠ° driver ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
ΠΠ°Π²ΠΈΠ³Π°ΡΠΈΡ ΠΏΠΎ ΡΡΡΠ°Π½ΠΈΡΠ΅
ΠΠΎΡΡΡΠΏ ΠΊ ΡΠ°ΠΉΠ»Π°ΠΌ cookie
ΠΠ°ΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»ΠΈΡΡ ΡΠ°ΠΉΠ»Ρ cookie Π±ΡΠ°ΡΠ·Π΅ΡΠ°, Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ:
Π’Π°ΠΊΠΆΠ΅ ΠΎΡΠ΅Π½Ρ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ cookie ΠΈΠ· ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΠ΅ΡΡΠΈΠΈ Π±ΡΠ°ΡΠ·Π΅ΡΠ°:
ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π²ΡΡΠ΅ ΠΊΠΎΠ΄ Π²ΡΠ²Π΅Π΄Π΅Ρ Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° cookie ΠΈΠ· ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΠ΅ΡΡΠΈΠΈ Π±ΡΠ°ΡΠ·Π΅ΡΠ°.
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ HTML ΠΊΠΎΠ΄Π° ΡΡΡΠ°Π½ΠΈΡΡ
ΠΡΠ»ΠΈ Π²Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΠ»ΠΎΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ HTML ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΡΡΠ°Π½ΠΈΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»ΠΈΡΡ Π΅Π³ΠΎ Π°ΡΡΠΈΠ±ΡΡΡ ΠΈ Ρ. Π΄. Π’ΠΎ ΠΊΠ°ΠΊ ΡΠΆΠ΅ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡ ΡΠ°Π½Π΅Π΅, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ Selenium WebDriver Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ JavaScript ΠΊΠΎΠ΄Π° Π½Π° Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ JavaScript ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π»ΡΠ±ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΡΡΠ°Π½ΠΈΡΡ:
ΠΠ΄Π΅ΡΡ element β ΡΡΠΎ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΡΡΠ°Π½ΠΈΡΡ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ Π»ΡΠ±ΡΠΌ ΠΈΠ· ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ Π²ΡΡΠ΅ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ². attr ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ Π΅Π³ΠΎ Π°ΡΡΠΈΠ±ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π½ΡΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ (ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ), Π° value β Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΡΠ°ΠΉΠ»ΠΎΠ² Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΡΠ»ΠΎΠΊ Π½Π° ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅
ΠΠΎΠΏΡΡΡΠΈΠΌ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΡΠ°ΠΉΠ» Ρ Π²Π΅Π±-ΡΠ°ΠΉΡΠ°. Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΡΡΠΎ ΠΎΡΡΡΠ΅ΡΡΠ²ΠΈΡΡ:
ΠΠ°ΠΆΠ°ΡΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ
ΠΡΠΎΡ ΠΊΠΎΠ΄ ΡΠΌΡΠ»ΠΈΡΡΠ΅Ρ Π½Π°ΠΆΠ°ΡΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡΠΈ Β«ΡΡΡΠ΅Π»ΠΊΠ° Π²Π½ΠΈΠ·Β» ( Keys.ARROW_DOWN ) 3 ΡΠ°Π·Π°. ΠΠΎΡΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π½Π°ΠΆΠ°ΡΠΈΡ action.send_keys(Keys.ARROW_DOWN) ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΎΠΆΠΈΠ΄Π°Π΅Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΠΊ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ (0.1 ΡΠ΅ΠΊ.).
ΠΡΠΎΡ ΠΏΡΠΈΠ΅ΠΌ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΎΠΊΠ½Π΅ Π±ΡΠ°ΡΠ·Π΅ΡΠ° Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌΡΡ ΠΊΠ»Π°Π²ΠΈΡ. Π’Π°ΠΊΠΆΠ΅ ΡΡΠΎΡ ΡΠΏΠΎΡΠΎΠ± ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ ΠΌΠΎΠ³ΡΡ Β«ΠΏΠΎΡΠ΅ΡΡΡΡΡΡΒ» Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΡΠ°Π½ΠΈΡΠ° Π½Π΅ ΡΡΠΏΠ΅Π»Π° Π·Π°Π³ΡΡΠ·ΠΈΡΡΡ ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π½Π΅ Π±ΡΠ»ΠΈ Π½Π°Π·Π½Π°ΡΠ΅Π½Ρ), ΡΠΎ Π΅ΡΡΡ ΠΎΠ½ΠΈ ΠΏΡΠΎΡΡΠΎ Π½Π΅ Π±ΡΠ΄ΡΡ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Ρ ΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½Ρ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ.
ΠΠ°ΠΆΠ°ΡΠΈΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ HTML ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ
ΠΠ°ΠΊ ΡΠΆΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΎΡΡ Π²ΡΡΠ΅, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΌΡΠ»ΡΡΠΈΡ ΡΠΎΠ±ΡΡΠΈΠΉ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡΠΈ Tab Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅, ΠΊΠ»Π°Π²ΠΈΡΠΈ Space (ΠΏΡΠΎΠ±Π΅Π») Π΄Π»Ρ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ checkbox (ΡΠ»Π°ΠΆΠΊΠΎΠ²), Π° ΡΠ°ΠΊΠΆΠ΅ ΠΊΠ»Π°Π²ΠΈΡ ΡΠΎ ΡΡΡΠ΅Π»ΠΊΠ°ΠΌΠΈ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠ½ΠΊΡΠ°ΠΌΠΈ Π²ΡΠΏΠ°Π΄Π°ΡΡΠ΅Π³ΠΎ ΠΌΠ΅Π½Ρ.
ΠΠ²ΠΎΠ΄ Π΄Π°Π½Π½ΡΡ Π² ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π²Π²ΠΎΠ΄Π° ΡΠΎΡΠΌ
ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΌΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ Π²Π½ΡΡΡΠΈ HTML ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π²Π²ΠΎΠ΄Π° Π² ΡΠΎΡΠΌΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ:
Π‘ΠΊΡΠΎΠ»Π»ΠΈΠ½Π³
ΠΠ½ΠΎΠ³Π΄Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΡΡΠΈ ΡΡΡΠ°Π½ΠΈΡΡ Π·Π°Π³ΡΡΠΆΠ°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ Π΅Π΅ ΠΏΡΠΎΠΊΡΡΡΠΊΠΈ Π²Π½ΠΈΠ·. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°Π½Π°Π» Π² Instagram ΠΈΠ»ΠΈ Π»ΡΠ±Π°Ρ Π΄ΡΡΠ³Π°Ρ ΡΡΡΠ°Π½ΠΈΡΠ° Ρ βΠ±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΉβ ΠΏΡΠΎΠΊΡΡΡΠΊΠΎΠΉ (Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ AJAX). C ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π½ΠΈΠΆΠ΅ ΡΠΊΡΠΈΠΏΡΠ° JavaScript ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠΊΡΡΡΠΈΡΡ ΡΡΡΠ°Π½ΠΈΡΡ Π±ΡΠ°ΡΠ·Π΅ΡΠ° Π²Π½ΠΈΠ·:
ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π²ΡΡΠ΅ ΠΊΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠ·ΡΠΊΠ° JavaScript Π΄Π»Ρ ΠΏΡΠΎΠΊΡΡΡΠΊΠΈ Π΄ΠΎ Π½ΠΈΠΆΠ½Π΅ΠΉ ΡΠ°ΡΡΠΈ ΡΡΡΠ°Π½ΠΈΡΡ, ΡΠ΅ΠΏΠ΅ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ driver.page_source ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Selenium β ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°Π±ΠΎΡΡ Ρ Π²Π΅Π±-Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ Π΄Π»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° ΠΈ ΡΠ±ΠΎΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ. Π ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² Ρ ΠΎΠ΄Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, Ρ ΠΎΡΡ Π΅Π³ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° Π΄Π»Ρ ΡΠ±ΠΎΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ( web scraping ).
Π‘ΠΎΠ±Π»ΡΠ΄Π°ΠΉΡΠ΅ Π·Π°ΠΊΠΎΠ½Ρ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΠ΅ ΡΠ±ΠΎΡ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° ΠΈΠ· ΡΠ΅ΡΡΡΡΠΎΠ² ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ. ΠΠ΅ Π½Π°ΡΡΡΠ°ΠΉΡΠ΅ Π°Π²ΡΠΎΡΡΠΊΠΈΠ΅ ΠΏΡΠ°Π²Π° 😉
Selenium Π΄Π»Ρ Python. ΠΠ»Π°Π²Π° 1. Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
ΠΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ Π½Π΅ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Selenium Π΄Π»Ρ Python.
ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ ΡΠ΄Π΅Π»Π°Π½ Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ Π°Π²ΡΠΎΡΠ° Baiju Muthukadan.
ΠΡΠΈΠ³ΠΈΠ½Π°Π» ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π·Π΄Π΅ΡΡ.
ΠΡΠ΅Π΄ΠΈΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΎΡ Π°Π²ΡΠΎΡΠ° ΡΡΠ°ΡΡΠΈ
Selenium WebDriver β ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π±ΡΠ°ΡΠ·Π΅ΡΠ°ΠΌΠΈ. WebDriver ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π΄ΡΠ°ΠΉΠ²Π΅ΡΡ Π΄Π»Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠ² ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½Π° ΡΠ°Π·Π½ΡΡ ΡΠ·ΡΠΊΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠ΅ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΡΠΈΠΌΠΈ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ°ΠΌΠΈ.
ΠΠΎ ΡΡΡΠΈ ΡΠ²ΠΎΠ΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΊΠΎΠ³ΠΎ Π²Π΅Π±-Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±ΠΎΡΠ°, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠ΅Π³ΠΎ Π²ΡΡ ΡΡΡΠ½ΡΡ ΡΠ°Π±ΠΎΡΡ Ρ Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠΌ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎ.
Π§Π°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ Selenium WebDriver ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π° Π²Π΅Π±-ΡΠ°ΠΉΡΠΎΠ²/Π²Π΅Π±-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΄ΠΎΠ±Π½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΠ΅ΡΡ ΡΠ΅ΡΡΡ. Π Π΅Π³ΡΠ΅ΡΡΠΈΠΎΠ½Π½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΡΠΎ Π΅ΡΡΡ, ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°, ΡΡΠΎ ΡΡΠ°ΡΡΠΉ ΠΊΠΎΠ΄ Π½Π΅ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π» ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΏΠΎΡΠ»Π΅ Π²Π½Π΅ΡΠ΅Π½ΠΈΡ Π½ΠΎΠ²ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΠΏΠΈΡΠ½ΡΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ. WebDriver ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π²ΡΡΠΎΠΊΡΡ ΡΠΊΠΎΡΠΎΡΡΡ ΡΠ΅ΡΡΠ° ΠΈ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ (ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ΅Π»ΠΎΠ²Π΅ΡΠΊΠΈΠΉ ΡΠ°ΠΊΡΠΎΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½). Π ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Selenium ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΠ»ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ:
Π’Π°ΠΊΠΆΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ Selenium WebDriver ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΡΡΠ°Π½ΠΈΡΡ. Π‘ΡΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ½Π΅ΡΡΠΈ ΡΠ»ΡΡΠ°ΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΏΠ°ΡΡΠΈΠ½Π³ Π΄Π°Π½Π½ΡΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ ΠΈΠ·-Π·Π° ΡΡΡΠ°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊΠΎΠΉ ΡΠ΅ΠΊΡΡ: Β«ΠΠΎΠ΄ΠΎΠΆΠ΄ΠΈΡΠ΅, ΡΡΡΠ°Π½ΠΈΡΠ° Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡΒ». Π’Π°ΠΊΠΈΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ, ΡΠ°ΠΌΠΎ ΡΠΎΠ±ΠΎΠΉ ΡΠ°Π·ΡΠΌΠ΅Π΅ΡΡΡ, Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅Π»ΡΡ ΠΏΠ°ΡΡΠΈΠ½Π³Π°, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ±ΠΎΠΉΡΠΈ ΠΈΡ ΡΠ°ΡΡΠΎ Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ. ΠΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, Π±Π΅Π· Selenium WebDriver. Selenium WebDriver ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π² ΡΠ°ΠΊΠΈΡ ΡΠ»ΡΡΠ°ΡΡ Β«ΠΎΠΆΠΈΠ΄Π°ΡΡΒ», ΠΊΠ°ΠΊ ΠΎΠΆΠΈΠ΄Π°Π» Π±Ρ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ, ΠΏΠΎΠΊΠ° Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅, ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ, Π½Π΅ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ.
ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΏΠ»ΡΡ Selenium Π·Π°ΠΊΠ»ΡΡΠ΅Π½ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π²Π΅Π±-Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° Π²ΠΈΠ΄ΠΈΠΌΡ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎ ΠΈ ΡΡΠ΅Π±ΡΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎΠΌ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» ΡΠ°ΠΉΡΠ°, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΡ ΡΠ΅ΡΠ²ΠΈΡΠ°.
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ WebDriver (ΠΈΠ· ΡΠ΅ΡΠΈ ΠΈ Π»ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΎΠΏΡΡΠ°):
Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅:
1. Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
1.1. ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
ΠΡΠΈΠ²ΡΠ·ΠΊΠ° Selenium ΠΊ Python ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΏΡΠΎΡΡΠΎΠΉ API [ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Π°Π½Π³Π». Application Programming Interface) β ΠΡΠΈΠΌ. ΠΏΠ΅Ρ.] Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠ΅ΡΡΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ/ΡΠ΅ΡΡΠΎΠ² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π²Π΅Π±-Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° Selenium WebDriver. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ Selenium Python API Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊΠΎ Π²ΡΠ΅ΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Ρ Selenium WebDriver.
ΠΡΠΈΠ²ΡΠ·ΠΊΠ° Python-Selenium ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ΄ΠΎΠ±Π½ΡΠΉ API Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ°ΠΊΠΈΠΌ Π²Π΅Π±-Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ°ΠΌ Selenium ΠΊΠ°ΠΊ Firefox, Ie, Chrome, Remote ΠΈ Π΄ΡΡΠ³ΠΈΡ . ΠΠ° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π²Π΅ΡΡΠΈΠΈ Python 2.7, 3.2, 3.3 ΠΈ 3.4.
Π Π΄Π°Π½Π½ΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ Selenium 2 WebDriver API. Selenium 1 / Selenium RC API Π² Π½Π΅ΠΉ Π½Π΅ ΠΎΡ Π²Π°ΡΠ΅Π½Ρ.
1.2. ΠΠ°Π³ΡΡΠ·ΠΊΠ° Selenium Π΄Π»Ρ Python
ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΡΠ΅Π΄Ρ Python Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ virtualenv. Π’Π°ΠΊΠΆΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Python 3.4 ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ pyvenv, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ΅Π½ virtualenv.
1.3. ΠΠΎΠ΄ΡΠΎΠ±Π½Π°Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Windows
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅
ΠΠ»Ρ Π΄Π°Π½Π½ΠΎΠΉ ΠΈΠ½ΡΡΠ°Π»Π»ΡΡΠΈΠΈ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ΅ΡΠΈ ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ.
1.4. ΠΠ°Π³ΡΡΠ·ΠΊΠ° Selenium server
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅
Selenium server Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ Π² ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ remote WebDriver [ΡΠ΄Π°Π»Π΅Π½Π½ΡΠΉ β ΠΡΠΈΠΌ. ΠΏΠ΅Ρ.]. ΠΠ° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΎΠ±ΡΠ°ΡΠ°ΠΉΡΠ΅ΡΡ ΠΊ ΡΠ°Π·Π΄Π΅Π»Ρ ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Selenium Ρ remote WebDriver. ΠΡΠ»ΠΈ Π²Ρ ΡΠΎΠ»ΡΠΊΠΎ Π½Π°ΡΠΈΠ½Π°Π΅ΡΠ΅ ΠΈΠ·ΡΡΠ°ΡΡ Selenium, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ ΡΡΠΎΡ ΡΠ°Π·Π΄Π΅Π» ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ ΠΈΠ·ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π³Π»Π°Π²Ρ.
Selenium server Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° ΡΠ·ΡΠΊΠ΅ Java. ΠΠ»Ρ Π΅Π³ΠΎ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π½Π° ΡΡΠ΅Π΄Π° Java Runtime Environment (JRE) Π²Π΅ΡΡΠΈΠΈ 1.6 ΠΈΠ»ΠΈ Π²ΡΡΠ΅.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠ°ΡΠ°ΡΡ Selenium server 2.x Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ Π·Π°Π³ΡΡΠ·ΠΎΠΊ ΡΠ°ΠΉΡΠ° selenium. ΠΠΌΡ ΡΠ°ΠΉΠ»Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ: selenium-server-standalone-2.x.x.jar. ΠΡ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ Selenium server 2.x.
ΠΡΠ»ΠΈ Java Runtime Environment (JRE) Π½Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° Π² Π²Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠ°ΡΠ°ΡΡ JRE Ρ ΡΠ°ΠΉΡΠ° Oracle. ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ GNU/Linux ΠΈ ΠΈΠΌΠ΅Π΅ΡΠ΅ ΠΏΡΠ°Π²Π° root [ΠΏΡΠ°Π²Π° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° β ΠΡΠΈΠΌ. ΠΏΠ΅Ρ.], Π²Ρ ΡΠ°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ JRE, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π²Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ.
ΠΡΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° java Π΄ΠΎΡΡΡΠΏΠ½Π° Π² PATH (ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ), Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΏΡΡΡΠΈΡΡ Selenium server ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
ΠΠ°ΠΌΠ΅Π½ΠΈΡΠ΅ 2.x.x Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ Selenium server, ΡΠΊΠ°ΡΠ°Π½Π½ΠΎΠΉ Π²Π°ΠΌΠΈ Ρ ΡΠ°ΠΉΡΠ°.
ΠΡΠ»ΠΈ JRE ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° ΠΏΠΎΠ΄ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ, Π½Π΅ ΠΎΠ±Π»Π°Π΄Π°ΡΡΠΈΠΌ ΠΏΡΠ°Π²Π°ΠΌΠΈ root ΠΈ/ΠΈΠ»ΠΈ Π΅ΡΠ»ΠΈ ΠΎΠ½Π° Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Π° Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ PATH, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²Π²Π΅ΡΡΠΈ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΡΡΡ Π΄ΠΎ ΡΠ°ΠΉΠ»Π° java. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΡ ΠΈΠΌΡ jar-ΡΠ°ΠΉΠ»Π° Selenium server Π΄ΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΡΡΠΈ. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ:
Installing Selenium libraries
First you need to install the Selenium bindings for your automation project. The installation process for libraries depends on the language you choose to use.
Installation of Selenium libraries for Java can be done using Maven. Add the selenium-java dependency in your project pom.xml:
The selenium-java dependency supports running your automation project with all Selenium supported browsers. If you want to run tests only in a specific browser, you can add the dependency for that browser in your pom.xml file. For example, you should add following dependency in your pom.xml file to run your tests only in Firefox:
In a similar manner, if you want to run tests only in Chrome, you should add the following dependency:
Python
Installation of Selenium libraries for Python can be done using pip:
Alternatively you can download the PyPI source archive (selenium-x.x.x.tar.gz) and install it using setup.py:
Installation of Selenium libraries for C# can be done using NuGet:
Installation of Selenium libraries for Ruby can be done using gem:
JavaScript
Installation of Selenium libraries for JavaScript can be done using npm:
Kotlin
Due to missing native language bindings for Kotlin, you have to use the Java Bindings, e.g. with maven Java
Selenium Level Sponsors
Support the Selenium Project
Want to support the Selenium project? Learn more or view the full list of sponsors.
Selenium + Python
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Π²Ρ ΡΠ·Π½Π°Π΅ΡΠ΅ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠ²ΡΠ·ΠΊΠΎΠΉ PyCharm + Python + unittest + Selenium + JavaScript.
ΠΠ»Ρ Π»ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΠΏΡΠΈΠ³ΠΎΠ΄ΡΡΡΡ Π½Π°ΡΠ°Π»ΡΠ½ΡΠ΅ Π·Π½Π°Π½ΠΈΡ Python ΠΈ JavaScript
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠ°Π±ΠΎΡΡ Π² Selenium Π½Π΅ Π·Π°Π²ΠΈΡΡΡ ΠΎΡ ΡΠ·ΡΠΊΠ°, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ Π²Ρ ΠΏΠΈΡΠ΅ΡΠ΅ ΡΠ΅ΡΡ. ΠΠ½ΠΈ ΡΠ°Π·ΠΎΠ±ΡΠ°Π½Ρ Π² ΡΡΠ°ΡΡΠ΅ Β«ΠΡΠ½ΠΎΠ²Ρ SeleniumΒ»
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Ρ ΠΏΠΎΡΡΠ°ΡΠ°ΡΡΡ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²ΡΠΈΠΊΠ° Π½Π° Python + Selenium.
Π‘Π½Π°ΡΠ°Π»Π° ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Selenium Webdriver ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ°Π·Π½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ, ΠΊΠ°ΠΊ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ, Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΌΠΈ Π² Webdriver, ΡΠ°ΠΊ ΠΈ Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ JavaScript ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠΈ Ρ DOM.
ΠΠ°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΡΠΌ ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ unittest, Π° ΠΏΠΎΡΠΎΠΌ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΈΡΠ°ΡΠ΅Π»ΠΈ ΡΡΠΎ-ΡΠΎ ΠΏΠΎΠ΄ΡΠΊΠ°ΠΆΡΡ.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
ΠΠ΅ΡΠ²ΡΠΌ Π΄Π΅Π»ΠΎΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ ΡΡΠΎ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Python
ΠΠ°ΡΠ΅ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ ΡΡΠΎ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ pip
pip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.8)
ΠΡΠ»ΠΈ Π²ΡΡ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅, ΡΠΎ selenium ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ΅ΡΠ΅Π· pip ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ
pip3 install selenium
Collecting selenium Downloading selenium-3.141.0-py2.py3-none-any.whl (904 kB) |ββββββββββββββββββββββββββββββββ| 904 kB 8.7 MB/s Requirement already satisfied: urllib3 in /usr/lib/python3/dist-packages (from selenium) (1.25.8) Installing collected packages: selenium Successfully installed selenium-3.141.0
ΠΡΠ±ΠΎΡ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ°
ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Selenium Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°ΡΠ°ΡΡ Π΄ΡΠ°ΠΉΠ²Π΅ΡΡ Π΄Π»Ρ Π½ΡΠΆΠ½ΡΡ Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠ².
ΠΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π½Π΅ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΎΠ³ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²Ρ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΡΠ΅ ΠΏΠΈΡΠ°ΡΡ ΡΠ΅ΡΡ.
ΠΠΎΠ΄ΡΠΎΠ±Π½ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ Π² ΡΡΠ°ΡΡΠ΅ Selenium
ΠΠΎΠ³Π΄Π° ΠΏΡΡΡ Π΄ΠΎ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² PATH ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡ Π½ΡΠΆΠ½ΡΠΉ Π±ΡΠ°ΡΠ·Π΅Ρ Π² Π²Π°Ρ Python ΠΊΠΎΠ΄.
Firefox Π΄ΡΠ°ΠΉΠ²Π΅Ρ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Gecko Driver ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠ°ΠΊ
from selenium import webdriver driver = webdriver.Firefox()
Chrome Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ. ΠΠΌΠ΅ΡΡΠΎ ΡΠ»ΠΎΠ²Π° driver Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΈΠ΄ΡΠΌΠ°ΡΡ ΡΠ²ΠΎΠΈ Π½Π°Π·ΡΠ²Π°Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ chdriver ΠΈ ffdriver.
from selenium import webdriver driver = webdriver.Chrome()
ΠΠΎΠΈΡΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΠΎΡΠΎΠ²
ΠΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΈΡΠΊΠ°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, Π½ΠΎ ΠΈΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ By
from selenium.webdriver.common.by import By
ΠΡΠΎΡΡΠΎΠΉ ΡΠ΅ΡΡ
ΠΠ°ΠΉΠ΄ΡΠΌ Π½Π° ΡΠ°ΠΉΡ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ, ΡΡΠΎ Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ Π΅ΡΡΡ ΡΡΠ°Π·Π° Β«Π Π€ΠΈΠ½Π»ΡΠ½Π΄ΠΈΠΈ ΠΈ ΠΏΡΡΠ΅ΡΠ΅ΡΡΠ²ΠΈΡΡ Β» Π½Π°ΠΉΠ΄ΡΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ»Π°ΡΡΠ°, Π½Π°ΠΉΠ΄ΡΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠ°
from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import Select driver = webdriver.Chrome() driver.get(«https://www.heihei.ru/») assert «Π Π€ΠΈΠ½Π»ΡΠ½Π΄ΠΈΠΈ ΠΈ ΠΏΡΡΠ΅ΡΠ΅ΡΡΠ²ΠΈΡΡ » in driver.title image = driver.find_element_by_class_name(«w100»); # Returns only the first element with the class image2 = driver.find_element_by_css_selector(‘img.w100’) # Returns only the first element with the css selector print (‘image2: ‘) print (image2)
headless
ΠΠ»Ρ Β«Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠΎΠ³ΠΎΒ» Π·Π°ΠΏΡΡΠΊΠ° Selenium Webdriver Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΏΡΠΈΡ headless
ΠΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΡΠ²ΡΠ·ΠΊΠ΅ Ρ CI/CD ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ.
Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΠΈΠΌ ΡΠ΅ΠΆΠΈΠΌΠΎΠΌ Π½ΡΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Options
from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_argument(«—headless») driver = webdriver.Chrome(options=chrome_options)
ΠΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π»ΠΎΠ³ΠΈΠΊΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°. Π― ΠΎΠ±ΡΡΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ Π»ΠΎΠ³.
chrome_options = Options() if headless == True : chrome_options.add_argument(«—headless») print («Running in headless mode») else : print («Running head over hills») driver = webdriver.Chrome(options=chrome_options)
ΠΠ°ΠΊ Π½Π°ΠΆΠ°ΡΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ
Π§ΡΠΎΠ±Ρ Π½Π°ΠΆΠ°ΡΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ Π½ΡΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ click()
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π°ΠΉΠ΄ΡΠΌ ΡΠ»Π΅ΠΌΠ΅Π½Ρ button Ρ ΠΊΠ»Π°ΡΡΠΎΠΌ new-button ΠΈ Π½Π°ΠΆΠΌΡΠΌ Π½Π° Π½Π΅Π³ΠΎ.
ΠΠΎΠΆΠ½ΠΎ ΠΈΡΠΊΠ°ΡΡ ΠΏΠΎ id
Π’Π°ΠΊΠΆΠ΅ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎ ΡΠΏΠ΅ΡΠ²Π° ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΈ ΠΏΠΎΡΠΎΠΌ Π²ΡΠ·Π²Π°ΡΡ click()
loginButton = driver.find_element_by_id(‘loginButtonId’) loginButton.click()
ΠΠΎΠΈΡΠΊ ΠΏΠΎ ΡΠ΅ΠΊΡΡΡ
ΠΠ°Π΄Π°ΡΠ°: ΠΊΠ»ΠΈΠΊΠ½ΡΡΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ Ρ ΡΠ΅ΠΊΡΡΠΎΠΌ LOGIN
ΠΠ·Π²Π΅ΡΡΠ½ΠΎ: div Ρ ΡΠ΅ΠΊΡΡΠΎΠΌ LOGIN ΠΈΠΌΠ΅Π΅Ρ ΠΊΠ»Π°ΡΡ title, Π½ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈ ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎ ΡΡΡΡΡ Π½Π°ΠΌ Π½ΡΠΆΠ΅Π½ Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ
ΠΠ°Ρ ΠΎΠ΄ΠΈΠΌ Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΊΠ»Π°ΡΡΠ° title
title_class = driver.find_elements_by_class_name(«title») for el in title_class: if el.text == «LOGIN»: login_button = el login_button.click()
ΠΠΎΠΆΠ΄Π°ΡΡΡΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°
ΠΠΎΠΏΡΡΡΠΈΠΌ, Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠΆΠ΄Π°ΡΡΡΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Ρ ΠΊΠ»Π°ΡΡΠΎΠΌ Buttons
ΠΡ Π³ΠΎΡΠΎΠ²Ρ ΠΆΠ΄Π°ΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ Π΄Π΅ΡΡΡΡ ΡΠ΅ΠΊΡΠ½Π΄.
driver.implicitly_wait(10) buttons = driver.find_elements_by_class_name(«Buttons»)
ΠΡΠ»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΏΠΎΡΠ²ΡΡΡΡ Π±ΡΡΡΡΠ΅Π΅, ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΆΠ΄Π°ΡΡ Π΄Π΅ΡΡΡΡ ΡΠ΅ΠΊΡΠ½Π΄ Π΄ΡΠ°ΠΉΠ²Π΅Ρ Π½Π΅ Π±ΡΠ΄Π΅Ρ.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ implicit wait ΡΡΠΎ Π»ΠΈΠ±ΠΎ ΠΏΠΎΠΊΠ° ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π½Π΅ Π½Π°ΡΡΠ»ΡΡ, Π»ΠΈΠ±ΠΎ ΠΏΠΎΠΊΠ° Π»ΠΈΠΌΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π΅ ΠΈΡΡΡΠΊ. ΠΠΈΠΌΠΈΡ Π²Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΠ΅ ΡΠ°ΠΌΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»ΡΡΠ°Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ.
ΠΠ²ΡΠΎΠ·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠΎΡΠΌΡ
ΠΡΠΈΠΌΠ΅Ρ Π°Π²ΡΠΎΠ·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠΎΡΠΌΡ Π½Π° ΡΠ°ΠΉΡΠ΅. ΠΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΡΡΡΡ, Π΅ΡΠ»ΠΈ Π²Ρ ΡΠ΄Π΅Π»Π°Π»ΠΈ ΡΠΎΡΠΌΡ ΠΈ Ρ ΠΎΡΠΈΡΠ΅ Π²ΡΠ΅ΠΌΡ ΠΎΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ Π²ΡΡ Π»ΠΈ Π½Π° Π½Π΅ΠΉ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
Π‘ΠΏΠ΅ΡΠ²Π° ΡΠ±Π΅Π΄ΠΈΠΌΡΡ, ΡΡΠΎ Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ ΡΡΡΠ°Π½ΠΈΡΡ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Β«ΠΠΎΡΡΠ°-Π΄Π΅Π»Ρ-Π‘ΠΎΠ»ΡΒ» Π·Π°ΡΠ΅ΠΌ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°ΠΏΠΎΠ»Π½ΠΈΠΌ ΡΠΎΡΠΌΡ.
from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import Select driver = webdriver.Chrome() driver.get(«https://www.heihei.ru/Spain/renovation/costa_del_sol/») assert «ΠΠΎΡΡΠ°-Π΄Π΅Π»Ρ-Π‘ΠΎΠ»Ρ» in driver.title driver.find_element_by_id(‘container’) driver.find_element_by_class_name(‘imgfull’) municipality_list = Select(driver.find_element_by_name(‘municipality’)) municipality_list.select_by_visible_text(‘ΠΠ°ΡΠ±Π΅Π»ΡΡ’) area_list = Select(driver.find_element_by_name(‘price’)) area_list.select_by_value(‘area-larger100’) bedrooms_list = Select(driver.find_element_by_name(‘bedrooms’)) bedrooms_list.select_by_value(‘3-bedroom’) meetingplace_list = Select(driver.find_element_by_name(‘meetingplace’)) meetingplace_list.select_by_visible_text(‘Π₯Π΅Π»ΡΡΠΈΠ½ΠΊΠΈ’) your_name_form = driver.find_element_by_name(‘your_name’) your_name_form.send_keys(‘Andrei’) email_form = driver.find_element_by_name(’email’) email_form.send_keys(‘heihei@heihei.ru’) message_form = driver.find_element_by_name(‘message’) message_form.send_keys(‘TEST Message’) sum_form = driver.find_element_by_name(‘sum’) sum_form.send_keys(‘100’) driver.find_element_by_css_selector(‘.img40c.bookingbutton’).click()
ΠΡΠΈΠΌΠ΅Ρ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠ° Π½Π° ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ Chrome ΠΈ Π·Π°Ρ ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠ°ΠΉΡ.
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΠΎΠΈΡΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠΎ ΠΊΠ»Π°ΡΡΡ ΡΠ΄Π΅Π»Π°Π½ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ JavaScript, Π·Π°ΡΠ΅ΠΌ Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠ΅ id ΠΈ ΡΠΆΠ΅ ΠΏΠΎ ΡΡΠΈΠΌ id ΠΈΠ· Π½Π°Ρ ΠΎΠ΄ΠΈΡ Selenium Webdriver
ΠΠ΅ ΠΊΠΎΠΏΠΈΡΡΠΉΡΠ΅ ΡΡΠΎΡ ΡΠ΅ΡΡ ΡΠ΅Π±Π΅ ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΡΠΎΡΠΈΡΠ°Π΅ΡΠ΅ Π²ΡΡ ΡΡΠ°ΡΡΡ. ΠΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅Π³ΠΎ Π΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ
ΠΠΌΠΏΠΎΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²
ΠΠΎΠΏΡΡΡΠΈΠΌ, ΡΡΠΎ Π²Ρ Π½Π°ΡΠ»ΠΈ ΡΡΠΎΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈ Π΅Π³ΠΎ ΠΠ»ΠΈ Ρ Π½Π΅Π³ΠΎ Π½Π΅ Π±ΡΠ»ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ id Π²ΠΎΠΎΠ±ΡΠ΅, Π½ΠΎ Π²Ρ ΠΏΡΠΈΡΠ²ΠΎΠΈΠ»ΠΈ Π΅ΠΌΡ ΡΡΠΎΡ id ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ JavaScript
inputElement = driver.find_element_by_id(inputElementId) inputElement.send_keys(«C: \\ Users \\ username \\ Documents \\ Projects \\ projectName \\ products_to_import-ANSI.csv»)
ΠΡΠΈΠΌΠ΅Ρ ΡΠ΅ΡΡΠ° Π±Π΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ
Π’Π°ΠΊΠΆΠ΅ Π² ΡΡΠΎΠΌ ΡΠ΅ΡΡΠ΅ Π±ΡΠ΄Π΅Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΡΠ°ΠΉΠ»Π°. ΠΠΎΠΊΠ° ΡΡΠΎ Ρ Π½Π΅ ΠΏΠΎΠ»ΡΠ·ΡΡΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π²ΡΡ Π½Π°Π΄Π΅ΠΆΠ΄Π° Π½Π° ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ Π²ΡΠ²ΠΎΠ΄.
Selenium + unittest
ΠΠ°ΠΊ Π²Ρ ΡΠΆΠ΅ ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ Π·Π½Π°Π΅ΡΠ΅, Π² Selenium Webdriver Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΡΡΠ΅Π΄ΡΡΠ² Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠ΅ΡΡΠΎΠ². ΠΠ±ΡΡΠ½ΠΎ Π²ΠΌΠ΅ΡΡΠ΅ Ρ Webdriver ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΡΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ-ΡΠ΅ΡΡΠΈΡΠΎΠ²ΡΠΈΠΊ.
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Ρ ΠΏΠΎΠ»ΡΠ·ΡΡΡΡ Python 3 ΠΏΠΎΡΡΠΎΠΌΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π±ΠΈΠ±Π»ΠΈΡΠ΅ΠΊΠΈ Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠ³Ρ Π²ΡΠ±ΡΠ°ΡΡ unittest, nose ΠΈΠ»ΠΈ pytest.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ Python 3 ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Java, C#, Javascript, Ruby ΠΈΠ»ΠΈ Kotlin