如何用Selenium Python获取谷歌地图商家营业时间
谷歌地图商家营业时间获取方案(Selenium Python)
核心解决思路
谷歌地图采用动态渲染机制,直接定位元素极易失败,必须结合显式等待确保元素加载完成后再操作,同时需针对营业时间按钮的特征选择稳定的定位方式。
步骤与示例代码
假设你已有基础代码可获取商家名称和地址,在此基础上添加以下逻辑:
- 导入等待相关模块
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By
- 等待并点击营业时间按钮
# 初始化等待器,最长等待10秒 wait = WebDriverWait(driver, 10) # 方式1:通过aria-label属性定位(稳定性更高) hours_button = wait.until(EC.element_to_be_clickable( (By.XPATH, '//button[contains(@aria-label, "营业时间")]') )) # 滚动到按钮位置,避免被页面导航栏遮挡导致点击失败 driver.execute_script("arguments[0].scrollIntoView({block: 'center'});", hours_button) # 执行点击 hours_button.click()
- 提取完整营业时间数据
点击后营业时间会展开为表格结构,定位并提取数据:
# 等待营业时间容器加载完成 hours_container = wait.until(EC.presence_of_element_located( (By.CLASS_NAME, "OqCZI") # 该类名可能随谷歌地图更新变化,需用F12查看当前元素 )) # 遍历每行营业时间 for row in hours_container.find_elements(By.TAG_NAME, "tr"): day = row.find_element(By.CLASS_NAME, "mxowUb").text # 星期几的元素类名 time = row.find_element(By.CLASS_NAME, "y0skZc").text # 对应时间的元素类名 print(f"{day}: {time}")
关键注意事项
- 元素定位实时验证:谷歌地图的元素属性(类名、aria-label)可能随时更新,务必用浏览器F12开发者工具查看当前页面的DOM结构,调整定位表达式。
- 多语言适配:如果是英文界面,将定位文本改为
"Hours"即可。 - 前置操作:必须先处理谷歌地图的Cookie授权弹窗,否则元素定位会失败。
内容的提问来源于stack exchange,提问作者Nayem Jaman Tusher
相关产品推荐
相关产品推荐

