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

如何使用Selenium获取下拉按钮文本?解决返回空值问题

问题:Selenium无法获取下拉按钮内的文本「Description text」

用户需要获取网页下拉按钮内的文本「Description text」,对应的HTML片段如下:

<div data-v-e0a13c66="" data-v-5e9bf2df="" id="DetailDescription" class="detail-dropdown">
    <header data-v-e0a13c66="" class="detail-dropdown__header">
        <h5 data-v-e0a13c66="" class="detail-dropdown__title detail-dropdown__title--open">Описание</h5>
        <svg data-v-e0a13c66="" width="8" height="14"
            xmlns="http://www.w3.org/2000/svg" class="detail-dropdown__arrow--open detail-dropdown__arrow">
            <path data-v-e0a13c66="" d="M5.38 6.978c-.03-.02-.065-.036-.09-.06A10051.03 10051.03 0 0 1 .544 2.17C.202 1.83.154 1.335.424.962A.916.916 0 0 1 1.765.807c.032.027.061.057.091.087l5.42 5.42c.41.41.41.96 0 1.37L1.831 13.13c-.401.4-1.018.38-1.373-.046a.918.918 0 0 1 0-1.164c.033-.04.07-.078.108-.115L5.29 7.08c.025-.025.06-.04.09-.06v-.043Z"></path>
        </svg>
    </header>
    <div data-v-e0a13c66="" class="detail-dropdown__body">
        <article data-v-37bed4a0="" data-v-e0a13c66="" itemprop="description" class="detail-desc">
            <p data-v-37bed4a0="" class="detail-desc__text detail-desc__text--main">
                <p>Description text.</p>                <!---->                <!----></article>
        </div>
    </div>

用户运行的Selenium代码如下,但输出为空:

from selenium import webdriver
from selenium.webdriver.common.by import By

def web_driver():
    options = webdriver.ChromeOptions()
    options.add_argument("--verbose")
    options.add_argument('--no-sandbox')
    options.add_argument('--headless')
    options.add_argument('--disable-gpu')
    options.add_argument("--window-size=1920, 1200")
    options.add_argument('--disable-dev-shm-usage')
    driver = webdriver.Chrome(options=options)
    return driver


description_tags = driver.find_elements(By.XPATH, "//*[@*[contains(., 'detail-dropdown_body')]]")
list(map(lambda x: x.text, description_tags))

问题原因分析

  1. XPath定位错误:HTML中目标元素的class是detail-dropdown__body(双下划线),但代码中写的是detail-dropdown_body(单下划线),导致无法匹配到正确元素。
  2. 未初始化driver实例:代码中直接使用driver变量,但没有调用web_driver()函数获取实例,实际运行会引发变量未定义错误。
  3. 未等待元素加载:页面可能还未完全渲染就执行元素查找,导致获取不到文本。

修复方案

步骤1:修正XPath定位

使用正确的class名,或更精准的定位方式(比如通过itemprop="description"定位article元素)。

步骤2:添加显式等待

确保目标元素加载完成后再获取文本,避免因页面未渲染完成导致空值。

步骤3:正确初始化driver实例

修复后的完整代码

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

def web_driver():
    options = webdriver.ChromeOptions()
    options.add_argument("--verbose")
    options.add_argument('--no-sandbox')
    options.add_argument('--headless')
    options.add_argument('--disable-gpu')
    options.add_argument("--window-size=1920, 1200")
    options.add_argument('--disable-dev-shm-usage')
    driver = webdriver.Chrome(options=options)
    return driver

# 初始化driver并打开目标网页
driver = web_driver()
driver.get("你的目标网页URL")

try:
    # 等待目标元素可见,最多等待10秒
    description_element = WebDriverWait(driver, 10).until(
        EC.visibility_of_element_located((By.XPATH, "//article[@itemprop='description']"))
    )
    # 获取文本
    description_text = description_element.text
    print(description_text)
finally:
    driver.quit()

其他可选定位方式

如果需要直接定位到包含「Description text」的p元素,可使用以下XPath:

description_element = WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.XPATH, "//div[@class='detail-dropdown__body']//p[contains(text(), 'Description text')]"))
)

内容的提问来源于stack exchange,提问作者french_fries

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 17:45:58