如何用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
相关产品推荐
相关产品推荐

