Я использую PyChrome на Python для имитации событий клавиатуры, таких как keyDown, keyUp и keyPress, через протокол Chrome DevTools (CDP). Метод type работает нормально, но методы «вниз», «вверх» и «нажатие» работают не так, как ожидалось.
Проблема:
Я создал класс клавиатуры, который предоставляет несколько методов, таких как (вверх, нажатие, вниз, ввод).
В настоящее время ввод работает так, как я ожидал. Но вверх, нажатие или вниз не работает. Я пытался их устранить, но они работают неправильно.
[/code] Я создал класс клавиатуры, который предоставляет несколько методов, таких как (вверх, нажатие, вниз, ввод). В настоящее время ввод работает так, как я ожидал. Но вверх, нажатие или вниз не работает. Я пытался их устранить, но они работают неправильно. [code]class Keyboard: """Handles keyboard interactions on the page"""
def __init__(self, tab: Tab): self._tab = tab
def type(self, text: str): """Simulates typing text character by character.""" for char in text: # self._tab.call_method("Input.dispatchKeyEvent", type="keyDown", text=char) self._dispatch_key_event("keyDown", text=char)
for key in keys[:-1]: # Everything except the last key key_data = self._get_key_data(key) self._dispatch_key_event("keyDown", **key_data)
# Press the main key key_data = self._get_key_data(keys[-1]) # Last key in combination self._dispatch_key_event("keyDown", **key_data) self._dispatch_key_event("keyUp", **key_data)
for key in reversed(keys[:-1]): key_data = self._get_key_data(key) self._dispatch_key_event("keyUp", **key_data)
def _dispatch_key_event(self, event_type: str, **kwargs): """Dispatches a key event to the tab.""" print(f"Dispatching {event_type} with arguments: {kwargs}") self._tab.call_method( "Input.dispatchKeyEvent", type=event_type, _timeout=5, **kwargs )
def _get_key_data(self, key: str): """Helper method to retrieve the appropriate key data from the key mapping.""" normalized_key = self._normalize_key(key) key_data = key_mapping.get(normalized_key) if not key_data: print(f"Warning: Key '{key}' not found in key_mapping.") return key_data
@staticmethod def _normalize_key(key: str) -> str: """Normalizes key names for compatibility with the key mapping.""" key = key.capitalize() if key == "Ctrl": return "Control" elif key == "Cmd": return "Meta" # For Mac "Cmd" becomes "Meta" elif key == "Controlormeta": # Automatically use 'Meta' for Mac, 'Control' for Windows/Linux return "Meta" if sys.platform == "darwin" else "Control" return key [/code] Итак, если вы вызовете вот так -> Keyboard.press("Control+T"), ожидаемое поведение приведет к открытию новой вкладки справа. Но это не работает.