Selenium无法点击谷歌地图「查看更多营业时间」按钮求助
解决谷歌地图“查看更多营业时间”按钮点击问题
问题原因分析
你遇到的元素不可交互、超时问题,核心原因包括:
- 谷歌地图DOM结构动态生成,固定层级的XPATH(如
//*[@id="QA0Szd"]/div/...)极易失效 - 目标按钮可能未滚动到视口可见区域,或被弹窗遮挡
- 原代码错误定位了“Close”按钮,而非目标的“查看更多营业时间”按钮
修正方案与代码
核心优化点
- 使用稳定的元素定位规则:基于按钮的
aria-label文本(匹配英文See more hours或中文查看更多营业时间)定位,避免依赖易变的DOM层级 - 处理元素可见性:先滚动到按钮位置,确保元素在视口内
- 兜底点击方案:若常规点击失败,用JavaScript直接触发点击(不受页面遮挡限制)
- 优化等待逻辑:用
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
相关产品推荐
相关产品推荐

