python-3.x 如何使用Selenium从下拉按钮中获取文本?

atmip9wb  于 2023-08-08  发布在  Python
关注(0)|答案(2)|浏览(113)

有一个带有下拉按钮的网页,里面有文字。我想从该下拉按钮检索文本,即:“说明文本”。
下面是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>

字符串
当我运行这段代码时:

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))


但输出为空。我怎么能修好呢?

35g0bw71

35g0bw711#

要通过XPATH获取元素,应该使用

description_tags = driver.find_elements(By.XPATH, "//*[contains(@class, 'detail-dropdown__body')]")

字符串
xpath中的.文本包含对文本的搜索,但实际上你需要搜索class,所以你应该使用.

flseospp

flseospp2#

要提取文本 Description text. 理想情况下,您需要为visibility_of_element_located()引入WebDriverWait,您可以使用以下locator strategies之一:

  • 使用 CSS_SELECTORtext 属性:
print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.detail-dropdown__body > article.detail-desc p"))).text)

字符串

  • 使用 XPATHget_attribute("innerHTML")
print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='detail-dropdown__body']/article[@class='detail-desc']//p[text()]"))).get_attribute("innerHTML"))

*注意:需要添加以下导入:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC


您可以在How to retrieve the text of a WebElement using Selenium - Python中找到相关讨论

引用

链接到有用的文档:

相关问题