Получить ТОЧКУ в середине стрелки вниз VScroll в окне списка пакетов Wireshark

#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) , потому что прямоугольник всегда возвращается в экранных координатах.