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

Python Selenium如何定位SmartyStreets网站下拉框与文本框并完成地址查询

问题原因
  • 目标页面的地址查询模块独立嵌套在iframe标签中,Selenium默认操作顶层DOM,未切换iframe的情况下无法定位iframe内部的元素
实现步骤
  • 导入必要依赖:webdriver、WebDriverWait、expected_conditions、Select等
  • 页面加载完成后先等待目标iframe加载,切换至对应iframe
  • 定位下拉框元素,将其切换为freeform address选项
  • 定位单行地址输入框,填入待查询地址
  • 触发查询操作后等待结果加载完成,提取地址信息写入本地文本文件
  • 操作完成后关闭驱动实例
完整可运行代码
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import Select

def get_property_info(address_to_search, output_file='address_result.txt'):
    # 可根据本地chromedriver路径修改Service参数
    service = Service('chromedriver')
    driver = webdriver.Chrome(service=service)
    # 最长等待时间可根据网络情况调整
    wait = WebDriverWait(driver, 15)
    
    try:
        url = 'https://www.smartystreets.com/products/single-address'
        driver.get(url)

        # 切换到查询模块对应的iframe
        iframe = wait.until(EC.presence_of_element_located((By.XPATH, '//iframe[contains(@src, "single-address")]')))
        driver.switch_to.frame(iframe)

        # 切换下拉框为freeform address模式
        select_elem = wait.until(EC.presence_of_element_located((By.ID, 'lookup-select')))
        Select(select_elem).select_by_value('freeform')

        # 填入待查询地址
        input_elem = wait.until(EC.element_to_be_clickable((By.ID, 'freeform-address')))
        input_elem.clear()
        input_elem.send_keys(address_to_search)

        # 触发查询
        submit_btn = wait.until(EC.element_to_be_clickable((By.ID, 'lookup-button')))
        submit_btn.click()

        # 提取结果写入文件
        result_area = wait.until(EC.presence_of_element_located((By.ID, 'lookup-result')))
        result_text = result_area.text
        with open(output_file, 'w', encoding='utf-8') as f:
            f.write(result_text)

        return result_text
    finally:
        driver.quit()

# 调用示例
if __name__ == '__main__':
    test_addr = "1600 Amphitheatre Parkway, Mountain View, CA"
    print(get_property_info(test_addr))
注意事项
  • 需保证Chrome浏览器版本和chromedriver版本完全匹配,否则会出现启动异常
  • 若网络加载较慢,可适当调大WebDriverWait的超时时间
  • 若后续网站更新修改了元素属性,可通过浏览器开发者工具重新定位对应元素的ID/XPATH即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:15:03