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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 15:38:22