【问题标题】:pyautogui typewrite() writes to shell instead of clicked input/documentpyautogui typewrite() 写入 shell 而不是点击输入/文档
【发布时间】:2019-09-11 21:55:18
【问题描述】:

我关注Chapter 18 of Automate the Boring Stuff with Python。我在 OS X 上。

我正在尝试使用pyautogui 单击文本输入或文本文档,然后输入文本。

我在 shell 中输入以下内容((370, 80) 是我的 Chrome 地址栏的坐标):

pyautogui.click(370,80); pyautogui.typewrite('Hello world!')

click() 似乎没有按预期工作。当我单击输入时,它会突出显示输入中的文本,但即使我在单击后手动输入,文本也会显示在 shell 中。运行以上行的结果如下图所示:

positionmoveTomoveReldragTo 等其他方法按预期工作。

如果我运行time.sleep(5); pyautogui.typewrite('test') 并在线程休眠时手动单击文本文档或输入,则可以根据需要输入文本。

可能是什么问题?

【问题讨论】:

  • 您可能需要稍许延迟才能让 Chrome 窗口有时间来到最前面并开始接收键盘事件。
  • @jasonharper 我已经尝试过pyautogui.click(370,80); time.sleep(3); pyautogui.typewrite('Hello world!'),并且在延迟 3 秒后,文本仍会写入 shell。
  • 延迟期间Chrome真的走到了前面吗?
  • @jasonharper 它没有。地址栏中的文本会突出显示,但 shell 窗口仍保留在 Chrome 的前面。
  • 不确定这是否相关,但是当我运行 pyautogui 命令时,我的 Dock 中会出现一个 Python 图标。右键单击此图标会弹出一个菜单,显示应用程序没有响应。但是,我的 pyautogui 和其他 Python 命令仍然可以正常工作(除了上述问题)。

标签: python pyautogui


【解决方案1】:

原来在 OSX 中有一个与 click() 相关的错误。这是解决方案:

  1. 打开 pyautogui 包目录中的 __init__.py 文件(使用 this answer 查找 Python 包的位置。
  2. 在第 510 行(在 click() 函数中),将第四个参数更改为 platformModule._multiClick(),从 3 更改为 clicks(无引号)。所以正确的调用是platformModule._multiClick(x, y, button, clicks)
  3. 保存编辑后的文件。

有一个open PR 来解决这个问题。

【讨论】:

    猜你喜欢
    • 2019-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    相关资源
    最近更新 更多