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

Selenium无法定位Google Maps店铺位置元素问题求助

排查Google Maps店铺位置元素定位失败的原因

核心问题分析

  • XPath转义字符错误:你的XPath里用了"(HTML转义双引号),但Python字符串中不需要这种转义,直接用双引号或单引号即可。比如[@id="QA0Szd"]应该改成[@id="QA0Szd"],或者用单引号包裹整个XPath避免冲突。
  • 绝对XPath稳定性极差:依赖div[9]这种索引的绝对XPath完全不可靠——Google Maps的DOM结构会根据窗口大小、登录状态、页面更新随时变化,索引位置大概率会失效。应该改用基于元素属性的相对XPath,比如定位包含地址的按钮或文本容器,示例:
    //button[contains(@aria-label, '地址')]/div[1]/div[2]/div[1]
    
    或者直接定位地址文本的容器:
    //div[contains(@class, 'Io6YTe fontBodyMedium kR99db')]
    
  • 无头窗口布局适配问题:默认无头模式的Chrome窗口尺寸极小,Google Maps会加载移动端布局,此时DOM结构和桌面端完全不同,你用的桌面端XPath自然找不到元素。必须设置无头窗口的桌面尺寸:
    chrome_options.add_argument('--window-size=1920,1080')
    
  • 等待策略不严谨:time.sleep(5)是固定等待,无法保证元素完全加载完成,应该用Selenium的显式等待,等待元素可见后再操作,避免因加载延迟导致的定位失败。

修正后的完整代码示例

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

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
# 添加桌面窗口尺寸
chrome_options.add_argument('--window-size=1920,1080')

driver = webdriver.Chrome(options=chrome_options)
url = "https://www.google.com/maps/place/Blaze+Pizza/@24.5014283,54.387503,17z/data=!3m1!4b1!4m5!3m4!1s0x3e5e676982d20b17:0xe2c5b69e67e4c85d!8m2!3d24.5014283!4d54.3896917"
driver.get(url)

# 显式等待地址元素可见,最长等待10秒
location_element = WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.XPATH, '//button[contains(@aria-label, "地址")]/div[1]/div[2]/div[1]'))
)
location = location_element.text
print(location)

driver.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 23:10:51