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

Selenium抓取网页时无法获取站内地图链接href的问题

问题根因

抓取不到地图链接的核心原因是页面内嵌地图存放在<iframe>独立文档中:

  • Selenium默认的元素检索范围仅覆盖当前主页面DOM,不会自动穿透iframe边界检索内部元素
  • 你使用的//*[@href]XPath仅遍历主文档节点,完全没有覆盖iframe内的DOM结构,自然匹配不到地图里的链接
  • 从提供的元素截图可以确认:地图模块外层包裹iframe标签,内部所有链接都属于iframe加载的独立文档,不在主页面检索范围内
修复方法

检索iframe内的元素前,必须先切换Selenium的上下文到对应iframe,操作完成后可切回主文档。参考修正代码:

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(executable_path="chromedriver.exe")
driver.maximize_window()
driver.get("https://www.oyuncakhouse.com/")

# 先抓取主页面所有链接
main_lnks = driver.find_elements(By.XPATH, '//*[@href]')
for lnk in main_lnks:
    print(lnk.get_attribute("href"))

# 等待地图iframe加载完成后切换上下文
map_iframe = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH, '//iframe[contains(@src, "maps")]'))
)
driver.switch_to.frame(map_iframe)

# 此时即可抓取到iframe内地图模块的所有链接
map_lnks = driver.find_elements(By.XPATH, '//*[@href]')
for lnk in map_lnks:
    print(lnk.get_attribute("href"))

# 切回主页面上下文,方便后续操作主页面元素
driver.switch_to.default_content()

driver.quit()
补充说明
  • 若存在多层嵌套iframe,需要从上到下逐层切换,无法直接跨层进入深层iframe
  • iframe加载速度通常慢于主页面,建议添加显式等待,避免iframe未加载完成就切换导致报错
  • 部分动态渲染的地图内容,需要等待内部链接元素渲染完成后再执行检索

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 23:12:20