Быстрый в изучении - мощный в программировании
>> Telegram ЧАТ для Python Программистов

Свободное общение и помощь советом и решением проблем с кодом! Заходите в наш TELEGRAM ЧАТ!

>> Python Форум Помощи!

Мы создали форум где отвечаем на все вопросы связанные с языком программирования Python. Ждем вас там!

>> Python Канал в Telegram

Обучающие статьи, видео и новости из мира Python. Подпишитесь на наш TELEGRAM КАНАЛ!

Руководство по Selenium: Web Scraping с Selenium и Python

2 апреля 2017 г. Archy Просмотров: 51926 RSS 9 , , , ,

Web Scraping с Selenium и Python

Представьте, какие возможности откроются перед вами, если вы автоматизируете всю нудную деятельность в интернете, такую как ежедневная проверка первых результатов в Google по ключевым запросам, или загрузка кучи разных файлов с разных сайтов. В данном разделе мы научимся пользоваться Selenium вместе с Python. Selenium – это инструмент для веб скрейпинга, имитирующий деятельность пользователя в интернете. К примеру, вы можете использовать Selenium для автоматических запросов в Google и чтения результатов, или заходить в ваши аккаунты в социальных сетях, имитировать пользователя для теста ваших веб приложений. А также многое другое, что вам нужно постоянно делать в интернете. Возможности безграничны!

Важно: Каждый код в этом разделе был протестирован на Python 2.7 и Python 3.4.

Установка и использование Selenium

Selenium – это пакет Python который может быть установлен при помощи pip. Рекомендую установить его в виртуальной среде (используя virtualenv и virtualenvwrapper).

Чтобы установить Selenium, вам нужно ввести следующее:

pip install selenium

В этом разделе мы инициализируем драйвер Firefox, вы можете установить его, скачав исходники geckodriver. Если вы хотите работать в Chrome или IE, вы найдете всю нужную информацию у них на github.

Установка geckodriver драйвер для Firefox

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

Первым делом скачиваем исходники драйвера geckodriver в моем случае это "geckodriver-v0.15.0-linux64.tar.gz" у меня Ubuntu.

wget https://github.com/mozilla/geckodriver/releases/download/v0.15.0/geckodriver-v0.15.0-linux64.tar.gz
tar -xvzf geckodriver-v0.15.0-linux64.tar.gz
sudo chmod +x geckodriver
sudo mv geckodriver /usr/local/bin

Более подробно про установку можно прочитать на английском сайте документации. Там и список всех доступных драйверов под разные браузеры.

Начнем работу!

После установки Selenium и Firefox(geckodriver), создайте файл Python под названием selenium_script.py. Теперь приступаем к инициализации браузера при помощи Selenium:

import time
from selenium import webdriver
 
driver = webdriver.Firefox()
time.sleep(5)
driver.quit()

Таким образом, код инициализировал браузер Firefox, и закрывает его спустя 5 секунд.

Что если мы перейдем в Google и поищем что-нибудь?

Web Scraping в Google при помощи Selenium

Давайте создадим скрипт, который загружает главную страницу Google, и создает запрос "Selenium":

import time
from selenium import webdriver
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
 
 
def init_driver():
    driver = webdriver.Firefox()
    driver.wait = WebDriverWait(driver, 5)
    return driver
 
 
def lookup(driver, query):
    driver.get("http://www.google.com")
    try:
        box = driver.wait.until(EC.presence_of_element_located(
            (By.NAME, "q")))
        button = driver.wait.until(EC.element_to_be_clickable(
            (By.NAME, "btnK")))
        box.send_keys(query)
        button.click()
    except TimeoutException:
        print("Box or Button not found in google.com")
 
 
if __name__ == "__main__":
    driver = init_driver()
    lookup(driver, "Selenium")
    time.sleep(5)
    driver.quit()

Что есть в данном коде:

1. Функция init_driver инициализирует экземпляр драйвера;

- Создает экземпляр драйвера;

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

2. Функция lookup берет два аргумента: драйвер и запрос (строка);

- Это открывает поисковую страницу Google;

- Затем ждет, пока будет найден элемент окна запроса, а также кнопку для нажатия. Обратите внимание на то, что мы используем функцию WebDriverWait именно для того, чтобы дождаться появления этих элементов;

- Оба элементы были обнаружены по наименованию. Другими вариантами их поиска были бы ID, XPATH, TAG_NAME, CLASS_NAME, CSS_SELECTOR.

- Далее, запрос отправляется в элемент окна запроса, после чего кнопка поиска нажимается;

- Если окно запроса или кнопка небыли найдены, в пределах наших пяти секунд, возникает TimeoutException;

3. Следующий оператор является условным выражением, которое истинно только тогда, когда скрипт запускается напрямую. Это предотвращает запуск следующих операторов при импорте этого файла;

- Далее драйвер инициализируется и запускается функция lookup, которая будет искать в Google слово "Selenium";

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

И наконец, запустите свой код с:

python selenium_script.py

Сработало? Если у вас появилась ошибка ElementNotVisibleException, читайте далее.

Как выявить ElementNotVisibleException

Недавно был изменен поиск Google, поэтому вначале Google показывает эту страницу:

Web Scraping с Selenium и Python

И после того, как вы начали вводить свой запрос, кнопка запроса смещается в верхнюю часть окна:

Web Scraping с Selenium и Python

Что ж, на самом деле она не двигается. Старая кнопка стала невидимой, а новая все еще видна (по этой причине и возникает ошибка, когда вы нажимаете на старую кнопку: она невидима!). Мы можем обновить функцию lookup в нашем коде, чтобы выявить ошибку:

from selenium.common.exceptions import ElementNotVisibleException
 
def lookup(driver, query):
    driver.get("http://www.google.com")
    try:
        box = driver.wait.until(EC.presence_of_element_located(
            (By.NAME, "q")))
        button = driver.wait.until(EC.element_to_be_clickable(
            (By.NAME, "btnK")))
        box.send_keys(query)
        try:
            button.click()
        except ElementNotVisibleException:
            button = driver.wait.until(EC.visibility_of_element_located(
                (By.NAME, "btnG")))
            button.click()
    except TimeoutException:
        print("Box or Button not found in google.com")

Элемент button.click(), который и вызывал ошибку, находится внутри оператора try. Если ошибка возникла, мы взглянем на следующую кнопку, при помощи visibility_of_element_located, чтобы убедиться в том, что нужный нам элемент видим, после чего нажимаем на кнопку. Если в какой-либо момент, какой-либо элемент не будет найден в течение 5 секунд, ошибка TimeoutException возникнет и будет выявлена двумя последними строками кода. Обратите внимание на то, что название кнопки “btnK” , а название новой кнопки - “btnG”.

Финальный вид кода

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

import time
from selenium import webdriver
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
from selenium.common.exceptions import ElementNotVisibleException
 
 
def init_driver():
    driver = webdriver.Firefox()
    driver.wait = WebDriverWait(driver, 5)
    return driver
 
 
def lookup(driver, query):
    driver.get("http://www.google.com")
    try:
        box = driver.wait.until(EC.presence_of_element_located(
            (By.NAME, "q")))
        button = driver.wait.until(EC.element_to_be_clickable(
            (By.NAME, "btnK")))
        box.send_keys(query)
        try:
            button.click()
        except ElementNotVisibleException:
            button = driver.wait.until(EC.visibility_of_element_located(
                (By.NAME, "btnG")))
            button.click()
    except TimeoutException:
        print("Box or Button not found in google.com")
 
 
if __name__ == "__main__":
    driver = init_driver()
    lookup(driver, "Selenium")
    time.sleep(5)
    driver.quit()

Список методов в Selenium

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

# Импорт модулей и инициализация драйвера
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
 
driver = webdriver.Firefox()
driver.wait = WebDriverWait(driver, 5)
 
 
# Ожидание элементов.
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
 
element = driver.wait.until(
    EC.presence_of_element_located(
    EC.element_to_be_clickable(
    EC.visibility_of_element_located(
        (By.NAME, "name")
        (By.ID, "id")
        (By.LINK_TEXT, "link text")
        (By.PARTIAL_LINK_TEXT, "partial link text")
        (By.TAG_NAME, "tag name")
        (By.CLASS_NAME, "class name")
        (By.CSS_SELECTOR, "css selector")
        (By.XPATH, "xpath")
    )
)
 
 
# Выявляем и ловим ошибки.
from selenium.common.exceptions import
    TimeoutException
    ElementNotVisibleException

Внимание: это не файл Python, не пытайтесь запустить или импортировать его! Спасибо за внимание, надеюсь, эта статья вам очень помогла.

Комментариев: 9
  1. Спасибо очень помогло наконец открылся браузер!!!

  2. Богдан | 2018-05-22 в 16:28:18

    на странице сайта нужно вставлять фотографии, можно ли это как-то автоматизировать?

  3. Василий | 2018-09-21 в 12:06:15

    Спасибо за статью!

  4. не находит кнопочку :( просто не находит

  5. в мене метод click() не працює можете допомогти

  6. Спасибо за статью!

  7. Михаил | 2021-10-28 в 19:10:13

    Добрый вечер! Ситуация следующая: нужно найти все id в тегах на странице, и вывести их. Каким образом это можно было бы реализовать? Сайт: вайлдберис. Спасибо!

  8. Привет дамы и господа[url=https://ukr-life.com.ua/]![/url]

    Ищите независимое украинское СМИ? Хотите изучать лучшую и актуальную информацию? Тогда Вы по адресу!

    [url=https://ukr-life.com.ua/][img]https://i114.fastpic.ru/big/2021/0221/9f/2ee8b626960711575c666ec340b1349f.jpg[/img][/url]

    Наша интернет газета УКР Лайф признано яркой независимой газетой. У нас Вы можете изучить свежие разделы статей на тему пенсий в Украине, коммунальных коммуналки и тарифов, которые интересуют практически каждого гражданина. Мы берем информацию из первоисточников и делемся ею с Вами, дорогие читатели.

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

    Вот ТОП 10 последних новостей, которые стоит прочитать уже сейчас:

    1)[url=https://ukr-life.com.ua/]ВЪЕЗД В УКРАИНУ ДЛЯ РОССИЯН В 2024 ГОДУ [/url]

    2)[url=https://ukr-life.com.ua/]КОГДА НАСТУПИТ ВЕСНА В 2024 ГОДУ? [/url]

    3)[url=https://ukr-life.com.ua/]НАСТРОЙКИ СПУТНИКОВЫХ КАНАЛОВ 2024 В УКРАИНЕ[/url]

    4)[url=https://ukr-life.com.ua/]ДЕШЕВЫЕ ТАРИФЫ КИЕВСТАР 2024 ГОДА [/url]

    5)[url=https://ukr-life.com.ua/]ПЕНСИИ ПЕРЕСЕЛЕНЦАМ В УКРАИНЕ В 2024 ГОДУ [/url]

    6)[url=https://ukr-life.com.ua/]ПОСОБИЕ МАТЕРИ ОДИНОЧКЕ В УКРАИНЕ 2024 [/url]

    7)[url=https://ukr-life.com.ua/]ПРЕДСКАЗАНИЯ О ДОНБАССЕ НА 2024 ГОД ОТ ЭКСТРАСЕНСОВ [/url]

    8)[url=https://ukr-life.com.ua/]ВЪЕЗД В УКРАИНУ ДЛЯ РОССИЯН С 1 ЯНВАРЯ 2024 ГОДА [/url]

    9)[url=https://ukr-life.com.ua/]НОВЫЕ ТАРИФЫ 2024 ГОДА ВОДАФОН (VODAFONE) В УКРАИНЕ [/url]

    10)[url=https://ukr-life.com.ua/]ПЕНСІЇ ВІЙСЬКОВИМ ПЕНСІОНЕРАМ УКРАЇНИ В 2024 РОЦІ [/url]

    Всегда рады помочь Вам! С уважением, команда Ukr-life

    А вот еще подборка новостей:

    [url=https://ukr-life.com.ua/]xsport biss ключ 2024[/url]

    [url=https://ukr-life.com.ua/]осенний призыв[/url]

    [url=https://ukr-life.com.ua/]когда будет сильний мороз в Украине в 2024 году[/url]

    [url=https://ukr-life.com.ua/]детские выплаты[/url]

    [url=https://ukr-life.com.ua/]учет в центре занятости[/url]

    [url=https://ukr-life.com.ua/]пенсия по инвалидности 3 группа 2024 украина[/url]

    [url=https://ukr-life.com.ua/]последние новости о соц выплатах малообеспеченным на детей в Украине[/url]

    [url=https://ukr-life.com.ua/]мапа україни супутникова[/url]

    [url=https://ukr-life.com.ua/]неработающая мать одиночка[/url]

    [url=https://ukr-life.com.ua/]тарифы на Киевстар в Украине[/url]

    [url=https://ukr-life.com.ua/]посевной календарь на 2024 год для украины[/url]

    [url=https://ukr-life.com.ua/]негосударственные вузы Киева[/url]

    [url=https://ukr-life.com.ua/]последние новости о индексации зарплаты учителям Украины в 2024 году[/url]

    [url=https://ukr-life.com.ua/]зимние каникулы украина[/url]

    [url=https://ukr-life.com.ua/]каникулы зимние 2024[/url]

    [url=https://ukr-life.com.ua/]рейтинг смартфонов 2024 в Украине до 10000 грн[/url]

    [url=https://ukr-life.com.ua/]тарифы водафон ред экстра с[/url]

    [url=https://ukr-life.com.ua/]как настроить каналы на спутнике правильно[/url]

    [url=https://ukr-life.com.ua/]повышение пенсий военным пенсионерам в украине в 2024 году[/url]

    [url=https://ukr-life.com.ua/]посевной календарь для Украины Харьковской области по месяцам[/url]

    [url=https://ukr-life.com.ua/]виробничий календар на 2024 рік (україна)[/url]

    [url=https://ukr-life.com.ua/]будет ли выпускной в 2024 году[/url]

    [url=https://ukr-life.com.ua/]рейтинг самых богатых украинцев[/url]

    [url=https://ukr-life.com.ua/]штраф за неоформленного продавца[/url]

    [url=https://ukr-life.com.ua/]дородовые выплаты 2024 украина неработающим[/url]

    [url=https://ukr-life.com.ua/]предсказания Кейси на 2024 год для Украины[/url]

    [url=https://ukr-life.com.ua/]прогноз погоды на март 2024[/url]

    [url=https://ukr-life.com.ua/]настройка спутника украина[/url]

    [url=https://ukr-life.com.ua/]причины остановки тс 2024[/url]

    [url=https://ukr-life.com.ua/]астрологи о зеленском[/url]

    [url=https://ukr-life.com.ua/]в какие дни можно венчаться в 2024 году[/url]

    [url=https://ukr-life.com.ua/]как позвонить живому оператору Киевстар[/url]

    [url=https://ukr-life.com.ua/]прогноз доллара на 2024 год в Украине[/url]

    [url=https://ukr-life.com.ua/]прогноз на июль[/url]

    [url=https://ukr-life.com.ua/]зарплата медсестры 2024 украина[/url]

    [url=https://ukr-life.com.ua/]зарплата пенитенциарной службы Украине 2024[/url]

    [url=https://ukr-life.com.ua/]календарь клева рыбы на 2024 год украина[/url]

    [url=https://ukr-life.com.ua/]детские выплаты в Украине, изменения[/url]

    [url=https://ukr-life.com.ua/]рыболовный календарь 2024[/url]

    [url=https://ukr-life.com.ua/]день учителя 2024 украина дата[/url]

    [url=https://ukr-life.com.ua/]алименты 2024 украина калькулятор[/url]

    [url=https://ukr-life.com.ua/]водафон смартфон на месяц[/url]

    [url=https://ukr-life.com.ua/]безвизовые страны для граждан Украины в 2024 году[/url]

    [url=https://ukr-life.com.ua/]настройки спутниковых каналов[/url]

    [url=https://ukr-life.com.ua/]астрологический прогноз на 2024 год для Украины от экстрасенсов[/url]

    [url=https://ukr-life.com.ua/]прием платежей PayPal в Украине[/url]

    [url=https://ukr-life.com.ua/]460 киевстар оператор[/url]

    [url=https://ukr-life.com.ua/]посевной календарь украина 2024[/url]

    [url=https://ukr-life.com.ua/]зима 2024 прогноз[/url]

    [url=https://ukr-life.com.ua/]новинки украинской музыки 2024[/url]

  9. Приветствую Вас товарищи!

    Наша газета представлена на рынке Украниы больше 5 лет. За это время у нас получилось вырости из небольшой региональной газеты в полноценное интернет СМИ.

    На сегодняшний день нас изучают более миллиона читателей каждый месяц. Вот несколько особо актуальных новостей на сегодня:

    1)Посадові оклади на 2024 рік в Україні

    2)Зарплата педагогам у 2024 році в Україні

    3)Яка будет мінімальна пенсія на 2024 рік в Україні

    4)Допомога малозабезпеченим у 2024 році в Україні

    5)Декретні виплати 2024 в Україні

    6)Налаштування каналів супутникового телебачення на 2024 рік в Україні

    7)Військові пенсії в 2024 році в Україні

    Заходите к нам и получайте информацию из первых рук. Только самая свежая информация из первоисточника, свежие данные и актуальные новости.

    С уажением редакция газеты "Сильная Украина"

    день працівника дошкільної освіти 2024

    адресная помощь переселенцам 2024 форум

    закон про авто на польській реєстрації 2024

    трудовий кодекс україни 2024

    погода на липень, 2024

    коли прийде весна в 2024 році в Україну

    ставки єдиного податку на 2024 рік

    сплата ЄСВ в 2024 році

    скачати календар українською

    малюнки до нового року 2024

    посівний календар на 2024 рік таблиця скачати

    теми першого уроку 2024

    коли закінчиться мобілізація

    пророцтва для україни на 2024 рік

    погода з 1 вересня

    форум пенсіонерів мвс

    розрахунок лікарняних по вагітності та пологах 2024

    предродовые выплаты

    тарифна сітка 2022-2024

    календар стрижок на листопад 2024

    яка сума дородових виплат непрацюючим 2024

    один неоподаткований мінімум 2024

    мольфари про війну 2024

    предсказания для україни на 2024 рік

    фінансовий гороскоп Рака на 2024 рік

    квед україна 2024

    сайт бухгалтерів бюджетних організацій

    карта бойових дій 23 вересня 2024

    индекс инфляции украина

    церковний календар на вересень 2024

    помощь при рождении ребенка 2024 украина

    трудовой кодекс украины 2024

    церковні свята в 2024 році в Україні

    зарплата медикам 2024 украина

    що чекає україну екстрасенси

    система конкурс 2024

    церковні свята грудень 2024

    свята у жовтні 2024

    прогноз погоди у Львові на 2024 рік

    дородовые выплаты 2024 украина работающим

    лунний календар стрижок на лютий 2024

    квэд украина 2024

    риболовний календар 2024

    налаштування каналів супутникового телебачення на 2024 рік

    поднятие зарплаты полиции в 2024

    з днем бабусь і дідусів 2024

    структура 2024-20 навчального року лист мон

    когда благовещение в 2024 году в украине

    новинки української музики 2024

    норма тривалості робочого часу 2024 таблиця

Оставьте комментарий!

Используйте нормальные имена.

Имя и сайт используются только при регистрации

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email. При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д., а также подписку на новые комментарии.

(обязательно)