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

时间:2018-03-04 22:39:41

标签: python-3.x automation 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(),因为我在网站上搜索的文本不是静态的。搜索文本的位置在网页加载时会有所不同。任何帮助都将受到高度赞赏。

4 个答案:

答案 0 :(得分:1)

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

然后执行以下步骤:

  1. 打开页面
  2. 打开并执行搜索(ctrl+f with pyautogui) - 视图更改为第一个结果
  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 部分,这在较慢的机器上需要几秒钟。

答案 1 :(得分:1)

当您使用 Chrome 或 Chromium 作为浏览器时,仅使用 pyautogui 会更容易、更稳定:

  1. 使用 pyautogui 执行 Crtl + F

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

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

答案 2 :(得分:0)

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

1)Pyautogui可以选择使用图像进行搜索。例如,使用此功能,您可以对要查找的所有文本进行屏幕截图,并另存为单个文本文件,然后使用它来动态搜索并在其中单击鼠标/单击/执行所需的任何操作。但是,如docs中所述,每次搜索都需要1-2秒,这是不切实际的。

2)在某些情况下(但并非总是如此),在网站上使用ctrl + f并搜索文本将滚动,以使结果位于页面的中间(垂直)。但是,这取决于要搜索文本的位置的一些重大含义。如果它在页面顶部,则显然将无法使用该方法,就像在页面底部一样。

如果您要尝试自动执行点击操作并使用名称可区分的链接,我的建议是解析源代码并人为地单击链接。否则,使用蓝色棱镜等自动化套件可能会更好。

答案 3 :(得分:0)

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