You need to enable JavaScript to run this app. 如何使用Puppeteer从Google Maps链接中提取店铺名称与地址
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Puppeteer从Google Maps链接中提取店铺名称与地址

问题原因&解决方案

你代码存在3个核心问题:

  • CSS选择器格式错误:你要定位的x3AX1-LfntMc-header-title-title是class属性值,CSS选择器中类名必须加前缀.,漏写前缀会导致无法匹配到对应元素
  • 未等待动态元素加载:谷歌地图的店铺详情属于异步渲染内容,page.goto执行完成时动态内容还没渲染完成,直接查询元素会返回空
  • URL特殊字符转义风险:在单引号包裹的字符串中写Donna\'s的转义虽然语法合法,但很容易出现转义冲突,建议用反引号包裹模板字符串规避这类问题

修正后可运行代码

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({ headless: false });
  const page = await browser.newPage();
  // 模板字符串包裹URL,避免单引号转义问题
  await page.goto(`https://www.google.com/maps/place/Donna's+Garden+Flower+Shop+-+Chicago,+IL/@41.9898102,-87.7360212,17z/data=!3m1!4b1!4m5!3m4!1s0x880fce639267ed2f:0x3e47d8ddf3040316!8m2!3d41.9898313!4d-87.7338812?authuser=0&hl=en`);
  
  // 先等待店铺名称元素加载完成
  const nameSelector = '.x3AX1-LfntMc-header-title-title span';
  await page.waitForSelector(nameSelector, { timeout: 10000 });
  const shopName = await page.$eval(nameSelector, span => span.textContent.trim());
  console.log('店铺名称:', shopName);

  // 获取店铺地址
  const addressSelector = '.Io6YTe.fontBodyMedium';
  await page.waitForSelector(addressSelector, { timeout: 10000 });
  const shopAddress = await page.$eval(addressSelector, el => el.textContent.trim());
  console.log('店铺地址:', shopAddress);

  await browser.close();
})();

补充说明

如果后续运行出现类名不匹配的问题,是因为谷歌地图会不定期更新前端类名,你可以打开浏览器控制台,右键对应元素选择「复制」-「复制选择器」即可拿到最新的正确选择器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 06:00:04