You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复Pandas+PyAutoGUI循环谷歌搜索代码:无法输入搜索内容

解决PyAutoGUI无法在Chrome搜索栏输入内容并循环搜索DataFrame元素的问题

问题描述

尝试编写循环,使用pandas和pyautogui库为DataFrame中的每个元素生成字符串并在谷歌搜索,但当前代码无法在搜索栏中输入任何内容,原代码如下:

import pyautogui
import pandas as pd 

df = pd.DataFrame(["apple", "orange", "lemon", "banana"])

def test():
    for index in range(len(df)):
        string = df.loc[index]
        print(string)
        chrome = pyautogui.locateOnScreen("c.png")
        pyautogui.click(chrome)
        search = pyautogui.locateOnScreen("search.png")
        pyautogui.click(search)
        pyautogui.write(string)
        
test()

需要修改代码实现:打开Chrome、点击搜索栏并逐个搜索DataFrame中的元素。

解决方案

以下是针对问题的修改要点及完整代码:

1. 修正DataFrame取值方式

原代码中df.loc[index]返回的是Series对象而非字符串,PyAutoGUI无法直接写入Series,需要指定列索引取出字符串值(这里DataFrame只有一列,索引为0):

string = df.loc[index, 0]
# 或者使用iloc更直观
string = df.iloc[index, 0]

2. 替换不稳定的图标定位打开Chrome方式

依赖屏幕截图找Chrome图标容易受分辨率、图标位置变化影响,改用subprocess直接启动Chrome更可靠:

  • Windows系统:subprocess.Popen(['chrome.exe'])
  • Mac系统:subprocess.Popen(['open', '-a', 'Google Chrome'])
  • Linux系统:subprocess.Popen(['google-chrome'])

3. 增加等待逻辑避免操作过快

PyAutoGUI操作速度远快于页面加载,需要添加等待时间或使用带超时的元素定位方法,确保元素加载完成后再操作:

  • 使用time.sleep()固定等待
  • 使用pyautogui.locateCenterOnScreen(..., timeout=10)等待元素出现(超时时间可调整)

4. 完善搜索流程

点击搜索栏后写入内容,需按下回车键触发搜索;每次搜索完成后可新建标签页或回到主页,准备下一次搜索。

修改后的完整代码

import pyautogui
import pandas as pd
import subprocess
import time

# 开启PyAutoGUI安全设置与默认等待(可选,提升稳定性)
pyautogui.FAILSAFE = True
pyautogui.PAUSE = 0.5

df = pd.DataFrame(["apple", "orange", "lemon", "banana"])

def test():
    # 启动Chrome(根据系统选择对应命令)
    # Windows
    subprocess.Popen(['chrome.exe'])
    # Mac 请注释上面一行,取消下面一行注释
    # subprocess.Popen(['open', '-a', 'Google Chrome'])
    # Linux 请注释上面两行,取消下面一行注释
    # subprocess.Popen(['google-chrome'])
    
    time.sleep(3)  # 等待Chrome完全启动
    
    for index in range(len(df)):
        # 取出字符串值
        string = df.iloc[index, 0]
        print(f"正在搜索: {string}")
        
        # 等待并点击搜索栏(使用locateCenterOnScreen定位更精准)
        try:
            search_bar = pyautogui.locateCenterOnScreen("search.png", timeout=10)
            if search_bar:
                pyautogui.click(search_bar)
                # 写入搜索内容并回车触发搜索
                pyautogui.write(string)
                pyautogui.press('enter')
                time.sleep(2)  # 等待搜索结果加载
                # 新建标签页准备下一次搜索
                pyautogui.hotkey('ctrl', 't')
                time.sleep(1)
        except pyautogui.ImageNotFoundException:
            print("未找到搜索栏截图,请检查search.png是否清晰、匹配当前屏幕")
            break

test()

额外注意事项

  • 确保search.png是Chrome搜索栏的清晰截图,避免包含多余元素或受系统主题影响导致定位失败
  • 若系统缩放比例不是100%,需调整截图或开启PyAutoGUI的DPI适配:pyautogui.FAILSAFE = True
  • 运行代码前尽量保持Chrome处于最大化状态,减少元素定位偏移

内容的提问来源于stack exchange,提问作者Raphael Borges

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 12:10:18