I'm using Xpath and trying to find all td's with a div class name of 'day' excluding those with a td class name of 'invalid_day'.
This is for a calendar using selenium Xpath to select only the matching div class 'day' in the selected month. Ignoring any div class 'day' from the previous or future month.
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>
After searching the forum I have tried quite few approaches and all get the td's with div class='day'.
None however have been successful in filtering out those td's with a td class='invalid_day'
Code tried:
.find_elements_by_xpath('//td[./div[@class="day"]]')
Returns: 29,30,31,1,2,3,...31,1
Code tried:
.find_elements_by_xpath('//td[./div[@class="day"] and not[@class="invalid_day"]]')
Returns: empty
Also tried the css_selector method with:
.find_elements_by_css_selector('.day:not(.invalid_day)')
Returns: 29,30,31,1,2,3,...31,1
Results I am looking for: 1,2,3,...31
Thanks in advance!
You can try this:
driver.find_elements_by_css_selector("td:not(.invalid_day)>div.day")