Может ли Pywinauto в качестве альтернативы WinAppDriver идеально завершить автоматизацию на стороне ПК? Без лишних слов, это мул или лошадь, выведите его на прогулку и докажите это!
Pywinauto — модуль, полностью построенный на Python, который можно использовать для автоматизации приложений с графическим интерфейсом в Windows.
в то же время,Он поддерживает операции с мышью и клавиатурой.,В дереве элементов управления более сложный интерфейс,Это может помочь нам завершить операцию автоматизации.
Адрес проекта:
Поддерживаемые приложения делятся на следующие 2 категории:
в
Серверная часть Win32 API — «win32».
Серверная часть MS UI Automation — «uia».
и WinAppDriver Аналогично, прежде чем писать скрипт автоматизации, нам необходимо получить элемент управленияиз Различные значения атрибутов
получатьэлемент управленияиметь 2 способы:
Встроенный объект окна 2 Любой метод может распечатать текущую страницу из элемента. управления Дерево
# Встроенный метод объекта окна печатает всю информацию в форме управления
# Способ первый:
объект формы
.print_control_identifiers()
# Способ 2
объект формы.dump_tree()
Есть также 2 часто используемых инструмента проверки, а именно: Inspect.exe, Spy++.
Мы используем WeChat на ПК для реализации функции автоматического обмена сообщениями. Перед фактической работой сначала необходимо установить среду.
pip3 install pywinauto
Сначала используйте инструмент проверки, чтобы определить значение атрибута серверной части приложения. Серверная часть WeChat на ПК — «uia».
Затем создайте экземпляр класса «Приложение».
Наконец, создайте объект приложения, используя встроенные функции объекта.
import pywinauto
from pywinauto.application import Application
# Получить объект приложения
# Выберите один из трех способов
# Способ первый: pid процесса приложения (соединение)
app = Application(backend='uia').connect(process=pid)
# Способ 2: Применить полный путь (соединение)
app = Application(backend='uia').connect(path="D:\Program Files (x86)\Tencent\WeChat\WeChat.exe")
# Способ 3: Открыть приложение (открыть)
app = Application(backend='uia').start('D:\Program Files (x86)\Tencent\WeChat\WeChat.exe')
Вышеуказанные 3 метода можно использовать по мере необходимости.
Получите список свойств формы с помощью инструмента проверки, а затем используйте объект приложения + свойства формы, чтобы получить объект формы домашней страницы WeChat.
Код реализации следующий:
from pywinauto.win32functions import SetFocus
# Получить объект окна
# По названию и имени класса Получить объект формы
self.weixin_pc_window = self.app.window(title=u"Вичат", class_name="WeChatMainWndForPC")
self.weixin_pc_window.set_focus()
Получите кнопку переключения чата слева, получите ее координаты и имитируйте нажатие, чтобы перейти на страницу списка чатов.
from pywinauto import mouse
def __get_element_postion(self, element):
"""Получить положение центральной точки элемента"""
# координаты элемента
element_position = element.rectangle()
# Вычислить положение центральной точки
center_position = (int((element_position.left + element_position.right) / 2),
int((element_position.top + element_position.bottom) / 2))
return center_position
def start(self):
# 1. Получите элемент переключения [Чат] слева.
chat_list_element =
self.weixin_pc_window.child_window(title="чат", control_type="Button")
# 2. Нажмите, чтобы войти в список чата.
mouse.click(button='left',
coords=
self.__get_element_postion(chat_list_element))
Получите элемент «Помощник по передаче файлов», щелкните, чтобы войти на страницу чата, найдите элемент поля ввода, используйте встроенный метод для ввода содержимого и, наконец, используйте клавиатуру для имитации нажатия клавиши «Ввод» для отправки сообщения.
from pywinauto import mouse
# 3. Нажмите【Помощник по передаче файлы】Войти на страницу чата
file_helper_element =
self.weixin_pc_window.child_window(title="Помощник по передаче файлов", control_type="ListItem")
mouse.click(button='left',
coords=
self.__get_element_postion(file_helper_element))
# 4. Получите элементы поля ввода и смоделируйте ввод.
edit_element =
self.weixin_pc_window.child_window(title=r"входить", control_type="Edit")
sleep(2)
# Введите контент
edit_element.type_keys("Синъань Го")
# Используйте клавиатуру для имитации возврата каретки, то есть: отправьте
send_keys('{ENTER}')
После завершения операции вы можете вызвать функцию kill() объекта приложения, чтобы закрыть процесс и освободить ресурсы.
def teardown(self):
"""Освободить ресурсы"""
# Завершить процесс, Освободить ресурсы
self.app.kill()
После описанных выше шагов мы завершили пример использования Pywinauto для автоматизации приложений на стороне ПК. На самом деле это также можно сделать с помощью WinAppDriver, но среда может быть более сложной. Оба инструмента могут выполнять автоматизацию приложений на стороне ПК, но. Лично я предпочитаю поведение Pywinauto.