Selenium循环未逐行检查机场徽章问题排查
解决机场徽章判断错误的问题
我一眼就看出问题所在啦——你的XPath写法和异常处理逻辑都踩了坑,导致所有机场都被错误标记为有徽章(Y)。咱们一步步来修正:
核心问题分析
- 全局XPath搜索:你用的
//div[@class="airport-icons"]//app-badge是从整个文档根节点开始搜索,不是在当前遍历的机场行(r)下面查找。只要页面上存在任意一个带徽章的机场,这个查询就会返回结果,所有行都会走print(r.text + ": Y")的分支。 - 错误的异常处理:
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
相关产品推荐
相关产品推荐

