使用 pyautogui 移动到活动屏幕上的搜索文本

新手上路,请多包涵

我正在尝试制作一个在网页上搜索文本的程序,然后在找到后将鼠标光标放在突出显示的文本上。这可能使用 pyautogui 吗?如果是这样,如何。如果没有,是否还有其他替代方法可以做到这一点?

示例代码如下:

 import webbrowser
import pyautogui

var = 'Filtered Questions'
webbrowser.open('https://stackexchange.com/')
time.sleep(2)

pyautogui.hotkey('ctrl', 'f')
pyautogui.typewrite(var)
#code to place mouse cursor to the occurrence of var

我宁愿不使用 pyautogui.moveTo() 或 pyautogui.moveRel() 因为我在网站上搜索的文本不是静态的。当网页加载时,搜索文本的位置会发生变化。任何帮助将不胜感激。

原文由 ElectroMotiveHorse 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

我在研究这个话题时偶然发现了这个问题。基本上答案是否定的。 “要点:

  1. Pyautogui 可以选择使用图像进行搜索。例如,您可以使用它来截取您想要查找的所有文本并保存为单独的文本文件,然后使用它来动态搜索它并将鼠标移到那里/单击/做任何您需要的事情。但是,如 文档 中所述,每次搜索需要 1-2 秒,这是相当不切实际的。

  2. 在某些情况下,但并非总是如此,在网站上使用 ctrl+f 并搜索文本会滚动,因此结果位于页面的中间(垂直)。然而,这依赖于关于要搜索的文本在哪里的一些重大影响。如果它位于页面顶部,您显然无法使用该方法,就像它位于底部一样。

如果您尝试自动点击并拥有可区分名称的链接,我的建议是解析源代码并人为地点击链接。否则,您最好使用像 blue prism 这样的自动化套件。

原文由 S. L. 发布,翻译遵循 CC BY-SA 4.0 许可协议

是的,您可以这样做,但您还需要 Tesseract(和 Python 模块 pytesseract)进行文本识别和 PIL 进行屏幕截图。

然后执行以下步骤:

  1. 打开页面
  2. 打开并执行搜索(使用 pyautogui 的 ctrl+f)- 视图更改为第一个结果
  3. 截取屏幕截图(使用 PIL)
  4. 将图像转换为文本和数据(使用 Tesseract)并找到文本和位置
  5. 使用pyautogui移动鼠标点击

以下是获取图像和相关数据所需的代码:

 import time
from PIL import ImageGrab  # screenshot

import pytesseract
from pytesseract import Output
pytesseract.pytesseract.tesseract_cmd = (r"C:\...\AppData\Local\Programs\Tesseract-OCR\tesseract") # needed for Windows as OS

screen =  ImageGrab.grab()  # screenshot
cap = screen.convert('L')   # make grayscale

data=pytesseract.image_to_boxes(cap,output_type=Output.DICT)

print(data)

data ,您可以找到移动鼠标并单击文本所需的所有必需信息。

这种方法的缺点是资源消耗 OCR 部分,在较慢的机器上需要几秒钟。

原文由 Ulrich 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进