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

使用Selenium操作Google Maps时无法定位出发时间下拉按钮

问题原因及解决方法

为什么无法定位该元素?

  1. 类名定位方式错误:使用By.CLASS_NAME时,只能传入单个类名。你传入的'goog-inline-block goog-menu-button-dropdown'包含两个类名,Selenium会将其视为一个带空格的完整类名,而页面中不存在这样的类名,因此抛出NoSuchElementException。

  2. 固定等待不可靠:time.sleep()是固定时长等待,无法适配页面实际加载速度。如果元素渲染慢于等待时间,代码执行时元素还未出现,就会导致定位失败。

解决方法

1. 修正元素定位方式

使用CSS选择器来定位多类名元素,格式为.类名1.类名2,这样可以同时匹配多个类名的元素。

2. 替换固定等待为显式等待

使用WebDriverWait结合预期条件(如element_to_be_clickable),让Selenium等待元素可交互后再执行操作,避免因加载延迟导致的错误。

修正后的代码

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.google.com/maps")

# 等待路线按钮可点击并点击
directions_btn = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.ID, 'hArJGc'))
)
directions_btn.click()

# 等待搜索框加载完成,输入起点和终点
search_boxes = WebDriverWait(driver, 10).until(
    EC.presence_of_all_elements_located((By.CLASS_NAME, 'tactile-searchbox-input'))
)
search_boxes[0].clear()
search_boxes[0].send_keys('Hyderabad')
search_boxes[1].clear()
search_boxes[1].send_keys('Guntur')
search_boxes[1].send_keys(Keys.ENTER)

# 等待出发时间下拉按钮可点击并点击
departure_dropdown = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, '.goog-inline-block.goog-menu-button-dropdown'))
)
departure_dropdown.click()

额外提示

Google Maps的页面元素定位符可能会随版本更新变化,如果后续该选择器失效,建议重新通过浏览器开发者工具检查元素,选择更稳定的定位方式(如ID、包含特定文本的元素或基于父层级的选择器)。

内容的提问来源于stack exchange,提问作者Satya Pamidi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 01:50:53