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

使用Python Selenium爬取SmartyStreets站点的Carrier Route地址字段

解决方案

核心问题原因

你遇到的定位失败主要有两个常见原因:

  • 页面的地址查询演示模块是内嵌在iframe中的,没有切换iframe上下文的话直接定位元素会返回找不到的错误
  • 没有设置等待逻辑,提交查询后页面还未完成结果渲染就执行定位操作

具体实现步骤

  • 引入显式等待相关依赖,避免强制等待的不稳定性
  • 打开目标页后先定位到演示模块的iframe,切换上下文后再执行查询操作
  • 提交地址查询后等待结果区域渲染完成,用关联文本的XPath定位Carrier Route对应值

完整可运行代码

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

# 初始化驱动
driver = webdriver.Chrome('chromedriver')
wait = WebDriverWait(driver, 10)  # 最长等待10秒,可根据网络情况调整
address = "3301 South Greenfield Rd Gilbert, AZ 85297"
url = 'https://www.smartystreets.com/products/single-address-iframe'

try:
    driver.get(url)
    # 切换到演示模块的iframe
    demo_iframe = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'iframe[src*="demo/iframe"]')))
    driver.switch_to.frame(demo_iframe)

    # 选择自由格式输入
    wait.until(EC.element_to_be_clickable((By.ID, "lookup-select-button"))).click()
    wait.until(EC.element_to_be_clickable((By.ID, "address-freeform"))).click()

    # 输入地址并提交查询
    input_ele = wait.until(EC.visibility_of_element_located((By.ID, "freeform-address")))
    input_ele.send_keys(address)
    wait.until(EC.element_to_be_clickable((By.ID, "lookup-button"))).click()

    # 定位Carrier Route字段值
    carrier_route_ele = wait.until(EC.visibility_of_element_located(
        (By.XPATH, "//dt[normalize-space(text())='Carrier Route']/following-sibling::dd[1]")
    ))
    carrier_route = carrier_route_ele.text.strip()
    print(f"Carrier Route结果:{carrier_route}")
finally:
    driver.quit()

注意事项

  • 可根据实际网络环境调整显式等待的最长时长,避免网络延迟时加载超时
  • 不要高频发起请求,避免触发站点的反爬机制
  • 可新增异常捕获逻辑处理无效地址、无返回结果的边缘情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:54:03