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

如何用Selenium获取Power BI中MUNICIPIO下拉菜单的全部选项?

解决Power BI下拉菜单选项不全的问题

问题分析

Power BI的下拉选项是动态加载的,只有当选项进入可视区域时才会渲染到HTML中,直接获取只能拿到当前显示的部分。需要模拟滚动下拉列表,触发所有选项加载后再提取内容。

修正后的代码实现

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
from selenium.webdriver.common.action_chains import ActionChains
import time

# 初始化浏览器
cService = webdriver.ChromeService("chromedriver.exe")
driver = webdriver.Chrome(service=cService)
driver.maximize_window()

# 修正URL笔误(原代码中view后多了空格)
url = "https://app.powerbi.com/view?r=eyJrIjoiYjQ1NTA2OTYtYTNkMi00ZTM4LWI2ODUtZjE0MTdhODg2OWU3IiwidCI6IjU2YzFlMmZiLTg3YzEtNGRlMC1hNmFjLWQwNTY2YzA4Y2U2NiJ9"
driver.get(url)

try:
    # 等待MUNICIPIO下拉按钮加载并点击展开
    wait = WebDriverWait(driver, 15)
    dropdown_btn = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div[aria-label='MUNICIPIO']")))
    dropdown_btn.click()

    # 等待下拉选项容器加载完成
    options_container = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "div[role='listbox']")))
    # 循环滚动触发所有选项加载
    prev_option_count = -1
    current_option_count = len(options_container.find_elements(By.CSS_SELECTOR, "div[role='option']"))

    while current_option_count > prev_option_count:
        prev_option_count = current_option_count
        # 滚动到最后一个已加载的选项,触发新选项加载
        last_option = options_container.find_elements(By.CSS_SELECTOR, "div[role='option']")[-1]
        ActionChains(driver).move_to_element(last_option).perform()
        time.sleep(0.5)  # 预留加载时间
        current_option_count = len(options_container.find_elements(By.CSS_SELECTOR, "div[role='option']"))

    # 提取所有选项文本并遍历
    all_municipio_options = [opt.text.strip() for opt in options_container.find_elements(By.CSS_SELECTOR, "div[role='option']")]
    
    print("所有MUNICIPIO选项:")
    for idx, option in enumerate(all_municipio_options, 1):
        print(f"{idx}. {option}")

finally:
    driver.quit()

关键说明

  • 修正原代码的URL笔误,否则无法正常访问目标页面。
  • 使用WebDriverWait等待元素加载,避免页面未渲染完成导致的元素定位失败。
  • 通过滚动到最后一个选项的方式触发动态加载,循环直到选项数量不再变化,确保所有选项都被渲染到HTML中。
  • 用role='option'定位下拉选项,这是Power BI下拉菜单的标准元素属性,比类选择器更稳定。

内容的提问来源于stack exchange,提问作者livia.madc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 22:33:18