Рубрики
Без рубрики

Автоматизация сайта с Python, Firefox и Selenium

Получите практические, реальные навыки Python на наших ресурсах и пути

Автор оригинала: Mike Driscoll.

Соответствующее альтернативное название было бы: как управлять веб-страницей или проверить свой веб-сайт с Python. Недавно мне дали следующее задание:

1) Вход на сайт 2) Нажмите на панель инструментов и загрузите определенную форму поиска 3) Введите некоторые данные в одну из полей в форме и поиск 4), если найдете, нажмите другую кнопку 5) Повторите

Конечно, я должен был сделать все это с Python, моим любимым языком программирования. Моя первая мысль должна была использовать Механизировать Пакет, но, хотя я мог войти на сайт, используя это, я не смог загрузки его. Почему? Ну, к сожалению, вышеупомянутая панель инструментов была сделана с использованием JavaScript, и, казалось, также генерируют форму. По какой-то причине Python Port не поддерживает загрузку элементов JavaScript, хотя я узнал, что проект, основанный на плагине JavaScript, поэтому есть надежда, что это может в конечном итоге. Таким образом, я пошел искать другое решение и напомнил, что Selenium может соответствовать законопроекту. В конце концов, это работало довольно хорошо. Поскольку я не смогу показать вам, что я сделал именно потому, что это было для внутреннего проекта, вместо этого мы автоматизируем Gmail. Давайте возьмемся!

Что вам нужно,

  • Селен IDE Firefox плагин (который на самом деле набор плагинов)
  • Привязки Python для Selenium, которые можно найти на Pypi Или вы просто Easy_install

Автоматизация сайта

Я немного экспериментировал, пытаясь придумать хороший пример, где я бы вошел в Gmail или Yahoo, но у меня были проблемы с каждым. Кадры Gmail уникально названы каждый раз, когда вы войти, поэтому я не смог найти рамку, когда я бы запустил свой код. Yahoo как-то блокирует часть тела нового электронного письма от Selenium, поэтому я не смог записать то, что я набирал там. Как вы, вероятно, выяснили, я надеялся показать вам, как отправить кучу электронных писем в автоматизированном способе просто для этого для удовольствия. Ну что ж.

Вместо этого я решил получить немного мета и просто сценарий своего собственного контакта блога. Это работает достаточно хорошо для этого примера, но вы не можете представить форму из-за CAPTCHA. Однако это должно дать вам общую идею. Вот как вы идете об этом:

Шаг один: Откройте новый экземпляр Firefox, а затем запустите плагин Elenium IDE (меню инструментов, IDE Selenium) Шаг два: Перейдите на ваш сайт выбора и сделайте то, что хотите автоматизировать. В этом случае я нажал на мою ссылку контакта, а затем заполнил форму. (см. Скриншот ниже) Шаг три В окне селен IDE идите в Файл, экспортировать тестовый случай как и выберите Python 2 (Webdriver) Отказ Есть также Python 2 (пульт дистанционного управления), который вы также можете экспортировать, но вы не сможете запустить этот сценарий без дополнительного программного обеспечения. Шаг четвертый: Запустите скрипт веб-драйвера и посмотрите, работает ли он. Обычно я также экспортирую удаленный пульт, так как он помог мне понять некоторые из полевых имен или CSS, которые не имели сценария Web Driver. Например, в моем оригинальном проекте я не осознавал, что мне нужно было переключить кадры, пока не посмотрел в удаленный код.

Теперь давайте посмотрим на код, который селен IDE создан на основе моего глупого примера блога:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
import unittest, time, re

class BlogDriver(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(30)
        self.base_url = "http://www.blog.pythonlibrary.org/"
        self.verificationErrors = []
    
    def test_blog_driver(self):
        driver = self.driver
        driver.get(self.base_url + "/")
        driver.find_element_by_link_text("Contact the Author").click()
        driver.find_element_by_id("si_contact_name1").clear()
        driver.find_element_by_id("si_contact_name1").send_keys("Mike Driscoll")
        driver.find_element_by_id("si_contact_subject1").clear()
        driver.find_element_by_id("si_contact_subject1").send_keys("I love your blog!")
        driver.find_element_by_id("si_contact_message1").clear()
        driver.find_element_by_id("si_contact_message1").send_keys("Python rules and your website rocks!")
        driver.find_element_by_id("si_contact_captcha_code1").clear()
        driver.find_element_by_id("si_contact_captcha_code1").send_keys("22HU")
        driver.find_element_by_id("fsc-submit-1").click()
    
    def is_element_present(self, how, what):
        try: self.driver.find_element(by=how, value=what)
        except NoSuchElementException, e: return False
        return True
    
    def tearDown(self):
        self.driver.quit()
        self.assertEqual([], self.verificationErrors)

if __name__ == "__main__":
    unittest.main()

Как видите, IDE Selenium создал простой неотъемлемый скрипт. Если вы запустите его, загрузит новый экземпляр Firefox, и он заполнит все эти вещи и попытается отправить его. Конечно, вы получите ошибку с веб-сайта, поскольку CAPTCHA я записал, скорее всего, будет отличаться от того, который вы видите. Сценарий работает довольно быстро, и это забавно использовать Selenium, чтобы узнать о конвенциях по именованию веб-элемента других людей. В скрипте я создал для нашего внутреннего проекта, я удалил все не допущенные вещи и создал свой собственный класс, который зацикливается на целую кучу входов, чтобы посмотреть, чтобы мы могли посмотреть данные.

Одна вещь, которую Selenium не делает, на самом деле автоматизирует сам Firefox. Вы не можете сделать Selenium щелкнуть любой из меню Firefox или закладки. Однако, если все, что вам нужно сделать, это автоматизировать сайт, то это работает отлично! С другой стороны, если вам действительно нужно быть в состоянии щелкнуть меню Firefox и что-то не то, что вы можете посмотреть в Пакет SendKeys Отказ Это только для Windows, хотя. Сценарий селена должен работать на Windows, Linux или Mac.

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