在 python selenium 中使用重复标签查找元素

Element finding with repeated tags in python selenium

这是我在网站上的html:

<table class="table table-fixed table-header-right text-medium">
    <tbody><tr><th class="no-border">Certification Number</th><td class="no-border">48487270</td></tr>
        <tr>
            <th>Label Type</th>
            <td>
                    <img width="69" height="38" class="margin-right-min" alt="" aria-hidden="true" src="https://i.psacard.com/psacard/images/cert/table-image-ink.png" style="">
                    <span class="inline-block padding-top-min">with fugitive ink technology</span>
            </td>
        </tr>
    <tr><th>Reverse Cert Number/Barcode</th><td>Yes</td></tr>
    <tr><th>Year</th><td>2020</td></tr>
    <tr><th>Brand</th><td>TOPPS</td></tr>
    <tr><th>Sport</th><td>BASEBALL CARDS</td></tr>
    <tr><th>Card Number</th><td>20</td></tr>
    <tr><th>Player</th><td>ARISTIDES AQUINO</td></tr>
    <tr><th>Variety/Pedigree</th><td></td></tr>

    <tr><th>Grade</th><td>NM-MT 8</td></tr>
                    </tbody></table>

我正在尝试找出一种方法来获取年份并将其设置为变量,我查找元素的正常方法是使用 XPath,但由于这些标签重复了很多次而没有其他指示符,我不确定如何去做这件事。年份会变,所以我无法通过文本搜索。任何帮助将不胜感激。

首先我们需要使用 driver.findelements 函数使用该类名

找出 webelements

然后我们可以从该列表中获取元素

来自 list.get(index)

或者, 您可以将所有 td/th 元素存储在一个列表中,然后在列表中搜索您要查找的年份。

使用 BeautifulSoup 查找带有文本 'Year'<th> 标签。然后找到下一个 <td> 标签并从中提取文本:

from bs4 import BeautifulSoup

html = '''<table class="table table-fixed table-header-right text-medium">
    <tbody><tr><th class="no-border">Certification Number</th><td class="no-border">48487270</td></tr>
        <tr>
            <th>Label Type</th>
            <td>
                    <img width="69" height="38" class="margin-right-min" alt="" aria-hidden="true" src="https://i.psacard.com/psacard/images/cert/table-image-ink.png" style="">
                    <span class="inline-block padding-top-min">with fugitive ink technology</span>
            </td>
        </tr>
    <tr><th>Reverse Cert Number/Barcode</th><td>Yes</td></tr>
    <tr><th>Year</th><td>2020</td></tr>
    <tr><th>Brand</th><td>TOPPS</td></tr>
    <tr><th>Sport</th><td>BASEBALL CARDS</td></tr>
    <tr><th>Card Number</th><td>20</td></tr>
    <tr><th>Player</th><td>ARISTIDES AQUINO</td></tr>
    <tr><th>Variety/Pedigree</th><td></td></tr>

    <tr><th>Grade</th><td>NM-MT 8</td></tr>
                    </tbody></table>'''
                    
soup = BeautifulSoup(html, 'html.parser')
year = soup.find('th', text='Year').find_next('td').text

print(year)

输出:

'2020'