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
相关产品推荐
相关产品推荐

