【问题标题】:Move to searched text on active screen with pyautogui使用 pyautogui 移动到活动屏幕上的搜索文本
【发布时间】:2018-08-12 13:34:45
【问题描述】:

我正在尝试制作一个程序来搜索网页上的文本,然后在找到后将鼠标光标放在突出显示的文本上。这可能使用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() 因为我在网站上搜索的文本不是静态的。当网页加载时,搜索文本的位置会有所不同。任何帮助将不胜感激。

【问题讨论】:

    标签: python-3.x automation pyautogui


    【解决方案1】:

    是的,你可以这样做,但你还需要 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 部分在较慢的机器上需要几秒钟。

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        【解决方案3】:

        pyautogui 用于控制鼠标和键盘以及自动化其他 GUI 应用程序。如果您需要在网页上查找文本,您可能会寻找更好的用于抓取网页的选项。例如:Selenium

        【讨论】:

          【解决方案4】:

          当您使用 Chrome 或 Chromium 作为浏览器时,有一种更简单、更稳定的方法,只使用 pyautogui:

          1. 使用 pyautogui 执行 Crtl + F

          2. 执行 Ctrl + Enter 以“单击”搜索结果/打开与结果相关的链接

          对于其他浏览器,您必须澄清是否也存在键盘快捷键。

          【讨论】:

            猜你喜欢
            • 2018-10-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-01-22
            • 2019-05-11
            • 1970-01-01
            • 2012-07-31
            • 2020-09-09
            相关资源
            最近更新 更多