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

使用Selenium爬取谷歌地图搜索结果网址时遇超时问题求助

问题

我尝试用Python结合Selenium通过谷歌地图搜索,获取搜索结果里的网站网址,操作步骤如下:

  • 打开谷歌页面
  • 接受Cookie
  • 搜索目标内容(示例:“阿尔高州儿科医生”)
  • 切换到谷歌地图标签页

但遇到超时错误,明明窗口里结果已经加载完成,延长等待时间也没用,应该是元素定位的问题,求修改代码实现提取网站网址的需求。

当前代码:

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

# Start the browser
driver = webdriver.Chrome()

# Open google.de and accept cookies
driver.get("https://www.google.de/")
wait = WebDriverWait(driver, 25)
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#L2AGLb > div"))).click()

# Search for "Kinderarzt Kanton Aargau"
search_box = driver.find_element(By.NAME, "q")
search_box.send_keys("Kinderarzt Kanton Aargau")
search_box.submit()

# Switch to Maps tab
wait.until(EC.element_to_be_clickable((By.XPATH, "//a[contains(text(), 'Maps')]"))).click()

# Wait for links and extract
results = wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "div[aria-label^='Results for'] > div > div > a")))
for result in results:
    link = result.get_attribute("href")
    print(link)


# Close the browser
driver.quit()
解决方案

核心问题是元素定位器不匹配谷歌地图的实际DOM结构,且切换标签页后未切换窗口句柄,导致在旧页面等待不存在的元素。

关键修改点

  1. 切换窗口句柄:点击Maps标签会打开新标签页,必须切换到新窗口才能定位地图内的元素
  2. 更换结果元素定位器:谷歌地图侧边栏结果项用div[data-id]标识,网站链接可通过a[data-item-id='authority']精准定位

修改后的代码

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

# 启动浏览器并最大化窗口
driver = webdriver.Chrome()
driver.maximize_window()

# 打开谷歌并接受Cookie
driver.get("https://www.google.de/")
wait = WebDriverWait(driver, 25)
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#L2AGLb > div"))).click()

# 搜索目标内容
search_box = wait.until(EC.visibility_of_element_located((By.NAME, "q")))
search_box.send_keys("Kinderarzt Kanton Aargau")
search_box.submit()

# 切换到Maps标签页并切换窗口句柄
maps_tab = wait.until(EC.element_to_be_clickable((By.XPATH, "//a[contains(text(), 'Maps')]")))
maps_tab.click()
driver.switch_to.window(driver.window_handles[-1])

# 等待结果加载并提取网站链接
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div[data-id]")))
result_items = driver.find_elements(By.CSS_SELECTOR, "div[data-id]")

for item in result_items:
    try:
        website_link = item.find_element(By.CSS_SELECTOR, "a[data-item-id='authority']")
        print(website_link.get_attribute("href"))
    except:
        # 跳过无网站的结果项
        continue

# 关闭浏览器
driver.quit()

额外说明

  • 加入driver.maximize_window()避免因窗口过小导致元素被遮挡
  • 搜索框改用visibility_of_element_located等待,稳定性更高
  • 增加异常捕获,避免因部分结果无网站导致程序中断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 09:02:59