python-3.x 使用pyautogui移动到活动屏幕上的搜索文本

qncylg1j  于 2022-12-27  发布在  Python
关注(0)|答案(5)|浏览(485)

我正在试着做一个程序,在网页上搜索文本,然后在找到文本后将鼠标光标放在高亮显示的文本上。使用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(),因为我在网站上搜索的文本不是静态的。当网页加载时,搜索文本的位置会发生变化。任何帮助都将不胜感激。

6g8kf2rb

6g8kf2rb1#

是的,您可以这样做,但是您还需要Tesseract(和Python模块pytesseract)用于文本识别,以及PIL用于截图。
然后执行以下步骤:
1.打开页面
1.打开并执行搜索(在pyautogui中使用ctrl + f)-视图更改为第一个结果
1.截图(带PIL)
1.将图像转换为文本和数据(与Tesseract),并找到文本和位置
1.使用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部分消耗资源,在较慢的机器上需要几秒钟的时间。

2sbarzqh

2sbarzqh2#

当您使用Chrome或Chromium作为浏览器时,使用ONLY pyautogui有一种更简单、更稳定的方法:
1.使用pyautogui执行Crtl + F
1.执行Ctrl + Enter以“单击”搜索结果/打开与结果相关的链接
对于其他浏览器,你必须弄清楚是否也存在键盘快捷键。

8iwquhpp

8iwquhpp3#

我在研究课题时偶然发现了这个问题,基本上答案是否定的。“要点:
1)Pyautogui有一个使用图片搜索的选项。使用这个选项,你可以截图所有你想要查找的文本,并保存为单独的文本文件,然后使用它来动态搜索,并移动鼠标到那里/单击/做任何你需要做的事情。然而,正如docs中所解释的,每次搜索需要1-2秒,这是相当不实用的。
2)在某些情况下,但并不总是这样,在网站上使用ctrl+f搜索文本时,结果会滚动到页面的中间(垂直)。然而,这依赖于一些关于文本搜索位置的重要暗示。如果文本在页面的顶部,你显然不能使用这种方法,就像文本在页面底部一样。
如果你想让点击自动化,并让链接有不同的名字,我的建议是解析源代码并人工点击链接,否则你最好使用blue prism这样的自动化套件。

cqoc49vn

cqoc49vn4#

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

41zrol4v

41zrol4v5#

如果你是一个新手,正在寻找如何在屏幕上的任何地方找到一串文本,并在谷歌搜索中偶然发现了这个老问题,你可以使用我在自己的项目中使用过的以下代码片段(它将一串原始文本作为输入,如果在屏幕上找到文本,则返回坐标,如果没有,则返回None):

import pyautogui
import pytesseract
import cv2
import numpy as np

# In case you're on Windows and pytesseract doesn't
# find your installation (Happened to me)
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

def find_coordinates_text(text, lang='en'):
    # Take a screenshot of the main screen
    screenshot = pyautogui.screenshot()

    # Convert the screenshot to grayscale
    img = cv2.cvtColor(np.array(screenshot), cv2.COLOR_RGB2GRAY)

    # Find the provided text (text) on the grayscale screenshot 
    # using the provided language (lang)
    data = pytesseract.image_to_data(img, lang=lang, output_type='data.frame')

    # Find the coordinates of the provided text (text)
    try:
        x, y = data[data['text'] ==
                    text]['left'].iloc[0], data[data['text'] == text]['top'].iloc[0]

    except IndexError:
        # The text was not found on the screen
        return None

    # Text was found, return the coordinates
    return (x, y)

用法:

text_to_find = 'Filtered Questions'
coordinates = find_coordinates_text(text_to_find)

相关问题