使用Selenium操作Google Maps时无法定位出发时间下拉按钮
问题原因及解决方法
为什么无法定位该元素?
类名定位方式错误:使用
By.CLASS_NAME时,只能传入单个类名。你传入的'goog-inline-block goog-menu-button-dropdown'包含两个类名,Selenium会将其视为一个带空格的完整类名,而页面中不存在这样的类名,因此抛出NoSuchElementException。固定等待不可靠:
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
相关产品推荐
相关产品推荐

