在 python 中使用 selenium 跳过空文本节点

时间:2021-02-21 15:55:10

标签: python selenium selenium-webdriver

HTML:

<tbody>
       <tr >
           <td> Type1 </td>
           <td class="wpsTableNrmRow" > This is Node1
               <a href:applicatiodetailaddress> all Nodes </a>
           </td>
       </tr>
       <tr >
           <td> Type2 </td>
           <td class="wpsTableNrmRow" > This is Node2 </td>
       </tr>
       <tr >
           <td> Type3 </td>
           <td class="wpsTableNrmRow" > </td>
       </tr>
</tbody>

代码:

applicationData = [td.get_attribute("textContent").split("\n")[0] for td in webBrowser.find_elements_by_xpath('//td[@class="wpsTableNrmRow"]')]
print(applicationData)

输出:

 ["This is Node1", "This is Node2", ""]

我正在从表格中抓取数据,同时也抓取了空文本。我不想刮空文本。

我尝试了 ('//td[normalize-space(@class="wpsTableNrmRow")]')('//td[@class="wpsTableNrmRow"]')/*normalize-space()(//td[@class="wpsTableNrmRow"]/*[.!='']),但没有奏效。

我该怎么做?

3 个答案:

答案 0 :(得分:0)

您可以对 list comprehensions 应用条件,如果变量通过条件,它会将函数应用于变量。

像这样:

[f(x) for x in sequence if condition]

应用于您的代码:

applicationData = [td.get_attribute("textContent").split("\n")[0] for td in webBrowser.find_elements_by_xpath('//td[@class="wpsTableNrmRow"]') if td.get_attribute("textContent").strip() == ""]
print(applicationData)

答案 1 :(得分:0)

您可以使用 locor 来确保文本不为空:

//td[@class="wpsTableNrmRow" and text()!=" "]

所以使用:

applicationData = [td.get_attribute("textContent").split("\n")[
    0] for td in driver.find_elements_by_xpath('//td[@class="wpsTableNrmRow" and text()!=" " and text()!=""]')]
print(applicationData)

答案 2 :(得分:0)

translate 函数看起来可以很好地解决您的问题:

applicationData = [td.get_attribute("textContent").split("\n")[0] for td in webBrowser.find_elements_by_xpath('//td[@class="wpsTableNrmRow" and translate(text(), " ", "")]')]
print(applicationData)