使用Selenium实现谷歌航班搜索自动化遇搜索点击无效问题
解决谷歌航班爬虫搜索按钮点击无响应问题
问题根源及解决思路
- 绝对XPATH易失效:你使用的全路径XPATH依赖页面固定结构,谷歌航班页面经常更新,这种定位方式极易失效,改用基于元素属性的相对定位更可靠。
- 未确认城市选择:输入城市名后,谷歌航班会弹出建议列表,直接点击搜索会因系统未确认城市选择导致无响应,必须选择建议项完成城市确认。
- 等待方式不合理:全局隐式等待无法精准匹配元素状态,关键操作前用显式等待确保元素可交互,避免过早操作导致失效。
- 点击目标错误:你点击的是按钮内部的div元素,而非按钮本身,容易触发无效点击,需直接定位可点击的按钮节点。
修改后的代码
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 if __name__ == "__main__": driver = webdriver.Chrome() driver.get('https://www.google.com/travel/flights') driver.maximize_window() wait = WebDriverWait(driver, 20) # 定位出发地输入框并输入,选择建议项 where_from = wait.until(EC.element_to_be_clickable((By.XPATH, "//input[@aria-label='出发地']"))) where_from.clear() where_from.send_keys('Sydney') wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@role='option']//span[text()='Sydney, New South Wales, Australia']"))).click() # 定位目的地输入框并输入,选择建议项 where_to = wait.until(EC.element_to_be_clickable((By.XPATH, "//input[@aria-label='目的地']"))) where_to.clear() where_to.send_keys('Auckland') wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@role='option']//span[text()='Auckland, New Zealand']"))).click() # 点击搜索按钮 search_btn = wait.until(EC.element_to_be_clickable((By.XPATH, "//button[@aria-label='搜索航班']"))) search_btn.click()
代码说明
- 用
WebDriverWait显式等待替代全局隐式等待,精准控制元素交互时机; - 通过
aria-label属性定位输入框,避免页面结构变化导致定位失败; - 输入城市后等待并点击建议项,完成系统对城市的确认;
- 直接定位搜索按钮节点,确保点击区域有效。
内容的提问来源于stack exchange,提问作者z star
相关产品推荐
相关产品推荐

