WeatherUnderground爬虫切换度量单位后无数据输出问题求助
解决WeatherUnderground爬虫切换公制单位后无数据的问题
核心问题分析
你遇到的情况大概率是单位切换操作未真正生效,或是切换后页面数据未完成加载就开始抓取,导致后续无法获取天气数据。而使用选中状态选择器能正常工作,说明只有当单位选项处于激活状态时,页面数据才会正确渲染。
以下是针对性的解决方案:
1. 强制等待元素可交互再执行点击
页面元素可能未完全加载就被点击,导致切换操作失效。添加显式等待确保元素可交互:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 等待设置按钮可点击并触发点击 WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.CSS_SELECTOR, '#wuSettings > i')) ).click() # 等待公制单位选项加载完成并点击 metric_btn = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.CSS_SELECTOR, '#wuSettings-quick > div > a:nth-child(2)')) ) metric_btn.click() # 等待天气数据元素加载完成(替换成你要抓取的具体数据元素选择器) WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, '.weather-data-class')) )
2. 替换不稳定的nth-child选择器
nth-child依赖元素在DOM中的位置,页面结构微调就会失效。改用更稳定的定位方式:
# 方式1:根据按钮文本定位(需匹配页面实际文本,比如英文页面是"Metric") driver.find_element(By.XPATH, '//*[@id="wuSettings-quick"]/div/a[text()="Metric"]').click() # 方式2:根据元素属性定位(如果按钮有专属属性,比如data-unit) driver.find_element(By.CSS_SELECTOR, '#wuSettings-quick > div > a[data-unit="metric"]').click()
3. 验证单位切换是否成功
点击后检查当前选中状态,确保切换操作确实生效:
# 点击设置按钮后遍历选项,找到并点击公制单位 unit_options = driver.find_elements(By.CSS_SELECTOR, '#wuSettings-quick > div > a') for option in unit_options: if option.text.strip() == 'Metric': option.click() break # 确认选中状态 selected_unit = driver.find_element(By.CSS_SELECTOR, '#wuSettings-quick > div > a.button.selected').text print(f"当前生效单位:{selected_unit}")
4. 处理AJAX数据加载延迟
切换单位后页面通常通过AJAX异步刷新数据,需等待加载状态结束后再抓取:
# 等待页面加载状态消失(比如等待加载动画元素隐藏) WebDriverWait(driver, 10).until( EC.invisibility_of_element_located((By.CSS_SELECTOR, '.loading-spinner')) )
内容的提问来源于stack exchange,提问作者user22018490
相关产品推荐
相关产品推荐

