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

Selenium无法点击谷歌地图「查看更多营业时间」按钮求助

解决谷歌地图“查看更多营业时间”按钮点击问题

问题原因分析

你遇到的元素不可交互、超时问题,核心原因包括:

  • 谷歌地图DOM结构动态生成,固定层级的XPATH(如//*[@id="QA0Szd"]/div/...)极易失效
  • 目标按钮可能未滚动到视口可见区域,或被弹窗遮挡
  • 原代码错误定位了“Close”按钮,而非目标的“查看更多营业时间”按钮

修正方案与代码

核心优化点

  1. 使用稳定的元素定位规则:基于按钮的aria-label文本(匹配英文See more hours或中文查看更多营业时间)定位,避免依赖易变的DOM层级
  2. 处理元素可见性:先滚动到按钮位置,确保元素在视口内
  3. 兜底点击方案:若常规点击失败,用JavaScript直接触发点击(不受页面遮挡限制)
  4. 优化等待逻辑:用WebDriverWait替代time.sleep,提升稳定性

修正后的完整代码

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
import time

url = 'https://www.google.com/maps/place/211+Clover+Lane/@38.2567237,-85.6849465,13z/data=!4m10!1m2!2m1!1srestuarant!3m6!1s0x886974dd922d909f:0x9c4b766c51b27adc!8m2!3d38.2567237!4d-85.6499276!15sCgpyZXN0dWFyYW50WgwiCnJlc3R1YXJhbnSSARNldXJvcGVhbl9yZXN0YXVyYW504AEA!16s%2Fg%2F1tcvcn03?entry=ttu'

options = Options()
# 可选配置:开启无头模式、设置窗口大小
# options.add_argument("--headless=new")
# options.add_argument("--window-size=1920,1080")

driver = webdriver.Chrome(executable_path=ChromeDriverManager(log_level=0).install(), options=options)
driver.get(url)
wait = WebDriverWait(driver, 15)

try:
    # 定位目标按钮(根据页面语言调整aria-label匹配文本)
    hours_btn = wait.until(EC.presence_of_element_located((By.XPATH, "//button[contains(@aria-label, 'See more hours')]")))
    
    # 滚动到按钮可见区域
    driver.execute_script("arguments[0].scrollIntoView({block: 'center'});", hours_btn)
    time.sleep(0.5)  # 给页面滚动缓冲时间
    
    # 优先常规点击,失败则用JavaScript兜底
    try:
        hours_btn.click()
    except:
        driver.execute_script("arguments[0].click();", hours_btn)
    
    # 等待营业时间弹窗加载并抓取数据
    hours_container = wait.until(EC.presence_of_element_located((By.CLASS_NAME, "t39EBf")))
    full_hours = hours_container.get_attribute('aria-label').replace('\u202f', ' ')
    print("完整营业时间:", full_hours)

except Exception as e:
    print("错误信息:", str(e))
finally:
    driver.quit()

额外说明

  • 若页面显示中文,将aria-label的匹配文本改为"查看更多营业时间"
  • JavaScript点击是处理“元素不可交互”问题的最可靠方案,它直接触发元素的点击事件,不受页面遮挡、可见性限制
  • 谷歌地图会频繁更新DOM结构,建议定期检查定位表达式是否有效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 00:02:03