如何通过 div class 排除所有带有 td class 的元素

How to find element by div class excluding all with td class

我正在使用 Xpath 并尝试查找所有具有 div class 名称 'day' 的 td,但不包括具有 [=55] td class 名称的所有 td =].

这是一个使用 selenium Xpath 的日历,select 仅匹配 div class 'day' 在 selected 月份。忽略上个月或未来一个月的任何 div class 'day'。

HTML

<tbody>
  <tr>
    <td class="invalid_day">
      <div class="day">29</div>
    <td class="invalid_day">
      <div class="day">30</div>
    <td class="invalid_day">
      <div class="day">31</div>
    <td>
      <div class="day">1</div>
    <td>
      <div class="day">2</div>
    <td>
      <div class="day">3</div>
    <td>
      <div class="day">4</div>
  </tr>
  <tr>
  #removed <td> 5 - 31 for brevity
    <td class="invalid_day">
      <div class="day">1</div>
  </tr>

在搜索论坛后,我尝试了很多方法,并且都通过 div class='day'.
获得了 td None 然而已经成功地过滤掉那些 td 为 td class='invalid_day'

尝试过的代码:

.find_elements_by_xpath('//td[./div[@class="day"]]')

Returns: 29,30,31,1,2,3,...31,1

尝试过的代码:

.find_elements_by_xpath('//td[./div[@class="day"] and not[@class="invalid_day"]]')

Returns: 空

还尝试了 css_selector 方法:

.find_elements_by_css_selector('.day:not(.invalid_day)')

Returns: 29,30,31,1,2,3,...31,1

我要找的结果: 1,2,3,...31

提前致谢!

你可以试试这个。

driver.find_elements_by_css_selector("td:not(.invalid_day)>div.day")

希望对您有所帮助。

下面的 XPath-1.0 表达式应该可以完成这项工作:

.find_elements_by_xpath('//div[@class="day" and not(../@class="invalid_day")]')

输出为:

1,2,3

要获取 <td> 元素,只需将 /.. 附加到 XPath 或使用以下表达式:

.find_elements_by_xpath('//td[./div/@class="day" and not(@class="invalid_day")]')

查找所有带有 class 作为 day<div> 标签,不包括父 <td> 带有 classinvalid_day1,2,3,...31,您可以使用以下任一项 based :

  • xpath 1: 忽略父元素 class invalid_day

    //td[not(@class='invalid_day')]//div[@class='day']
    

快照:

  • xpath 2:忽略具有任何父元素的元素 class

    //td[not(@class)]//div[@class='day']
    

快照:


参考

您可以在以下位置找到一些相关讨论:

你可以用 bs4 来做。

from bs4 import BeautifulSoup
import requests

response = requests.get(URL)
soup = BeautifulSoup(response.text, "lxml")

divs = soup.findAll("div", class_ = "day")

然后为了仅获取文本,您可以为列表中的每个项目执行 .text。