English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Пример автоматического нажатия после входа в систему с использованием python и selenium

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

Сначала определите требования:   

  1. Автоматически открыть веб-страницу   
  2. Войти в аккаунт 
  3. Каждый определенный интервал времени кликайте в фиксированной области

Я думаю о двух方案х, sikuli или python + selenium. Преимущество sikuli в том, что логические операции просты и прямолинейны, используется изображение в качестве индикатора, недостаток в том, что окно должно быть фиксированным и не может работать в фоновом режиме. Selenium несколько сложнее, но быстрее в работе, окно может быть закрываемым.

Просто запишу короткий пример использования Python + selenium.

Используемые версии - Python 3.3 и selenium2, среда Windows (сейчас поддерживается 3.0 и выше, множество форумов и блогов не обновлены).

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

Теперь установим selenium, если pip уже установлен. Просто выполните команду.

pip install -U selenium

Другой способ,https://pypi.python.org/packages/source/s/selenium/selenium-2.52.0.tar.gzЗагрузите и распакуйте. Вот краткое описание версии для Windows, на Unix также差不多, используйте Wget для загрузки и установки.

Использование команды (setup обычно используется для установки第三方模块):

cd c:\Python3\xxxx
python setup.py install

During the installation process, ImportError: No module named setuptools may occur, which is because the setuptools module is missing, as Python does not install it by default.

inhttp://pypi.python.org/pypi/setuptoolsThe above provides installation packages and guides for various systems. For Windows systems, downloadhttps://bootstrap.pypa.io/ez_setup.pyAutomated installation script.

Run:

python ez_setup.py

After completion, install selenium.

Here I will give a simple explanation of the process using my own example.

First step is to complete the opening of the browser.

Selenium2 combines selenium and webdriver, directly imports the corresponding drivers for each browser, and it can be opened. Note that the Chrome driver may need to be installed separately.

from selenium import webdriver
browser = webdriver.Firefox()
browser.get('https://www.xxx.com')

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

  1. find_element_by_id
  2. find_element_by_name
  3. find_element_by_xpath
  4. find_element_by_link_text
  5. find_element_by_partial_link_text
  6. find_element_by_tag_name
  7. find_element_by_class_name
  8. find_element_by_css_selector

В котором ID наиболее эффективен и удобен, поэтому его стоит учитывать в первую очередь. После выбора элемента можно использовать API WebDriver для имитации ввода клавиатуры и кликов мыши. Код следующий:

username="qun" 
passwd="passwd"
browser = webdriver.Firefox()
browser.get('https://www.xxx.com')
browser.implicitly_wait(10)
elem=browser.find_element_by_id("loginFormUserName")
elem.send_keys(username)
elem=browser.find_element_by_id("loginFormPassword")
elem.send_keys(passwd)
elem=browser.find_element_by_id("loginFormSubmit")
elem.click()

обычно после входа в систему страница перебрасывается на новую страницу, как получить новую страницу? Здесь есть концепция хендла окна, через переключение хендла окна можно выполнить это. Внимание! Иногда элементы находятся в фрейме, и также необходимо использовать switch для переключения. Здесь出现 функция wait (как и выше), так как загрузка страницы требует времени, и возможно, что элемент загрузится только после клика, это будет подробно объяснено в следующем разделе.

browser.implicitly_wait(10)
browser.switch_to_window(browser.window_handles[-1])

затем выбирается область для клика, здесь используется xpath для определения, так как в процессе автоматизации тестирования элементы могут не определяться через id, name и другие методы (некоторые даже не пишут, любят table в table, я что могу), xpath и здесь приходит на помощь. Часто используемый способ ленивого подхода - установить плагин xpath в Firefox, щелкнуть правой кнопкой мыши, чтобы получить его. Здесь это не рассматривается, так как это не рекомендуется, использование плагинов может привести к тому, что код будет наполнен такими вещами:   

XPath(/html/body/div/div[3]/div[2]/div[4]/p[2])

не стоит использовать родительские элементы для определения элементов, если это не совершенно необходимо, лучше использовать характеристики элементов, например, name кнопки.

или определение подэлемента через родительский элемент.

username =browser.find_element_by_xpath("//input[@name='username']")
clear_button = browser.find_element_by_xpath("//form[@id='loginForm']/input[4]")

код如下, часто出现的 использование By требует импорта пакета.

from selenium.webdriver.common.by import By

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

for i in range(100):
  elem=WebDriverWait(browser, 30).until(
    lambda x:x.find_element_by_xpath("//table[@class='aaa']"/td[1]))
  elem.click()
  time.sleep(20)
  print ("click",i)

Затем стоит упомянуть функцию wait, в selenium2 ожидание делится на два типа: ожидание по умолчанию и ожидание по запросу.  

Постоянное ожидание

Постоянное ожидание - это明确 ожидание的出现 элемента или условия клика элемента и т.д., если не найти, то ждать постоянно,除非 в течение установленного времени не было найдено, в этом случае跳出 Exception.

element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "myDynamicElement"))
  )

Ожидание по умолчанию

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

browser.implicitly_wait(10) # секунд

Разница между ними заключается в том, что один управляет объектом ожидания напрямую, а другой передает это WebDriver.

Конечно, можно просто ждать с помощью sleep. Не забудьте импортировать пакет time.

time.sleep(20)

Здесь просто показан пример использования, есть много мест для улучшения, функции не обернуты, не используются многоthreaded concurrency для выполнения множественных примеров. Будет улучшено по мере необходимости.

Вот и все, что есть в этой статье, надеюсь, это поможет вам в изучении, также希望大家多多支持呐喊教程。

Декларация: содержание этой статьи предоставлено из Интернета, авторские права принадлежат их авторам, контент предоставлен пользователями Интернета в качестве добровольного вклада и загружен самостоятельно, этот сайт не обладает правами собственности, не был редактирован вручную и не несет ответственности за связанные с этим юридические последствия. Если вы обнаружите содержимое,涉嫌侵犯版权, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (во время отправки письма, пожалуйста, замените # на @) для подачи жалобы и предоставления соответствующих доказательств. Если обнаружено, что содержимое является нарушением, сайт немедленно удаляет涉嫌侵权的内容.

Рекомендуем к просмотру