使用Python+Selenium向Expedia网站出发地字段输入文本报错如何解决
报错原因
- XPath语法错误:你写的
//*[@id=wizard-flight-tab-roundtrip]中id的属性值没有加引号,导致定位表达式无效,没有找到对应元素返回None,调用send_keys就触发了属性错误。 - 元素类型不匹配:你定位到的是出发地的触发按钮,不是可输入的文本框,按钮元素本身即使定位成功也不支持直接输入内容,Expedia的出发地需要先点击按钮唤起输入弹窗后再输入。
- 定位路径失效:Expedia的页面结构已经更新,你用的旧层级路径已经失效,无法定位到对应元素。
修复后的完整代码
import time from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome(executable_path="D:\ChromeDriverExtracted\chromedriver") driver.implicitly_wait(10) driver.maximize_window() driver.get("https://www.expedia.com/") # 点击Flights选项 driver.find_element(By.XPATH, "//span[text()='Flights']").click() time.sleep(2) # 点击出发地选择按钮,唤起输入弹窗 departure_button = driver.find_element(By.XPATH, "//button[@aria-label='Leaving from']") departure_button.click() time.sleep(1) # 定位弹出的输入框,输入内容 departure_input = driver.find_element(By.XPATH, "//input[@id='location-field-leg1-origin']") departure_input.send_keys("SFO") # 可选:输入后等待联想结果出现,选择第一个结果 time.sleep(1) driver.find_element(By.XPATH, "//ul[@class='uitk-typeahead-results']/li[1]").click() # 后续操作...
注意事项
- 新版Selenium推荐使用
By类指定定位方式,find_element_by_*系列方法已经在Selenium 4.0+中被废弃,如果你用的是新版本Selenium需要统一换成find_element(By.定位方式, 表达式)的写法。 - 适当延长隐式等待时间,或者加显式等待判断元素可点击/可见后再操作,避免网络波动导致的元素加载失败问题。
内容的提问来源于stack exchange,提问作者NikaTheKilla
相关产品推荐
相关产品推荐

