#python #wireshark #pywinauto
#python #wireshark #pywinauto
Вопрос:
#!/usr/bin/env python
# # myGUI7.py # use pywinauto to start Wireshark
# Visual Studio Code is Run as Administrator
import os
import sys
import pywinauto
from pywinauto.application import Application
# which PyQt5 is needed to be imported?
#from PyQt5 import QtCore, QtWidgets
#from PyQt5.QtGui import *
#from PyQt5.QtWidgets import QAbstractSlider
def process_GUI(pname, fname):
# start Wireshark -- it uses Qt5, ergo backend = uia
app = Application(backend="uia").start(r"C:\Program Files\Wireshark\Wireshark.exe ")
if app.SoftwareUpdate.exists(timeout=5):
app.SoftwareUpdate.SkipThisVersion.click()
app.SoftwareUpdate.Wait_Not('visible') #make sure it is closed
##app['The Wireshark Network Analyzer'].print_control_identifiers()
# open any pcapng file
win = app["The Wireshark Network Analyzer"]
win.wait('ready', timeout=5)
win.type_keys('%F{ENTER}') # Alt F, Enter (it calls "amp;File->amp;Open" menu)
app.Dialog2.FilenameEdit.set_edit_text(pname fname)
app.Dialog2.Open4.click()
win = app[fname]
win.wait('ready', timeout=5)
##win.print_control_identifiers()
# get the Packet list window
PL = win["Packet list"] # it is a TreeView object
# how do I get the POINT in middle of Down arrow of vScroll on PL?
# = = = = = = =
if __name__ == '__main__':
# use path/file of any pcapng that has been saved
path_name = "C:\H_Paul\ws\"
file_name = "ws-aug22a_SOsample.pcapng"
guiReturn = process_GUI(path_name, file_name)
sys.exit(0)
Ответ №1:
Если ваша цель — прокрутить список пакетов вниз, вы можете использовать
# workaround for set_focus() failure on uia backend
app_win32 = Application(backend="win32").connect(path=r"wireshark.exe")
app_win32.window(best_match='Qt5QWindowIcon').set_focus()
PL.wheel_mouse_input(wheel_dist=-10) # negative wheel_dist means scroll down
или попробуйте PL.type_keys('{VK_DOWN}')
прокрутить список пакетов.
Значение IsScrollPatternAvailable
свойства списка пакетов (виджет QTreeView) false
по этой причине PL.scroll("down", "line", 1)
вызывает сообщение об ошибке «дерево»Списка пакетов «не прокручивается». Также inspect.exe не показывает полосу прокрутки среди дочерних элементов списка пакетов.
Кроме того, вы можете попробовать другой подход: получить нижние правые координаты списка пакетов, вычесть из них (5,5) или другую дельту и щелкнуть по этой точке. Что-то вроде (этот код просто демонстрирует идею, потому что отправляет щелчок в неправильные координаты в последней версии Wireshark, что может быть проблемой, связанной с Qt):
arrow_coords = (PL.rectangle().right - 5, PL.rectangle().bottom - 5)
for i in range(N):
PL.click_input(coords=arrow_coords)
Комментарии:
1. PL.type_keys(‘{VK_DOWN}’) завершается с ошибкой, с —>C:Program FilesPython38 lib site-packagespywinauto controls uiawrapper.py:415: Предупреждение о времени выполнения: окно не было сфокусировано из-за ошибки COMError: (-2147220991, ‘Событие не смогло вызвать ни один изпредупреждения подписчиков, (None, None, None, 0, None)).warn(‘Окно не было сфокусировано из-за ‘
2. Я перепроверил это и обнаружил, что
type_keys
этот подход работает только в том случае, если вы открываете окно Wireshark и нажимаете на виджет списка пакетов после запуска скрипта. Я обновил ответ и вставил в него обновленный код (используетwheel_mouse_input
), который работает для меня.3. Попробуйте
PL.click_input(coords=arrow_coords, absolute=True)
, потому что прямоугольник всегда возвращается в экранных координатах.