簡體   English   中英

使用硒無法從網頁中提取文本

[英]Pull text from webpage using selenium not working

我正在嘗試從網頁中提取一些文本。 我要從中提取數據的頁面源是:

<tbody>
    <tr class="drx_dotted">
        <td class="drx_first">
            <span name="pharmacy"
                  longitude="-82.531457"
                  latitude="42.617612"
                  pharmacyname="CVS Pharmacy #"
                  address="1025 St Clair River Dr"
                  city="Algonac"
                  state="MI"
                  zip="48001"
                  phone="8107944941">
            </span>
            <p>
                <strong>CVS Pharmacy #</strong><br />
                1025 St Clair River Dr<br />
                Algonac, MI 48001<br />
                1-810-794-4941
            </p>
            <p>
                <a class=""
                   data-ajax="true"
                   data-ajax-method="post"
                   data-ajax-success="UpdateSearchPharmacyList"
                   href="/pfdn/SharedPharmacy/AddNetworkPharmacy?pharmacyNABP=2352324&amp;language=English">Add Pharmacy
                    <span class='HiddenText'> CVS Pharmacy #</span>
                </a>
            </p>
        </td>
        <td>
            <p>
                Retail
            </p>
        </td>
        <td>
            <p>
                Not applicable
            </p>
        </td>
    </tr>

我想將“不適用”拉到HTML代碼底部附近。 它是HTML源代碼中第三個“ td”中的“ p”。 還有很多,所以我想一次將所有這些標簽拉入python列表中。

這是我用來查找HTML的硒代碼:

x = driver.find_elements_by_xpath(
    '//[@id="divSearchResultContainer"]/div[2]/div[2]/table/tbody/tr/td[3]/p')

當我鍵入print(x)時,它會打印出以下內容:

[<selenium.webdriver.remote.webelement.WebElement object at 0x101f98210>,
 <selenium.webdriver.remote.webelement.WebElement object at 0x101f98250>,
 <selenium.webdriver.remote.webelement.WebElement object at 0x101f98290>]

因此,硒已經找到並提取了三個實例(這是正確的,應該可以找到三個實例)。 但是,當我嘗試使用來拉文本時;

print x[0].text

輸出為:

None

我嘗試了很多變化,甚至嘗試單獨查找每個元素,但是仍然無法正常工作。 有人遇到過這個問題嗎? 我該如何解決?

謝謝

問題是您有多個tr標簽,請獲取適當的標簽。 使用find_element_by_xpath()查找單個元素而不是列表,並使用以下xpath:

'//[@id="divSearchResultContainer"]/div[2]/div[2]/table/tbody/tr[1]/td[3]/p

python代碼:

element = driver.find_elements_by_xpath(
'//[@id="divSearchResultContainer"]/div[2]/div[2]/table/tbody/tr[1]/td[3]/p')

注意tr之后的[1] 這就是我們所說的只看第一個tr標簽。


還要注意的是, xpath你看起來脆弱-這是因為使用索引的:給我第二次div在這個div,然后第二次div在等發布與元素的完整內容divSearchResultContainer ID將有助於您提供有更好的解決方案。

對xpath嘗試一下,我還沒有測試過,但是xpath具有last()運算符,這是您想要的。

"//tbody//tr//td[last()]/p[last()]/text()"

暫無
暫無

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

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