【问题标题】:In Selenium, how can I locate second <td> element in <tr> tag?在 Selenium 中,如何在 <tr> 标签中找到第二个 <td> 元素?
【发布时间】:2017-07-11 02:35:31
【问题描述】:

我想在 tr 标签中找到第二个 td 元素,它有 4 个 td 标签。 这是我想从那里得到的 HTML 代码。

<tr>
    <td width="10%" class="cell">&nsp;</td>
    <td class="cell" width="40%">Sports</td>
    <td class="cell rgt" width="40%">-29.94</td>
    <td width="10%" class="cell">&nsp;</td>
</tr>
<tr>
    <td class="cell">&nsp;</td>
    <td class="cell">Casino</td>
    <td class="cell rgt">464.22</td>
    <td class="cell">&nsp;</td>
</tr>
<tr>
    <td class="cell">&nsp;</td>
    <td class="cell">Poker</td>
    <td class="cell rgt">14.29</td>
    <td class="cell">&nsp;</td>
</tr>
<tr>
    <td class="cell">&nsp;</td>
    <td class="cell">Games / Bingo</td>
    <td class="cell rgt">145.17</td>
    <td class="cell">&nsp;</td>
</tr>
<tr>
    <td class="cell">&nsp;</td>
    <td class="cell b">Total</td>
    <td class="cell b rgt">593.75</td>
    <td class="cell b">&nsp;</td>
</tr>
<tr class="c3">
    <td class="cell">&nsp;</td>
    <td class="cell b">Withdrawals to date</td>
    <td class="cell b rgt">0.00</td>
    <td class="cell">&nsp;</td>
</tr>
<tr class="c3">
    <td class="cell">&nsp;</td>
    <td class="cell b">Balance</td>
    <td class="cell b rgt">593.75</td>
    <td class="cell">&nsp;</td>
</tr>

我想得到类似的数据

Sports, -29.94
Casino, 434.22
Poker, 14.29
Games / Bingo, 145.17
Total, 593.75
Withdrawals to date, 0.00
Balance, 593.75

这是我为获取数据而编写的 sn-p 代码。

bet365 = webdriver.Chrome()
bet365.get("https://www.abcde.com")
...
for incomes in bet365.find_elements_by_class_name("rgt"):
    if incomes.text != "Close Window":
        print(incomes.text)
        Earning = incomes.find_element_by_xpath('..').find_element_by_xpath("//td[2]")
        print(Earning.text)

如您所见,我可以从 HTML 代码中获取所有数字,例如

-29.94
464.22
14.29
145.17
593.75
0.00
593.75

但我无法获得体育、赌场等。

如何自动获取它们。

【问题讨论】:

    标签: python html selenium


    【解决方案1】:

    你犯了一个小错误。

    替换

    Earning = incomes.find_element_by_xpath('..').find_element_by_xpath("//td[2]")
    

    Earning = incomes.find_element_by_xpath('..').find_element_by_xpath(".//td[2]")
    

    应该有一个“。”在“td”前面,这样驱动程序就不会在整个 HTML 页面中搜索该元素。该元素应该从当前元素开始搜索。

    【讨论】:

    • 您应该能够将两个find_*s 组合成一个XPath,incomes.find_element_by_xpath("./../td[2]"). 从当前上下文开始,/.. 上升一个到父元素,然后/.td[2] 下降到第二个 td 元素。
    【解决方案2】:

    由于你想得到的 td 总是出现在你得到的之前,你可以尝试像这样获取前面的兄弟:

    incomes.find_element_by_xpath('..').find_element_by_xpath("//td[2]/preceding-sibling::td")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-29
      • 1970-01-01
      • 1970-01-01
      • 2015-02-11
      • 2019-03-28
      • 2023-04-01
      • 1970-01-01
      • 2021-01-11
      相关资源
      最近更新 更多