簡體   English   中英

Selenium + Python:打印元素的文本屬性

[英]Selenium + Python: Print the text attribute of an element

我想瀏覽一個網站,找到一個元素並打印出來。

Python 版本:3.10; Selenium 網絡驅動程序:Firefox; IDE: PyCharm 2021.3.2 (CE); 操作系統:Fedora 35 虛擬機

我能夠導航到在下拉菜單中生成文本的適當頁面。 當我通過 CSS 選擇器找到元素並嘗試打印它時,output 會打印文本“無”。 我希望它打印計划名稱,在本例中為“ Dual Complete Plan 1 ”。 該元素並不總是存在,因此我還需要捕獲任何異常。

我要打印的元素的相關 HTML 代碼:

<span class="OSFillParent" data-expression="" style="font-size: 12px; margin-top: 5px;">Dual Complete Plan 1</span>

我試圖打印的元素的更多 HTML 代碼(我試圖捕獲的元素在第四個 div 下方):

<td data-header="Plan Name">
    <div id="b8-b40-l1_0-132_0-$b2" class="OSBlockWidget" data-block="Content.AccordionItem">
    <div id="b8-b40-l1_0-132_0-b2-SectionItem" class="section-expandable  open is--open small-accordion" data-container="" data-expanded="true" aria-expanded="true" aria-disabled="false" role="tab">
        <div id="b8-b40-l1_0-132_0-b2-TitleWrapper" class="section-expandable-title" data-container="" style="cursor: pointer;" role+"button" aria-hidden="false" aria-expanmded="true" tabindex="0" aria-controls="b8-b40-l1_0-132_0-b2-Content" EVENT FLEX
            <div id="b8-b40-l1_0-132_0-b2-Title" class="dividers full-width">
                    <span class="OSFillParent" data-expression="" style="font-size: 12px; margin-top: 5px;">Dual Complete Plan 1</span>
            </div>
        <div class="section-expandable-icon" data-container="" aria-hidden="true"
            ::after
        </div>
    </div>
    <div id="b8-b40-l1_0-132_0-b2-ContentWrapper" class="section-expandable-content no-padding is--expanded" data-container="" tabindex="0" aria-hidden="false" aria-labelledby="b8-b40-l1_0-132_0-b2-TitleWrapper"> 
        <div id="b8-b40-l1_0-132_0-b2-Content" role="tabpanel">
            <a data-link="" href="https://www.communityplan.com" target="_blank" title="Click for more information"> EVENT
                <span class="OSFillParent" data-expression="" style="font-size: 12px;">www.CommunityPlan.com</span>
            </a>
            <span class="OSFillParent" data-expression="" style="font-size: 12px:">Phone Number: 8005224700</span>
        </div>
    </div>
</div>
</div>
</td>

我的相關Selenium代碼:

# Find the Plan Name & if present set it to the variable "Advantage"
        try:
            Advantage = (WebDriverWait(driver, 5).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, "#b8-b40-l1_0-132_0-b2-Title > span:nth-child(1)"))).get_attribute("value"))
        except:
            pass

print('\033[91;46m', Advantage, '\033[0m')

我希望 output 是“雙重完整計划 1”,這是我在屏幕上和 HTML 中看到的。相反,我得到以下內容:

沒有任何

顯然,“優勢”變量被設置為“無”。 為什么? 我可以在上面的 HTML 代碼中看到我要打印的文本“Dual Complete Plan 1”。 我究竟做錯了什么? 我覺得我需要一本關於“獲取屬性”的入門書?

要獲取文本Dual Complete Plan 1 ,您需要使用

element.text

或者

element.get_attribute("innerHTML")

或者

element.get_attribute("textContent")

而不是presence_of_element_located()使用visibility_of_element_located()

和以下css selector來識別

div[id*='Title'] > span.OSFillParent

或者

div.dividers.full-width > span.OSFillParent

代碼:

        try:
            Advantage = WebDriverWait(driver, 5).until(
            EC.visibility_of_element_located((By.CSS_SELECTOR, "div[id*='Title'] > span.OSFillParent"))).text
        except:
            pass
        print(Advantage )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM