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

Selenium循环未逐行检查机场徽章问题排查

解决机场徽章判断错误的问题

我一眼就看出问题所在啦——你的XPath写法和异常处理逻辑都踩了坑,导致所有机场都被错误标记为有徽章(Y)。咱们一步步来修正:

核心问题分析

  1. 全局XPath搜索:你用的//div[@class="airport-icons"]//app-badge是从整个文档根节点开始搜索,不是在当前遍历的机场行(r)下面查找。只要页面上存在任意一个带徽章的机场,这个查询就会返回结果,所有行都会走print(r.text + ": Y")的分支。
  2. 错误的异常处理:find_elements_by_xpath方法找不到元素时,只会返回一个空列表,不会抛出异常,所以你的except块永远不会执行,自然不会输出"N"。

修正后的代码

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
import time

driver = webdriver.Chrome(executable_path=r'C:\Program Files\chromedriver.exe')
wait = WebDriverWait(driver, 10)
driver.get("https://www.aopa.org/destinations/airports/state/AL")
time.sleep(3)
airport_list = []
paved_runway = []
airport_row = driver.find_elements_by_xpath('//div[@class = "state-airports__airport"]')
print(len(airport_row))

for r in airport_row:
    airport_name = r.text
    airport_list.append(airport_name)
    # 用相对路径XPath(开头加.)在当前行内查找徽章
    badge_elements = r.find_elements_by_xpath('.//div[@class="airport-icons"]//app-badge')
    if len(badge_elements) > 0:
        print(f"{airport_name}: Y")
        paved_runway.append("Y")
    else:
        print(f"{airport_name}: N")
        paved_runway.append("N")

# 验证输出
print("\n机场列表:")
print(airport_list)
print("\n徽章标记:")
print(paved_runway)

driver.close()

关键修改点

  • 相对路径XPath:把XPath改成.//div[@class="airport-icons"]//app-badge,.表示从当前元素(r)的上下文开始搜索,确保只检查当前机场行内的徽章。
  • 替换异常处理为长度判断:直接判断badge_elements的长度,大于0说明当前行有徽章,否则没有。这样逻辑更清晰,也符合Selenium API的行为。
  • 变量拆分:把r.text存成airport_name,避免重复调用,代码更整洁。

这样修改后,Chilton County机场就会被正确标记为"N"啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 21:27:51