【问题标题】:Get table row text python selenium获取表格行文本 python selenium
【发布时间】:2019-10-12 20:58:51
【问题描述】:

这是html

<table id="dataLstSubCat" cellspacing="0" style="border-collapse:collapse;">
    <tbody><tr>
        <td style="font-weight:normal;font-style:normal;text-decoration:none;white-space:nowrap;">
                        <a onclick="ShowHideProduct();" id="dataLstSubCat_LnkBtnSubCat_0" href="javascript:__doPostBack('dataLstSubCat$ctl00$LnkBtnSubCat','')">Primers</a>
                      </td><td style="font-weight:normal;font-style:normal;text-decoration:none;white-space:nowrap;">
                        <a onclick="ShowHideProduct();" id="dataLstSubCat_LnkBtnSubCat_1" href="javascript:__doPostBack('dataLstSubCat$ctl01$LnkBtnSubCat','')">Intermediates</a>
                      </td><td style="font-weight:normal;font-style:normal;text-decoration:none;white-space:nowrap;">
                        <a onclick="ShowHideProduct();" id="dataLstSubCat_LnkBtnSubCat_2" href="javascript:__doPostBack('dataLstSubCat$ctl02$LnkBtnSubCat','')">Finishes</a>
                      </td>
    </tr>
</tbody></table>

现在我想提取表格数据(td)文本 比如我想提取文字

[底漆、中间漆、饰面]

这是我尝试过的

new_text=driver.find_element_by_xpath(("//table[@id='dataLstSubCat']/tbody/tr"))
new_text.text

在字符串中给出 o/p 而不是在列表中

Primers Intermediates Finishes

有什么办法可以做到的。

【问题讨论】:

  • new_text.text.split(' ') 能解决问题吗?
  • @Nathan 如果 tr 元素在文本中有空格,它将不再起作用
  • @Nathan ,它不会解决问题,因为 space 不会是分割的标准,例如考虑 Dry Primers 是一个单词,如果我用空格分割它不会解决目的

标签: python selenium xpath css-selectors webdriverwait


【解决方案1】:

一种选择是使用find_elements_by_xpath,然后使用for loop 将其添加到列表中,例如:

list = []
new_text=driver.find_elements_by_xpath(("//table[@id='dataLstSubCat']/tbody/tr/td"))
for text in new_text:
   list.append(text.text)

【讨论】:

  • 它将其视为单个字符串 ['Primers Intermediates Finishes'] 而不是单独的列表元素。
  • 啊,我明白了,可能您需要更新 xpath 以使用表的 td 元素 "//table[@id='dataLstSubCat']/tbody/tr/td"
【解决方案2】:

要提取表格数据[Primers,Intermediates,Finishes],您可以使用以下任一Locator Strategies

  • 使用CSS_SELECTOR

    print([my_text_elem.get_attribute("innerHTML") for my_text_elem in WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "table#dataLstSubCat>tbody>tr td>a")))])
    
  • 使用XPATH

    print([my_text_elem.get_attribute("innerHTML") for my_text_elem in WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.XPATH, "//table[@id='dataLstSubCat']/tbody/tr//td/a")))])
    
  • 注意:您必须添加以下导入:

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

【讨论】:

    猜你喜欢
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    • 2015-02-19
    • 2021-11-19
    • 1970-01-01
    • 2018-06-30
    相关资源
    最近更新 更多