鱼C论坛

 找回密码
 立即注册
查看: 1906|回复: 12

[已解决]pyautogui 自动输入入文本不完整。

[复制链接]
发表于 2023-6-23 15:16:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import os
import pyautogui

pyautogui.FAILSAFE = True

os.system("start Notepad.exe")
pyautogui.sleep(2)
notepad = pyautogui.getWindowsWithTitle('Untitled - Notepad')[0]
notepad.maximize()
pyautogui.typewrite("Hello World!")  # 输入文本
pyautogui.sleep(2)
pyautogui.hotkey('ctrl', 'shift', 's')  # 快捷键保存
pyautogui.sleep(3)
pyautogui.click(68, 280)  # 点击File
pyautogui.sleep(3)
pyautogui.moveTo(917, 465)  # 鼠标移动到文件命名框,选择文件命名
pyautogui.mouseDown()
pyautogui.moveTo(172, 465)
pyautogui.mouseUp()
pyautogui.typewrite('Test.txt')  # 重命名
pyautogui.sleep(2)
pyautogui.click(742, 559)  # 点击Save
pyautogui.sleep(2)
notepad.close()  # 关闭Notepad
pyautogui.click(812, 571)  # 点击提示框的Save


如上代码:

(1)pyautogui.typewrite("Hello World!")  # 输入文本
        这一步,会出没有完整输入"Hello World!",就进行下一步。比如有时候保存好的文本里面就只有"hell"几个字母或者"Hellorld!"出现中间内容缺失,或者这种“Hellold!w Wor”顺序错乱,就很奇怪。
        而且在去掉后面的代码,等待"Hello World!"输入,输入内容不会错误,但是每次花费的时间不一样,有时候要等比较长的时间,
        有什么办法来等待确认pyautogui.typewrite("Hello World!")完整输入后,就自动进行后面的步骤呢?

(2)而且我还发现一个问题,当运行代码时电脑的输入法为微软自带的Chinese(Simplified,China)输入法时,pyautogui.typewrite("Hellow World!"),输出到notepad的内容会变成"Hello我 World!",
        中间的‘w’变成了中文"我"字,这是咋回事呢? 使用的输入法都是微软自带的English(United States)输入法和Chinese(Simplified,China)输入法.
       
最佳答案
2023-6-23 15:20:04
(1)pyautogui.typewrite("Hello World!") 的问题可能是由于键入速度较快导致的。默认情况下,typewrite 函数会快速地输入字符,并且没有内置的方法来等待键入动作完成后再继续。不过,你可以尝试增加每个按键的持续时间,通过使用 interval 参数来实现。例如:
pyautogui.typewrite("Hello World!", interval=0.1)
在这个例子中,每个字符之间的间隔被设置为 0.1 秒。你可以根据实际情况调整这个值,以确保完整地输入文本后再继续下一步操作。

另外,你还可以尝试使用 pyautogui.write 函数,它模拟了人类的输入速度。它会在键入动作完成后自动等待,然后再进行下一步操作。例如:
pyautogui.write("Hello World!")
你可以尝试使用 write 替代 typewrite,看看是否能确保完整输入后再进行后续操作。

(2)使用不同输入法时出现字符改变的问题可能与计算机的键盘设置和语言设置有关。不同的输入法可能以不同的方式解释按键,导致输入的字符不符合预期。

为了解决这个问题,你可以显式地设置键盘布局,以确保输入的一致性。你可以使用 pyautogui.press 函数在键入前切换到特定的键盘布局。例如,你可以在 typewrite 或 write 函数之前添加以下代码,切换到英文(美国)键盘布局:
pyautogui.press('shift')
这将模拟按下 Shift 键,这是在键盘布局之间切换的常见方式。在键入前调整键盘布局可以确保无论当前使用哪种输入法,输入的内容都是一致的。

以下是经过更新的代码示例,包含了上述建议:
import os
import pyautogui

pyautogui.FAILSAFE = True

os.system("start Notepad.exe")
pyautogui.sleep(2)
notepad = pyautogui.getWindowsWithTitle('Untitled - Notepad')[0]
notepad.maximize()
pyautogui.press('shift')  # 切换到英文(美国)键盘布局
pyautogui.write("Hello World!")  # 输入文本
pyautogui.sleep(2)
pyautogui.hotkey('ctrl', 'shift', 's')  # 快捷键保存
pyautogui.sleep(3)
pyautogui.click(68, 280)  # 点击File
pyautogui.sleep(3)
pyautogui.moveTo(917, 465)  # 鼠标移动到文件命名框,选择文件命名
pyautogui.mouseDown()
pyautogui.moveTo(172, 465)
pyautogui.mouseUp()
pyautogui.typewrite('Test.txt')  # 重命名
pyautogui.sleep(2)
pyautogui.click(742, 559)  # 点击Save
pyautogui.sleep(2)
notepad.close()  # 关闭Notepad
pyautogui.click(812, 571)  # 点击提示框的Save
你可以尝试运行这段代码,看看是否解决了你遇到的问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-23 15:17:16 | 显示全部楼层

回帖奖励 +5 鱼币

(1)在使用pyautogui.typewrite("Hello World!")输入文本之后,可以使用pyautogui.press('enter')命令来模拟按下回车键,等待确认输入完整。这样可以确保在输入完成之后才会进行后续的操作。
修改代码如下:
pyautogui.typewrite("Hello World!")
pyautogui.press('enter')

这样,当输入完整的"Hello World!"之后,会自动按下回车键。

(2)在使用pyautogui.typewrite("Hello World!")输入文本之前,可以使用pyautogui.hotkey('shift', 'alt')命令来切换到英文输入法。这样可以避免中文输入法导致的问题。

修改代码如下:
pyautogui.hotkey('shift', 'alt')
pyautogui.typewrite("Hello World!")

这样在输入文本之前会切换到英文输入法,确保输出的内容不会受到中文输入法的影响。如果需要切换回中文输入法,可以使用pyautogui.hotkey('shift', 'ctrl')命令。

点评

我很赞同!: 5.0
我很赞同!: 5
  发表于 2023-6-23 15:35
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-23 15:17:47 | 显示全部楼层

回帖奖励 +5 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-23 15:18:04 | 显示全部楼层
对于第一个问题,您可以使用pyautogui.press('enter')来模拟按下回车键,等待文本完全输入后再进行后续操作。例如,在pyautogui.typewrite("Hello World!")之后,添加以下代码:


pyautogui.press('enter')

这样,程序将按下回车键确认文本输入完成后,再执行后面的步骤。

至于第二个问题,输入法切换可能会导致在使用pyautogui.typewrite()时出现不符合预期的结果。一种解决方法是在输入文本之前将输入法切换为英文输入法。您可以尝试使用以下代码:
# 在输入文本之前切换到英文输入法
pyautogui.hotkey('alt', 'shift')

# 输入文本
pyautogui.typewrite("Hello World!")

# 切换回原来的输入法
pyautogui.hotkey('alt', 'shift')

这段代码中,我们使用pyautogui.hotkey('alt', 'shift')模拟按下"Alt + Shift"组合键,这是切换输入法的快捷键。在输入文本之前和之后都进行了输入法切换,确保输入法在输入文本过程中始终为英文输入法。

希望以上解决方案能够解决您的问题。如果您有任何其他疑问,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-23 15:20:04 | 显示全部楼层    本楼为最佳答案   
(1)pyautogui.typewrite("Hello World!") 的问题可能是由于键入速度较快导致的。默认情况下,typewrite 函数会快速地输入字符,并且没有内置的方法来等待键入动作完成后再继续。不过,你可以尝试增加每个按键的持续时间,通过使用 interval 参数来实现。例如:
pyautogui.typewrite("Hello World!", interval=0.1)
在这个例子中,每个字符之间的间隔被设置为 0.1 秒。你可以根据实际情况调整这个值,以确保完整地输入文本后再继续下一步操作。

另外,你还可以尝试使用 pyautogui.write 函数,它模拟了人类的输入速度。它会在键入动作完成后自动等待,然后再进行下一步操作。例如:
pyautogui.write("Hello World!")
你可以尝试使用 write 替代 typewrite,看看是否能确保完整输入后再进行后续操作。

(2)使用不同输入法时出现字符改变的问题可能与计算机的键盘设置和语言设置有关。不同的输入法可能以不同的方式解释按键,导致输入的字符不符合预期。

为了解决这个问题,你可以显式地设置键盘布局,以确保输入的一致性。你可以使用 pyautogui.press 函数在键入前切换到特定的键盘布局。例如,你可以在 typewrite 或 write 函数之前添加以下代码,切换到英文(美国)键盘布局:
pyautogui.press('shift')
这将模拟按下 Shift 键,这是在键盘布局之间切换的常见方式。在键入前调整键盘布局可以确保无论当前使用哪种输入法,输入的内容都是一致的。

以下是经过更新的代码示例,包含了上述建议:
import os
import pyautogui

pyautogui.FAILSAFE = True

os.system("start Notepad.exe")
pyautogui.sleep(2)
notepad = pyautogui.getWindowsWithTitle('Untitled - Notepad')[0]
notepad.maximize()
pyautogui.press('shift')  # 切换到英文(美国)键盘布局
pyautogui.write("Hello World!")  # 输入文本
pyautogui.sleep(2)
pyautogui.hotkey('ctrl', 'shift', 's')  # 快捷键保存
pyautogui.sleep(3)
pyautogui.click(68, 280)  # 点击File
pyautogui.sleep(3)
pyautogui.moveTo(917, 465)  # 鼠标移动到文件命名框,选择文件命名
pyautogui.mouseDown()
pyautogui.moveTo(172, 465)
pyautogui.mouseUp()
pyautogui.typewrite('Test.txt')  # 重命名
pyautogui.sleep(2)
pyautogui.click(742, 559)  # 点击Save
pyautogui.sleep(2)
notepad.close()  # 关闭Notepad
pyautogui.click(812, 571)  # 点击提示框的Save
你可以尝试运行这段代码,看看是否解决了你遇到的问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-23 15:22:35 | 显示全部楼层
青出于蓝 发表于 2023-6-23 15:18
对于第一个问题,您可以使用pyautogui.press('enter')来模拟按下回车键,等待文本完全输入后再进行后续操作 ...

你也用GPT了?
(没有别的意思,我也在用)

点评

我很赞同!: 5.0
我很赞同!: 5
不是自动化,有时会用  发表于 2023-6-23 15:33
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-23 15:32:05 | 显示全部楼层
青出于蓝 发表于 2023-6-23 15:18
对于第一个问题,您可以使用pyautogui.press('enter')来模拟按下回车键,等待文本完全输入后再进行后续操作 ...

谢谢,在输入内容时,还是会出现乱序。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-23 15:32:50 | 显示全部楼层
陶远航 发表于 2023-6-23 15:20
(1)pyautogui.typewrite("Hello World!") 的问题可能是由于键入速度较快导致的。默认情况下,typewrite  ...

谢谢,添加interval=0.1后输入正常了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-23 15:33:53 | 显示全部楼层
liuhongrun2022 发表于 2023-6-23 15:22
你也用GPT了?
(没有别的意思,我也在用)

没有啊,我是新手
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-23 15:34:00 | 显示全部楼层
青出于蓝 发表于 2023-6-23 15:18
对于第一个问题,您可以使用pyautogui.press('enter')来模拟按下回车键,等待文本完全输入后再进行后续操作 ...

https://fishc.com.cn/thread-229960-1-1.html

评个分呗 差一点精华了

点评

我很赞同!: 5.0
我很赞同!: 5
  发表于 2023-6-23 15:34
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-11 22:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表