Как установить chromedriver на windows
Перейти к содержимому

Как установить chromedriver на windows

  • автор:

Как установить chromedriver на windows

Скачай курс
в приложении

Перейти в приложение
Открыть мобильную версию сайта

© 2013 — 2023. Stepik

Наши условия использования и конфиденциальности

Get it on Google Play

Public user contributions licensed under cc-wiki license with attribution required

Установка драйвера chromedriver для Chrome Selenium

Для запуска тестов Selenium в Google Chrome, помимо самого браузера Chrome, должен быть установлен ChromeDriver. Установить ChromeDriver очень просто, так как он находится в свободном доступе в Интернете. Загрузите архив в зависимости от операционной системы, разархивируйте его и поместите исполняемый файл chromedriver в нужную директорию.

Какую версию chromedriver установить?

Мы должны установить именно ту версия которая была бы совместима с установленным Google Chrome на нашем ПК или VDS. В случае, если версии не совпадают, то мы получим данную ошибку:

selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 81

Введите в адресную строку Google Chrome данный путь:

chrome : / / settings / help

У вас появится вот такое окно:

Версия chromedriver

Рисунок 1 — Узнаем версию браузера Google Chrome

Скачать ChromeDriver для Linux, Windows и Mac

На данный момент актуальная версия драйвера 81.0.40 хотя у меня установлен более старый Google Chrome и последняя версия мне не подойдет. Как видно на рисунке выше, мне нужна версия 79.0.39 у вас может быть другая версия, нужно её скачать.

Скачать драйвер ChromeDriver

Рисунок 2 — Официальный сайт Google для загрузки драйвера chromedriver

На момент прочтения этой статьи версия может быть другой. Всегда выбирайте более новую версию, чтобы не поймать старые баги которые уже давно исправили в новой версии. НО! Помните, что вам нужно обновить и свой браузер Google Chrome если вы хотите работать с новой версией ChromeDriver.

Установка ChromeDriver под Linux, Windows и Mac

  1. Заходим на сайт https://chromedriver.storage.googleapis.com/index.html?path=79.0.3945.36/ (Проверьте сайт с Рис. 2 на обновления, тут версия: 79.0.3945);
  2. Скачиваем архив под вашу операционную систему;
  3. Распаковываем файл и запоминаем где находится файл chromedriver или chromedriver.exe (Windows).

Архив Chromedriver

Рисунок 3 — Скаченный архив с ChromeDriver

Если у вас Linux дистрибутив или Mac, вам нужно дать файлу chromedriver нужные права на выполнения. Открываем терминал и вводим команды одна за другой.

Как установить Chrome в Windows без использования другого браузера

Большинство пользователей Windows предпочитает устанавливать свой любимый веб-браузер после покупки нового компьютера или переустановки Windows. Но не все знают, что можно установить браузер, не используя другой. Как это сделать?

1. Через менеджер пакетов Winget

Winget — это менеджер пакетов, который позволяет загружать или обновлять любое приложение, введя простую команду. Выполните следующие действия, чтобы использовать Winget для установки браузера.

  1. Нажмите Win+R и введите «cmd».
  1. В новом окне введите «winget», «install» и название программного обеспечения:

winget install Google.Chrome

2. С помощью справки Microsoft HTMLHelp

Если вы не хотите использовать менеджер пакетов, то можно попробовать Microsoft HTML Help — исполняемую программу, которая работает аналогично браузеру и есть в любой версии Windows.

  • Просто нажмите Win+R и введите «cmd», либо наберите «cmd» в Поиске Windows, затем введите hh http://google.com.
  • Откроется веб-страница Google, ​​через которую можно загрузить веб-браузер. Нажмите «Еще» в левом верхнем углу и скачайте его.

3. Через команду cURL

cURL (client URL) позволяет загружать файлы напрямую из интернета с помощью PowerShell.

  • Найдите PowerShell через поиск Windows и запустите от имени администратора.
  • Введите команду cd Desktop, чтобы указать команде cURL сохранять файлы на рабочем столе.
  • Введите следующую команду: curl -L «http://link.com» -o download.exe

Microsoft Store — способ для установки других браузеров

Раньше из Microsoft Store можно было загружать только приложения UWP, специально разработанные для этого магазина. Сейчас оттуда возможно скачивать большинство браузеров и другое ПО, хотя именно Google Chrome там все еще недоступен. Поэтому. если вам нужен другой браузер, можете воспользоваться поиском в фирменном магазине.

Статья [Selenium] Установка, запуск и реальное применение. Part Ⅰ

16-06-A.jpg

В статье я расскажу, как можно управлять браузером, используя фреймворк Selenium. Этот фреймворк позволяет имитировать реальный браузер, управление которым будет происходить с помощью кода. Также, Selenium подходит для тестирования Web-приложений, решения рутинных задач: извлечение информации (парсинг) и др. Фреймворк написан на языке Java и был опубликован в 2004-ом разработчиком Jason Huggins.

  • Установке Selenium и так же веб-драйвера;
  • Использовать веб-локатор;
  • Написанию программы для взаимодействие с форумом Codeby.
Chromium/Google Chrome Windows/macOS/Linux Google
Firefox Windows/macOS/Linux Mozilla
Microsoft Edge Windows 10 Microsoft
Internet Explorer Windows Selenium Project
Safari macOS El Capitan и более новые Apple
Opera Windows/macOS/Linux Opera

Библиотека Selenium есть на следующих языках: Java, Python, Kotlin, JavaScript и т.п.

Установка Selenium

Итак, для установки Selenium воспользуемся командой:
pip install selenium
Доступно в

Ссылка скрыта от гостей

Это ещё не всё. Для Selenium нужны веб-драйвера, чтобы запускать нужный браузер при запуске.

Для браузера Chrome:

Chromedriver в Windows

Устанавливаем драйвер Chromdriver для Windows
Chromedriver — драйвер для запуска браузера Chrome.

Драйвер должен иметь ту версиею Chrome, которая у вас установлена. Чтобы узнать версию вашего браузера, перейдите в Настройки -> О браузере Chrome:

Download (3).png

Отлично, мы узнали версию браузера. Значит, нам нужен драйвер с версией 106. Чтобы установить Chromedriver переходим на сайт —

Ссылка скрыта от гостей

На сайте вы увидите две версии Chrome 107: beta & stable. Это новая версия драйвера Chrome. Этот драйвер будет работать у вас только в том случае, если браузер имеет такую же версию. Для просмотра всех версий нажимаем на кнопку Downloads, как показано на скрине:

Download (4).png

Скачиваем ChromeDriver 106:

Download (5).png

Супер! Файл chromedriver.exe можно оставить в любом каталоге нашей системы. В дальнейшем нам придётся указывать путь.

Chromedriver в Linux

Устанавливаем драйвер Chromdriver в Linux
Здесь не так уж и сложно. Чтобы установить драйвер Chrome на Linux, переходим на сайт

Ссылка скрыта от гостей

, спускаемся ниже и выбираем версию, совместимой с вашей версией браузера Google Chrome.
Затем скачиваем архив chromedriver_linux64.zip , открываем терминал и вводим:

unzip chromedriver_linux64.zip
sudo mv chromedriver /usr/local/bin/chromedriver
sudo chown root:root /usr/local/bin/chromedriver
sudo chmod +x /usr/local/bin/chromedriver

Для браузера Firefox:
Geckodriver в Windows

Устанавливаем драйвер Geckodriver в Windows
Geckodriver —
драйвер для запуска Firefox. Установка чуть-чуть отличается.

Для скачивания geckodriver переходим на GitHub — тыц
Версия драйвера должна совместима с версией браузера Firefox.

Download (6).png

В моём случаю я устанавливаю geckodriver-v0.32.0-win64.zip . После скачивания распакуйте архив и оставьте geckodriver.exe в любой директории системы. В дальнейшем нам придётся указывать путь.

Geckodriver в Linux

Устанавливаем драйвер Geckodriver в Linux
Скажу одно: в Linux по умолчанию установлен geckodriver для Firefox, даже не нужно указывать путь к нему.
Но. если он у вас по каким-то причинам не установлен, переходим и скачиваем архив для Linux.

Ссылка скрыта от гостей
Алгоритм работы

Алгоритм работы

Untitled Workspace.png

На скриншоте показан алгоритм работы нашей будущей программы. После запуска Selenium ищет путь веб-драйвера и, при успехе, открывает сайт Codeby.net.

О веб-локаторах

На самом деле это очень важна тема, без них мы не сможем управлять страницей при помощи Selenium. Что же вообще такое веб-локаторы? Это простые элементы на HTML-странице, которые мы сможем выбирать и выполнять нужной действие. Например, нажатие кнопки: чтобы нажать на кнопку нам нужно выбрать элемент, а именно — веб-локатор, который Selenium сможет найти. Если локатор найден, то Selenium продолжает свою работу.

Пример нажатия кнопки сервисы Codeby

1667857341005.png

Чтобы Selenium смог нажать накнопку нам необходимо получить веб-локатор, для этого открываем Инструменты разработчика в браузере:

1667857536877.png

Выбрали, теперь нам нужно получить веб-локатор (XPATH) для HTML-тэга .
Что такое XPATH? Это веб-локатор, который можно применять в Selenium. Кроме XPATH существует и другие типы веб-локаторов: outerHtml, Element, Full Xpath и т.п
Переходим к кодингу.

  1. Указать путь к драйверу для запуска браузера
  2. Указать ссылку на сайт, который будет открывать Selenium
  3. Найти веб-локаторы кнопки Сервисы Codebyи кликнуть на неё, а затем нажать на Пентест.
  4. Бинго!
import time from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service

Определяем библиотеки: time нужно для задержки, чтобы страница успела загрузиться. Selenium.by предназначен для нахождения и определения веб-локаторов.

На примере я буду использовать ООП, для меня он понятнее. Создаем класс под название ButtonCodeby .

class ButtonCodeby: pass
 def __init__(self, executable_path: str): self.url = 'https://codeby.net' self.service = '//*[@id="top"]/div[1]/div/div[1]/div/a' self.pentest = '/html/body/div[5]/div/a[2]' self.browser = webdriver.Chrome(service=Service(executable_path=executable_path))

Для конструктора __init__ определяем атрибуты. В качестве параметра он принимает сам путь драйвера который нам придется указать в конце.
self.url — принимает ссылку на сайт, в нашем случае codeby
self.service — принимает веб-локатор XPATH, кнопка «Сервисы Codeby»
self.pentest — принимает веб-локатор XPATH, кнопка «Пентест»
self.browser — когда путь драйвера будет указан, всё это выполнится.

Создаём функцию [ go_codeby ]

 def go_codeby(self): print(f'Переход на страницу ') self.browser.get(self.url)

Функция go_codeby — переходит на сайт Codeby с помощью browser.get.

Создаём функцию [ service_codeby ]

 def service_codeby(self): self.browser.find_element(By.XPATH, self.service).click() time.sleep(0.5)

Функция service_codeby выполнят нажатие на кнопку Сервисы Codeby.

Создаём функцию [ pentest_codeby ]

 def pentest_codeby(self): self.browser.find_element(By.XPATH, self.pentest).click() time.sleep(5) self.browser.quit()

Функция pentest_codeby — нажимает на кнопку Пентест, затем выходим с браузера.

И последний штрих

 def start_click(self): self.go_codeby() self.service_codeby() self.pentest_codeby() btn_cod = ButtonCodeby('/сhromedriver/chromedriver.exe')

Функция start_click — выполняет все функции, которые мы написали выше. В конце мы создаем переменную btn_cod, которая необходима для запуска браузера с определенным путем драйвера.

import time from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service class ButtonCodeby: def __init__(self, executable_path: str): self.url = 'https://codeby.net' self.service = '//*[@id="top"]/div[1]/div/div[1]/div/a' self.pentest = '/html/body/div[5]/div/a[2]' self.browser = webdriver.Chrome(service=Service(executable_path=executable_path)) def go_codeby(self): print(f'Переход на страницу ') self.browser.get(self.url) def service_codeby(self): self.browser.find_element(By.XPATH, self.service).click() time.sleep(0.5) def pentest_codeby(self): self.browser.find_element(By.XPATH, self.pentest).click() time.sleep(5) self.browser.quit() def start_click(self): self.go_codeby() self.service_codeby() self.pentest_codeby() btn_cod = ButtonCodeby('/chromedriver/chromedriver.exe')

интересное

Лекарство селениум, от боли суставы и многое другое.

579815_original.jpg

Важные ссылки
Документация Selenium python3 —
Ссылка скрыта от гостей

Что такое вебдрайвера — тык
Нашли ошибку в коде или тексте? Сообщите!
Последнее редактирование: 20.11.2022

dream to perfection

Well-known member
Green Team

  • Сообщения 59
  • Реакции 35
Mark Klintov

Grey Team
23.07.2022 151 269 BIT 1

Идея хорошая для статьи, но очень мало. Хочется видеть больше примеров работы. Лично я не понял для чего нужен этот модуль, ведь открыть ссылку в браузере можно при помощи того же

Ссылка скрыта от гостей

. Могу помочь ссылкой на Habr, здесь ты сможешь черпать знания и принцип работы. Попробуй донести до читателя чем может помочь selenium на реальных примерах. Буду очень рад почитать разбор этого фреймворка)

dream to perfection

Green Team
11.06.2022 59 35 BIT 0

Идея хорошая для статьи, но очень мало. Хочется видеть больше примеров работы. Лично я не понял для чего нужен этот модуль, ведь открыть ссылку в браузере можно при помощи того же

Ссылка скрыта от гостей

. Могу помочь ссылкой на Habr, здесь ты сможешь черпать знания и принцип работы. Попробуй донести до читателя чем может помочь selenium на реальных примерах. Буду очень рад почитать разбор этого фреймворка)

Большое спасибо за такой ответ. Да, я понял что данная статья не очень подробная.
Ожидайте вторую часть!

Dzen
Codeby Games

Gold Team
16.04.2021 354 418 BIT 35

Большое спасибо за такой ответ. Да, я понял что данная статья не очень подробная.
Ожидайте вторую часть!

Думаю, лучше продолжить данную статью, нежели делать вторую часть. Дополняйте. Лучше одна ёмкая статья, чем много обрывистых заметок )

dream to perfection

Green Team
11.06.2022 59 35 BIT 0
Статья обновлена!

Johan Van

Green Team
13.06.2020 344 638 BIT 39

Привет, Codeby!

В статье я расскажу, как можно управлять браузером, используя фреймворк Selenium. Этот фреймворк позволяет имитировать реальный браузер, управление которым будет происходить с помощью кода. Также, Selenium подходит для тестирования Web-приложений, решения рутинных задач: извлечение информации (парсинг) и др. Фреймворк написан на языке Java и был опубликован в 2004-ом разработчиком Jason Huggins.

  • Установке Selenium и так же веб-драйвера;
  • Использовать веб-локатор;
  • Написанию программы для взаимодействие с форумом Codeby.
Chromium/Google Chrome Windows/macOS/Linux Google
Firefox Windows/macOS/Linux Mozilla
Microsoft Edge Windows 10 Microsoft
Internet Explorer Windows Selenium Project
Safari macOS El Capitan и более новые Apple
Opera Windows/macOS/Linux Opera

Библиотека Selenium есть на следующих языках: Java, Python, Kotlin, JavaScript и т.п.

Установка Selenium

Итак, для установки Selenium воспользуемся командой:
pip install selenium
Доступно в

Ссылка скрыта от гостей

Это ещё не всё. Для Selenium нужны веб-драйвера, чтобы запускать нужный браузер при запуске.

Для браузера Chrome:

Chromedriver в Windows

Устанавливаем драйвер Chromdriver для Windows
Chromedriver — драйвер для запуска браузера Chrome.

Драйвер должен иметь ту версиею Chrome, которая у вас установлена. Чтобы узнать версию вашего браузера, перейдите в Настройки -> О браузере Chrome:

Отлично, мы узнали версию браузера. Значит, нам нужен драйвер с версией 106. Чтобы установить Chromedriver переходим на сайт —

Ссылка скрыта от гостей

На сайте вы увидите две версии Chrome 107: beta & stable. Это новая версия драйвера Chrome. Этот драйвер будет работать у вас только в том случае, если браузер имеет такую же версию. Для просмотра всех версий нажимаем на кнопку Downloads, как показано на скрине:

Скачиваем ChromeDriver 106:

Супер! Файл chromedriver.exe можно оставить в любом каталоге нашей системы. В дальнейшем нам придётся указывать путь.

Chromedriver в Linux

Устанавливаем драйвер Chromdriver в Linux
Здесь не так уж и сложно. Чтобы установить драйвер Chrome на Linux, переходим на сайт

Ссылка скрыта от гостей

, спускаемся ниже и выбираем версию, совместимой с вашей версией браузера Google Chrome.
Затем скачиваем архив chromedriver_linux64.zip , открываем терминал и вводим:

unzip chromedriver_linux64.zip
sudo mv chromedriver /usr/local/bin/chromedriver
sudo chown root:root /usr/local/bin/chromedriver
sudo chmod +x /usr/local/bin/chromedriver

Для браузера Firefox:
Geckodriver в Windows

Устанавливаем драйвер Geckodriver в Windows
Geckodriver —
драйвер для запуска Firefox. Установка чуть-чуть отличается.

Для скачивания geckodriver переходим на GitHub — тыц
Версия драйвера должна совместима с версией браузера Firefox.

В моём случаю я устанавливаю geckodriver-v0.32.0-win64.zip . После скачивания распакуйте архив и оставьте geckodriver.exe в любой директории системы. В дальнейшем нам придётся указывать путь.

Geckodriver в Linux

Устанавливаем драйвер Geckodriver в Linux
Скажу одно: в Linux по умолчанию установлен geckodriver для Firefox, даже не нужно указывать путь к нему.
Но. если он у вас по каким-то причинам не установлен, переходим и скачиваем архив для Linux.

Ссылка скрыта от гостей
Алгоритм работы

Алгоритм работы

На скриншоте показан алгоритм работы нашей будущей программы. После запуска Selenium ищет путь веб-драйвера и, при успехе, открывает сайт Codeby.net.

О веб-локаторах

На самом деле это очень важна тема, без них мы не сможем управлять страницей при помощи Selenium. Что же вообще такое веб-локаторы? Это простые элементы на HTML-странице, которые мы сможем выбирать и выполнять нужной действие. Например, нажатие кнопки: чтобы нажать на кнопку нам нужно выбрать элемент, а именно — веб-локатор, который Selenium сможет найти. Если локатор найден, то Selenium продолжает свою работу.

Пример нажатия кнопки сервисы Codeby

Чтобы Selenium смог нажать накнопку нам необходимо получить веб-локатор, для этого открываем Инструменты разработчика в браузере:

Выбрали, теперь нам нужно получить веб-локатор (XPATH) для HTML-тэга .
Что такое XPATH? Это веб-локатор, который можно применять в Selenium. Кроме XPATH существует и другие типы веб-локаторов: outerHtml, Element, Full Xpath и т.п
Переходим к кодингу.

  1. Указать путь к драйверу для запуска браузера
  2. Указать ссылку на сайт, который будет открывать Selenium
  3. Найти веб-локаторы кнопки Сервисы Codebyи кликнуть на неё, а затем нажать на Пентест.
  4. Бинго!
import time from selenium import webdriver from selenium.webdriver.common.by import By

Определяем библиотеки: time нужно для задержки, чтобы страница успела загрузиться. Selenium.by предназначен для нахождения и определения веб-локаторов.

На примере я буду использовать ООП, для меня он понятнее. Создаем класс под название ButtonCodeby .

class ButtonCodeby: pass
 def __init__(self, executable_path: str): self.url = 'https://codeby.net' self.service = '//*[@id="top"]/div[1]/div/div[1]/div/a' self.pentest = '/html/body/div[5]/div/a[2]' self.browser = webdriver.Chrome(executable_path=executable_path)

Для конструктора __init__ определяем атрибуты. В качестве параметра он принимает сам путь драйвера который нам придется указать в конце.
self.url — принимает ссылку на сайт, в нашем случае codeby
self.service — принимает веб-локатор XPATH, кнопка «Сервисы Codeby»
self.pentest — принимает веб-локатор XPATH, кнопка «Пентест»
self.browser — когда путь драйвера будет указан, всё это выполнится.

Создаём функцию [ go_codeby ]

 def go_codeby(self): print(f'Переход на страницу ') self.browser.get(self.url)

Функция go_codeby — переходит на сайт Codeby с помощью browser.get.

Создаём функцию [ service_codeby ]

 def service_codeby(self): self.browser.find_element(By.XPATH, self.service).click() time.sleep(0.5)

Функция service_codeby выполнят нажатие на кнопку Сервисы Codeby.

Создаём функцию [ pentest_codeby ]

 def pentest_codeby(self): self.browser.find_element(By.XPATH, self.pentest).click() time.sleep(5) self.browser.quit()

Функция pentest_codeby — нажимает на кнопку Пентест, затем выходим с браузера.

И последний штрих

 def start_click(self): self.go_codeby() self.service_codeby() self.pentest_codeby() btn_cod = ButtonCodeby(''/сhromedriver/chromedriver.exe'')

Функция start_click — выполняет все функции, которые мы написали выше. В конце мы создаем переменную btn_cod, которая необходима для запуска браузера с определенным путем драйвера.

import time from selenium import webdriver from selenium.webdriver.common.by import By class ButtonCodeby: def __init__(self, executable_path: str): self.url = 'https://codeby.net' self.service = '//*[@id="top"]/div[1]/div/div[1]/div/a' self.pentest = '/html/body/div[5]/div/a[2]' self.browser = webdriver.Chrome(executable_path=executable_path) def go_codeby(self): print(f'Переход на страницу ') self.browser.get(self.url) def service_codeby(self): self.browser.find_element(By.XPATH, self.service).click() time.sleep(0.5) def pentest_codeby(self): self.browser.find_element(By.XPATH, self.pentest).click() time.sleep(5) self.browser.quit() def start_click(self): self.go_codeby() self.service_codeby() self.pentest_codeby() btn_cod = ButtonCodeby('/chromedriver/chromedriver.exe')

интересное

Лекарство селениум, от боли суставы и многое другое.

Важные ссылки
Документация Selenium python3 —
Ссылка скрыта от гостей

Что такое вебдрайвера — тык
Нашли ошибку в коде или тексте? Сообщите!

Всем доброго времени суток. Хотелось бы сказать несколько слов по поводу кода, который приведен в статье. Я понимаю, что автор еще больший новичок, чем я, потому, это, скажем так, небольшое дружеское код-ревью.

Начнем с самого простого. Способ, с помощью которого указывается путь к драйверу, именно в том виде, что у автора в статье:

self.browser = webdriver.Chrome(executable_path=executable_path)

на данный момент является устаревшим. Об этом явно свидетельствует warning, который появляется каждый раз при запуске кода.

01.png

Для того, чтобы правильно указывать путь, в данный момент, необходимо импортировать модуль Service, в котором уже и указывается путь к браузеру и прочие необходимые параметры. Для того, чтобы импортировать его в код нужно прописать в блоке импорта дополнительную строку:

from selenium.webdriver.chrome.service import Service

А также заменить в коде строку, где создается объект драйвера. То есть, вот это:

self.browser = webdriver.Chrome(executable_path=executable_path)

нужно заменить вот на это:

self.browser = webdriver.Chrome(service=Service(executable_path=executable_path))

Таким образом, блок импорта и функция инициализации класса при этом будут выглядеть следующим образом:

Блок импорта и инициализации класса

import time from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service class ButtonCodeby: def __init__(self, executable_path: str): self.url = 'https://codeby.net' self.service = '//*[@id="top"]/div[1]/div/div[1]/div/a' self.pentest = '/html/body/div[5]/div/a[2]' self.browser = webdriver.Chrome(service=Service(executable_path=executable_path))

Двигаемся дальше. Разделение кода на функции, в данном контексте, совершенно излишне. Так как, при разделении кода, каждая функция класса будет считаться его методом. А, следовательно, ее можно было бы выполнить отдельно от других функций без задействования других методов. Здесь же это не так. А, следовательно, указание функции под каждое отдельное действие излишне. Для примера, попробуем запустить функцию service_codeby(self). И мы сразу же ловим исключение, которое говорит о том, что элемент, по которому пытается произвести клик драйвер, не найден.

02.png

Равно как и запуск функции pentest_codeby(self) в отрыве от остальных не имеет смысла, ибо он так же вызовет исключение, в котором будет говориться, что искомый элемент не найден.

03.png

Более того, запуск pentest_codeby(self) в отрыве от функции service_codeby(self) будет бессмысленным. Дело в том, что меню, по которому пытается выполнить клик данный код, подгружается динамически. И, пока не будет выполнен клик по предыдущему элементу, драйвер никогда не найдет код, на который ссылается данная функция. Вот для примера класс, который нужно найти, чтобы выполнить клик на кнопку. Данный класс появился уже после того, как меню было раскрыто:

05.png

Попробуем поискать данный класс до того, как мы раскрыли меню:

06.png

Как видим, совпадений не найдено. А теперь раскроем меню и повторим поиск:

07.png

Так вот, следовательно, разделять код нажатия на выпадающее меню, а также нажатия на кнопку в этом меню на отдельные функции не имеет смысла, так как они не будут работать по отдельности. Более того, даже код перехода на страницу сайта, также следует объединить с кодом клика по меню и кнопке. Так как, выполнение отдельно перехода на сайт, может быть и имеет смысл, и будет выполнено. А вот уже клики по меню и кнопке, без перехода на сайт, явно нет. Таким образом, если уж не отрываться от класса, который представлен в коде, весь код перехода и кликов можно свести к одной функции. Значит, в итоге код будет выглядеть так:

Измененный код

import time from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service class ButtonCodeby: def __init__(self, executable_path: str): self.url = 'https://codeby.net' self.service = '//*[@id="top"]/div[1]/div/div[1]/div/a' self.pentest = '/html/body/div[5]/div/a[2]' self.browser = webdriver.Chrome(service=Service(executable_path=executable_path)) def go_codeby(self): print(f'Переход на страницу ') self.browser.get(self.url) self.browser.find_element(By.XPATH, self.service).click() time.sleep(0.5) self.browser.find_element(By.XPATH, self.pentest).click() time.sleep(5) self.browser.quit()

Ну и запустить его можно будет с помощью такой вот конструкции:

Ну и немного еще про класс. Использование класса в данном случае можно, но является несколько бессмысленной тратой времени, хотя бы потому, что при парсинге может банально измениться код на странице. Следовательно, класс, который призван упростить создание своих экземпляров на его основе, просто не будет работать, так как в нем жестко прописаны элементы, которые необходимо найти. Но, это так, мелочи. Если автору хочется использовать класс — почему бы нет. Тем более, в данном случае все будет работать как с ним, так и без него.

На этом все. Такое вот, небольшое лирическое отступление.

Последнее редактирование: 17.11.2022

dream to perfection

Green Team
11.06.2022 59 35 BIT 0

Всем доброго времени суток. Хотелось бы сказать несколько слов по поводу кода, который приведен в статье. Я понимаю, что автор еще больший новичок, чем я, потому, это, скажем так, небольшое дружеское код-ревью.

Начнем с самого простого. Способ, с помощью которого указывается путь к драйверу, именно в том виде, что у автора в статье:

self.browser = webdriver.Chrome(executable_path=executable_path)

на данный момент является устаревшим. Об этом явно свидетельствует warning, который появляется каждый раз при запуске кода.

Для того, чтобы правильно указывать путь, в данный момент, необходимо импортировать модуль Service, в котором уже и указывается путь к браузеру и прочие необходимые параметры. Для того, чтобы импортировать его в код нужно прописать в блоке импорта дополнительную строку:

from selenium.webdriver.chrome.service import Service

А также заменить в коде строку, где создается объект драйвера. То есть, вот это:

self.browser = webdriver.Chrome(executable_path=executable_path)

нужно заменить вот на это:

self.browser = webdriver.Chrome(service=Service(executable_path=executable_path))

Таким образом, блок импорта и функция инициализации класса при этом будут выглядеть следующим образом:

Блок импорта и инициализации класса

import time from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service class ButtonCodeby: def __init__(self, executable_path: str): self.url = 'https://codeby.net' self.service = '//*[@id="top"]/div[1]/div/div[1]/div/a' self.pentest = '/html/body/div[5]/div/a[2]' self.browser = webdriver.Chrome(service=Service(executable_path=executable_path))

Двигаемся дальше. Разделение кода на функции, в данном контексте, совершенно излишне. Так как, при разделении кода, каждая функция класса будет считаться его методом. А, следовательно, ее можно было бы выполнить отдельно от других функций без задействования других методов. Здесь же это не так. А, следовательно, указание функции под каждое отдельное действие излишне. Для примера, попробуем запустить функцию service_codeby(self). И мы сразу же ловим исключение, которое говорит о том, что элемент, по которому пытается произвести клик драйвер, не найден.

Равно как и запуск функции pentest_codeby(self) в отрыве от остальных не имеет смысла, ибо он так же вызовет исключение, в котором будет говориться, что искомый элемент не найден.

Более того, запуск pentest_codeby(self) в отрыве от функции service_codeby(self) будет бессмысленным. Дело в том, что меню, по которому пытается выполнить клик данный код, подгружается динамически. И, пока не будет выполнен клик по предыдущему элементу, драйвер никогда не найдет код, на который ссылается данная функция. Вот для примера класс, который нужно найти, чтобы выполнить клик на кнопку. Данный класс появился уже после того, как меню было раскрыто:

Попробуем поискать данный класс до того, как мы раскрыли меню:

Как видим, совпадений не найдено. А теперь раскроем меню и повторим поиск:

Так вот, следовательно, разделять код нажатия на выпадающее меню, а также нажатия на кнопку в этом меню на отдельные функции не имеет смысла, так как они не будут работать по отдельности. Более того, даже код перехода на страницу сайта, также следует объединить с кодом клика по меню и кнопке. Так как, выполнение отдельно перехода на сайт, может быть и имеет смысл, и будет выполнено. А вот уже клики по меню и кнопке, без перехода на сайт, явно нет. Таким образом, если уж не отрываться от класса, который представлен в коде, весь код перехода и кликов можно свести к одной функции. Значит, в итоге код будет выглядеть так:

Измененный код

import time from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service class ButtonCodeby: def __init__(self, executable_path: str): self.url = 'https://codeby.net' self.service = '//*[@id="top"]/div[1]/div/div[1]/div/a' self.pentest = '/html/body/div[5]/div/a[2]' self.browser = webdriver.Chrome(service=Service(executable_path=executable_path)) def go_codeby(self): print(f'Переход на страницу ') self.browser.get(self.url) self.browser.find_element(By.XPATH, self.service).click() time.sleep(0.5) self.browser.find_element(By.XPATH, self.pentest).click() time.sleep(5) self.browser.quit()

Ну и запустить его можно будет с помощью такой вот конструкции:

Ну и немного еще про класс. Использование класса в данном случае можно, но является несколько бессмысленной тратой времени, хотя бы потому, что при парсинге может банально измениться код на странице. Следовательно, класс, который призван упростить создание своих экземпляров на его основе, просто не будет работать, так как в нем жестко прописаны элементы, которые необходимо найти. Но, это так, мелочи. Если автору хочется использовать класс — почему бы нет. Тем более, в данном случае все будет работать как с ним, так и без него.

На этом все. Такое вот, небольшое лирическое отступление.

Большое спасибо. По поводу Service недавно только узнал и занес сразу во-втором часте и указал что он давно устарел.
Про разделение кода вы совершенно правы, код будет слишком большим и лишним. Большое спасибо за код. понял свою ошибку и буду знать в дальнейшем.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *