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

Selenium无法向Google Maps输入框发送内容的技术求助

解决Google Maps输入框仅在窗口聚焦时接受Selenium输入的问题

核心问题分析

你的代码存在几个关键问题:

  • undetected_chromedriver的配置方式错误,导致浏览器启动参数未正确生效
  • 使用固定time.sleep而非显式等待,无法确保元素完全加载可交互
  • 窗口激活逻辑缺失,未确保浏览器窗口处于前台焦点

修正后的代码

import time
from undetected_chromedriver import Chrome, ChromeOptions
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains

# 初始化浏览器配置
chrome_options = ChromeOptions()
chrome_options.add_argument('--incognito')
chrome_options.add_argument("--disable-blink-features=AutomationControlled")
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument("--mute-audio")
chrome_options.add_argument("--window-size=1400,1000")
chrome_options.add_argument(
    'user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36')

# 正确初始化undetected_chromedriver
driver = Chrome(options=chrome_options)
driver.get("https://maps.google.com")

# 显式等待搜索框加载完成并可交互
wait = WebDriverWait(driver, 10)
map_input = wait.until(EC.element_to_be_clickable((By.ID, "searchboxinput")))

# 确保窗口获得焦点
driver.switch_to.window(driver.current_window_handle)
driver.maximize_window()

# 模拟真实用户操作:先点击激活,再逐字符输入(避免被反检测拦截)
actions = ActionChains(driver)
actions.move_to_element(map_input).click().perform()

address = """Rett Syndrome Research Trust Inc
67 Under Cliff Rd
Trumbull, CT 6611"""

# 逐字符输入,模拟人类输入节奏
for char in address:
    actions.send_keys(char).perform()
    time.sleep(0.05)

# 触发搜索(按回车键)
actions.send_keys(u'\ue007').perform()

# 等待搜索结果加载(按需调整)
time.sleep(5)
driver.quit()

关键修改点说明

  • 修正浏览器初始化:undetected_chromedriver的Chrome类直接接受options参数,无需通过Service传递配置,之前的service.service_args = chrome_options是错误用法。
  • 显式等待替代固定休眠:使用WebDriverWait确保搜索框完全可交互,避免因页面加载延迟导致元素未就绪。
  • 窗口焦点激活:通过driver.switch_to.window(driver.current_window_handle)强制浏览器窗口获得焦点,解决输入依赖窗口聚焦的问题。
  • 模拟人类输入节奏:逐字符输入并添加微小延迟,避免被Google的反自动化机制识别拦截。
  • 触发搜索:输入完成后模拟按下回车键,确保搜索操作执行。

备选方案:直接通过JS设置输入值

如果上述方法仍无效,可以尝试用JavaScript直接设置输入框值并触发搜索事件:

# 显式等待元素加载后执行JS
map_input = wait.until(EC.presence_of_element_located((By.ID, "searchboxinput")))
driver.execute_script("arguments[0].value = arguments[1];", map_input, address)
# 触发搜索按钮点击
search_button = wait.until(EC.element_to_be_clickable((By.ID, "searchbox-searchbutton")))
search_button.click()

内容的提问来源于stack exchange,提问作者farhan jatt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 02:22:41