@@ -563,30 +563,62 @@ async def _type_to_page(self, text: str):
563
563
564
564
# Type the text character by character to the focused element
565
565
for char in text :
566
- # Send keydown
567
- await cdp_session .cdp_client .send .Input .dispatchKeyEvent (
568
- params = {
569
- 'type' : 'keyDown' ,
570
- 'key' : char ,
571
- },
572
- session_id = cdp_session .session_id ,
573
- )
574
- # Send char for actual text input
575
- await cdp_session .cdp_client .send .Input .dispatchKeyEvent (
576
- params = {
577
- 'type' : 'char' ,
578
- 'text' : char ,
579
- },
580
- session_id = cdp_session .session_id ,
581
- )
582
- # Send keyup
583
- await cdp_session .cdp_client .send .Input .dispatchKeyEvent (
584
- params = {
585
- 'type' : 'keyUp' ,
586
- 'key' : char ,
587
- },
588
- session_id = cdp_session .session_id ,
589
- )
566
+ # Handle newline characters as Enter key
567
+ if char == '\n ' :
568
+ # Send proper Enter key sequence
569
+ await cdp_session .cdp_client .send .Input .dispatchKeyEvent (
570
+ params = {
571
+ 'type' : 'keyDown' ,
572
+ 'key' : 'Enter' ,
573
+ 'code' : 'Enter' ,
574
+ 'windowsVirtualKeyCode' : 13 ,
575
+ },
576
+ session_id = cdp_session .session_id ,
577
+ )
578
+ # Send char event with carriage return
579
+ await cdp_session .cdp_client .send .Input .dispatchKeyEvent (
580
+ params = {
581
+ 'type' : 'char' ,
582
+ 'text' : '\r ' ,
583
+ },
584
+ session_id = cdp_session .session_id ,
585
+ )
586
+ # Send keyup
587
+ await cdp_session .cdp_client .send .Input .dispatchKeyEvent (
588
+ params = {
589
+ 'type' : 'keyUp' ,
590
+ 'key' : 'Enter' ,
591
+ 'code' : 'Enter' ,
592
+ 'windowsVirtualKeyCode' : 13 ,
593
+ },
594
+ session_id = cdp_session .session_id ,
595
+ )
596
+ else :
597
+ # Handle regular characters
598
+ # Send keydown
599
+ await cdp_session .cdp_client .send .Input .dispatchKeyEvent (
600
+ params = {
601
+ 'type' : 'keyDown' ,
602
+ 'key' : char ,
603
+ },
604
+ session_id = cdp_session .session_id ,
605
+ )
606
+ # Send char for actual text input
607
+ await cdp_session .cdp_client .send .Input .dispatchKeyEvent (
608
+ params = {
609
+ 'type' : 'char' ,
610
+ 'text' : char ,
611
+ },
612
+ session_id = cdp_session .session_id ,
613
+ )
614
+ # Send keyup
615
+ await cdp_session .cdp_client .send .Input .dispatchKeyEvent (
616
+ params = {
617
+ 'type' : 'keyUp' ,
618
+ 'key' : char ,
619
+ },
620
+ session_id = cdp_session .session_id ,
621
+ )
590
622
# Add 18ms delay between keystrokes
591
623
await asyncio .sleep (0.018 )
592
624
@@ -1007,48 +1039,86 @@ async def _input_text_element_node_impl(
1007
1039
self .logger .debug (f'🎯 Typing text character by character: "{ text } "' )
1008
1040
1009
1041
for i , char in enumerate (text ):
1010
- # Get proper modifiers, VK code, and base key for the character
1011
- modifiers , vk_code , base_key = self ._get_char_modifiers_and_vk (char )
1012
- key_code = self ._get_key_code_for_char (base_key )
1042
+ # Handle newline characters as Enter key
1043
+ if char == '\n ' :
1044
+ # Send proper Enter key sequence
1045
+ await cdp_session .cdp_client .send .Input .dispatchKeyEvent (
1046
+ params = {
1047
+ 'type' : 'keyDown' ,
1048
+ 'key' : 'Enter' ,
1049
+ 'code' : 'Enter' ,
1050
+ 'windowsVirtualKeyCode' : 13 ,
1051
+ },
1052
+ session_id = cdp_session .session_id ,
1053
+ )
1013
1054
1014
- # self.logger.debug(f'🎯 Typing character {i + 1}/{len(text)}: "{char}" (base_key: {base_key}, code: {key_code}, modifiers: {modifiers}, vk: {vk_code})')
1055
+ # Small delay to emulate human typing speed
1056
+ await asyncio .sleep (0.001 )
1015
1057
1016
- # Step 1: Send keyDown event (NO text parameter)
1017
- await cdp_session .cdp_client .send .Input .dispatchKeyEvent (
1018
- params = {
1019
- 'type' : 'keyDown' ,
1020
- 'key' : base_key ,
1021
- 'code' : key_code ,
1022
- 'modifiers' : modifiers ,
1023
- 'windowsVirtualKeyCode' : vk_code ,
1024
- },
1025
- session_id = cdp_session .session_id ,
1026
- )
1058
+ # Send char event with carriage return
1059
+ await cdp_session .cdp_client .send .Input .dispatchKeyEvent (
1060
+ params = {
1061
+ 'type' : 'char' ,
1062
+ 'text' : '\r ' ,
1063
+ 'key' : 'Enter' ,
1064
+ },
1065
+ session_id = cdp_session .session_id ,
1066
+ )
1027
1067
1028
- # Small delay to emulate human typing speed
1029
- await asyncio .sleep (0.001 )
1068
+ # Send keyUp event
1069
+ await cdp_session .cdp_client .send .Input .dispatchKeyEvent (
1070
+ params = {
1071
+ 'type' : 'keyUp' ,
1072
+ 'key' : 'Enter' ,
1073
+ 'code' : 'Enter' ,
1074
+ 'windowsVirtualKeyCode' : 13 ,
1075
+ },
1076
+ session_id = cdp_session .session_id ,
1077
+ )
1078
+ else :
1079
+ # Handle regular characters
1080
+ # Get proper modifiers, VK code, and base key for the character
1081
+ modifiers , vk_code , base_key = self ._get_char_modifiers_and_vk (char )
1082
+ key_code = self ._get_key_code_for_char (base_key )
1030
1083
1031
- # Step 2: Send char event (WITH text parameter) - this is crucial for text input
1032
- await cdp_session .cdp_client .send .Input .dispatchKeyEvent (
1033
- params = {
1034
- 'type' : 'char' ,
1035
- 'text' : char ,
1036
- 'key' : char ,
1037
- },
1038
- session_id = cdp_session .session_id ,
1039
- )
1084
+ # self.logger.debug(f'🎯 Typing character {i + 1}/{len(text)}: "{char}" (base_key: {base_key}, code: {key_code}, modifiers: {modifiers}, vk: {vk_code})')
1040
1085
1041
- # Step 3: Send keyUp event (NO text parameter)
1042
- await cdp_session .cdp_client .send .Input .dispatchKeyEvent (
1043
- params = {
1044
- 'type' : 'keyUp' ,
1045
- 'key' : base_key ,
1046
- 'code' : key_code ,
1047
- 'modifiers' : modifiers ,
1048
- 'windowsVirtualKeyCode' : vk_code ,
1049
- },
1050
- session_id = cdp_session .session_id ,
1051
- )
1086
+ # Step 1: Send keyDown event (NO text parameter)
1087
+ await cdp_session .cdp_client .send .Input .dispatchKeyEvent (
1088
+ params = {
1089
+ 'type' : 'keyDown' ,
1090
+ 'key' : base_key ,
1091
+ 'code' : key_code ,
1092
+ 'modifiers' : modifiers ,
1093
+ 'windowsVirtualKeyCode' : vk_code ,
1094
+ },
1095
+ session_id = cdp_session .session_id ,
1096
+ )
1097
+
1098
+ # Small delay to emulate human typing speed
1099
+ await asyncio .sleep (0.001 )
1100
+
1101
+ # Step 2: Send char event (WITH text parameter) - this is crucial for text input
1102
+ await cdp_session .cdp_client .send .Input .dispatchKeyEvent (
1103
+ params = {
1104
+ 'type' : 'char' ,
1105
+ 'text' : char ,
1106
+ 'key' : char ,
1107
+ },
1108
+ session_id = cdp_session .session_id ,
1109
+ )
1110
+
1111
+ # Step 3: Send keyUp event (NO text parameter)
1112
+ await cdp_session .cdp_client .send .Input .dispatchKeyEvent (
1113
+ params = {
1114
+ 'type' : 'keyUp' ,
1115
+ 'key' : base_key ,
1116
+ 'code' : key_code ,
1117
+ 'modifiers' : modifiers ,
1118
+ 'windowsVirtualKeyCode' : vk_code ,
1119
+ },
1120
+ session_id = cdp_session .session_id ,
1121
+ )
1052
1122
1053
1123
# Small delay between characters to look human (realistic typing speed)
1054
1124
await asyncio .sleep (0.001 )
0 commit comments