Автоматизация Задач Часть 1

Автоматизация Задач Часть 1

Usman_lab


Салам.

Каждую повседневную и много-повторяющуюся задачу, можно автоматизировать. Я хочу показать как автоматизировать задачи, связанные с браузером. Для этого вам понадобиться ПК или ноутбук.

Поехали.


Установка языка программирования Python.

Перейдите на python.org и скачайте установщик.

Нажать Downloads
Нажать на download Python


При установке нажать на две галочки снизу. А затем на Install Now. Разрешаем установку

Теперь перейдите на сайт sublimetext.com

И нажмите скачать, установите програмку

Установка программки легкая, как обычно просто установите.

Как только будет завершена установка

Перезагрузите ПК или ноут.

Готово!




Нажмите комбинацию клавиш (хоткей, горячие клавиши, одновременно) Win + R

Win


R


Откроется диалоговое окно

И напишите CMD

У вас откроется черное окно (консоль/терминал)

Затем напишите команду :

pip install selenium
У вас может выглядеть чуть иначе

Нажмите Enter

Дождитесь установки, если все отлично у вас НЕ будет красной подсветки.

Затем можете закрывать консоль




У вас должен быть установлен браузер Chrome

Соответственно нам нужен еще chrome Driver

Скачать отсюда (официальный источник) - https://googlechromelabs.github.io/chrome-for-testing/

И нажать на Stable


У вас скачается ZIP архив пока не трогаем, сначала создайте папку с названием Project где удобно. Там-же создайте файл с названием и расширением таким main.py

А затем распакуйте ZIP в папку Project

Но чуть подредактируйте, должно выглядеть так:

На размеры не смотрите, они у вас будут другие


На размеры не смотрите, они у вас будут другие.




Перейдите в файл main.py

Откройте его с помощью программки Sublime Text

Скопируйте то, что ниже, и вставьте в main.py

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
import os


Еще чуть ниже скопируйте и вставьте это:

service = Service(executable_path='./chromedriver.exe')
options = webdriver.ChromeOptions()
options.add_argument("--disable-infobars")
options.add_argument("--start-maximized")
options.add_argument("--disable-extensions")
options.add_argument('--log-level=3')
options.add_argument('--deny-permission-prompts')
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_experimental_option('useAutomationExtension', False)
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('prefs', {"download.default_directory": f"{os.getcwd()}\\", "download.prompt_for_download": False, "download.directory_upgrade": True, "plugins.always_open_pdf_externally": True})
driver = webdriver.Chrome(service=service, options=options)


Пока что, сохраняем эти изменения, с помощью (хоткея/горячих клавиш) Ctrl + S



Изучаем функции, о том как перейти на сайт, нажать клавиши и кнопки, заполнить поля и так далее. И пока что не трогаем код


Первый метод который вам очень понадобиться:
driver.get("ссылка")

Это обращение к браузеру, чтоб он открыл ссылку.

Например:

driver.get("https://google.com")



Второй метод

Найти элемент и нажать по нему:

driver.find_element(By.CSS_SELECTOR, 'input[type="search"]').click()

После того как мы перешли на google.com мы говорим браузеру нажать на поле поиска, и задал адрес куда нажать. Но как я узнал этот адрес?

Разбираем:

Открываем код сайта (клавиша F12)

Внимательно смотрим

Выделяю поисковое поле, смотрю из чего он состоит.

Это стандартный тег input с:

айди-шником/id = "input"

классом/class = "truncate"

типом/type = "search"

и т.д.


Мне удобнее взять CSS селектором, а именно, нам нужен input с type (типом) = "search".

Так и написал в примере выше, и еще раз продублирую снизу:

By.CSS_SELECTOR, 'input[type="search"]'

Существуют и другие способы задать путь к элементу, но об этом во второй части, будет. (следите за каналом)


Третий метод

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

Проще сказать, заполнить поле.

Было:

driver.find_element(By.CSS_SELECTOR, 'input[type="search"]').click()

Тут как видим, мы нашли элемент и сразу кликнули .click()


Стало:

element = driver.find_element(By.CSS_SELECTOR, 'input[type="search"]')
element.click()

# Это добавим
element.send_keys("Слово, которое ищем в гугле")

Здесь, просто взяли элемент в переменную element а на второй строчке, обратились к элементу и нажали его, а дальше я послал некое поисковое слово/слова, и автоматом нажалось Enter. После чего, Гугл мне успешно начал поиск.

На этом все, нам НЕ надо нажимать Enter, так как send_keys делает это за нас в большинстве случаев.



Четвертый метод

Такой же driver.find_element() НО:

с окончанием s

То есть, вот так -> driver.find_elements()

Отличается он только тем, что ищет сразу несколько элементов.

Затем мы можем их брать по отдельности, и работать с каждым.

Например, возьмем все теги a с сайта:

elements = driver.find_elements(By.CSS_SELECTOR, 'a')

Этот метод ищет все теги a и возвращает их в объект elements

Мы можем взять каждую ссылку, из всех найденных тегов a

Вот так:

linkS = list() # Создаем объект список, куда будем записывать ссылки
for link in elements: # Берем каждый элемент
    linkS.append(link.get_attribute('href')) # И вытаскиваем ссылку из каждого, записывая в список linkS


Теперь все ссылки в обычном формате, собраны в список, дальше работаем с ними как хотим.




Пятый метод


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

НО

Во первых, явное указание времени ожидания, а мы знаем что веб-страницы загружаются либо быстро, либо долго. Поэтому если мы укажем явно, что программка будет ждать 5 секунд, то страница может не успеть загрузиться, в итоге будет ошибка, или наоборот, будет потрачено время на ожидание, в то время как страница уже давно загрузилась.

Во вторых, в selenium есть свой метод для ожидания когда, страница загрузиться, и затем будут выполнены действия.

Вот он:

wait = WebDriverWait(driver, 300)
wait.until(EC.visibility_of_element_located())

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


Внутри скобок visibility_of_element_located() помещаем элемент со скобками.

Например:

wait = WebDriverWait(driver, 300)
wait.until(EC.visibility_of_element_located(By.CSS_SELECTOR,
'input[type="search"]'))


Объясняю:

Мы создали объект WebDriverWait засунув туда наш driver с которым работаем и вторым параметром указали дефолтное значение (для новичков, не важно для чего). Затем у этого объекта вызываем метод until , дословно теперь переводиться как, "ждать до тех пор пока", дальше у нас visibility_of_element_located "пока элемент не станет видимым", затем в скобках скобки с указанием пути к этому элементу.

Супер-подробно 👍




Я рассказал базовые методы selenium, и показал это на примере языка программирования Python.

Во второй части, я хочу описать все это, более подробно, а также разобрать на каком-нибудь конкретном примере.

Report Page