[英]Need a dynamic python selenium way of picking an element by xpath
这是它需要从中选择的 HTML:
<tbody class="datepickerDays">
<tr>
<th class="datepickerWeek"><a href="#"><span>40</span></a></th>
<td class="datepickerNotInMonth"><a href="#"><span>28</span></a></td>
<td class="datepickerNotInMonth"><a href="#"><span>29</span></a></td>
<td class="datepickerNotInMonth"><a href="#"><span>30</span></a></td>
<td class=""><a href="#"><span>1</span></a></td>
<td class=""><a href="#"><span>2</span></a></td>
<td class="datepickerSaturday"><a href="#"><span>3</span></a></td>
<td class="datepickerSunday"><a href="#"><span>4</span></a></td>
</tr>
<tr>
<th class="datepickerWeek"><a href="#"><span>41</span></a></th>
<td class=""><a href="#"><span>5</span></a></td>
<td class=""><a href="#"><span>6</span></a></td>
<td class=""><a href="#"><span>7</span></a></td>
<td class="datepickerSelected"><a href="#"><span>8</span></a></td>
<td class=""><a href="#"><span>9</span></a></td>
<td class="datepickerSaturday"><a href="#"><span>10</span></a></td>
<td class="datepickerSunday"><a href="#"><span>11</span></a></td>
</tr>
<tr>
<th class="datepickerWeek"><a href="#"><span>42</span></a></th>
<td class=""><a href="#"><span>12</span></a></td>
<td class=""><a href="#"><span>13</span></a></td>
<td class=""><a href="#"><span>14</span></a></td>
<td class=""><a href="#"><span>15</span></a></td>
<td class=""><a href="#"><span>16</span></a></td>
<td class="datepickerSaturday"><a href="#"><span>17</span></a></td>
<td class="datepickerSunday"><a href="#"><span>18</span></a></td>
</tr>
<tr>
<th class="datepickerWeek"><a href="#"><span>43</span></a></th>
<td class=""><a href="#"><span>19</span></a></td>
<td class=""><a href="#"><span>20</span></a></td>
<td class=""><a href="#"><span>21</span></a></td>
<td class=""><a href="#"><span>22</span></a></td>
<td class=""><a href="#"><span>23</span></a></td>
<td class="datepickerSaturday"><a href="#"><span>24</span></a></td>
<td class="datepickerSunday"><a href="#"><span>25</span></a></td>
</tr>
<tr>
<th class="datepickerWeek"><a href="#"><span>44</span></a></th>
<td class=""><a href="#"><span>26</span></a></td>
<td class=""><a href="#"><span>27</span></a></td>
<td class=""><a href="#"><span>28</span></a></td>
<td class=""><a href="#"><span>29</span></a></td>
<td class=""><a href="#"><span>30</span></a></td>
<td class="datepickerSaturday"><a href="#"><span>31</span></a></td>
<td class="datepickerNotInMonth datepickerSunday"><a href="#"><span>1</span></a></td>
</tr>
<tr>
<th class="datepickerWeek"><a href="#"><span>45</span></a></th>
<td class="datepickerNotInMonth"><a href="#"><span>2</span></a></td>
<td class="datepickerNotInMonth"><a href="#"><span>3</span></a></td>
<td class="datepickerNotInMonth"><a href="#"><span>4</span></a></td>
<td class="datepickerNotInMonth"><a href="#"><span>5</span></a></td>
<td class="datepickerNotInMonth"><a href="#"><span>6</span></a></td>
<td class="datepickerNotInMonth datepickerSaturday"><a href="#"><span>7</span></a></td>
<td class="datepickerNotInMonth datepickerSunday"><a href="#"><span>8</span></a></td>
</tr>
</tbody>
该代码应确定今天是什么日期并单击该日期。 我认为不需要月/年,因为程序将看到的唯一视图是当前月份。 如果您的解决方案也可以提供月份选择器,那就太好了。
所以我们需要当前日期(例如:8 号,而前一个日期是 5 号)、当前日期名称,程序需要根据它来选择。
目前的努力:
driver.find_element_by_xpath('//td[@class="datepickerSelected"]/a[text()="8"]').click()
但是 Selenium 没有点击它。
我无法向您展示完整的代码,或者我们正在使用它的网站,因为它在登录环境中。
使用以下xpath
查找元素。
driver.find_element_by_xpath('//td[@class="datepickerSelected"]/a[./span[text()="8"]]').click()
要获取今天的日期,您可以使用datetime
。 有关详细信息,请参阅文档。 拥有它后,您可以将日期插入定位器并单击该元素。
与您发布的 HTML 相比,您的定位器存在一些问题。
//td[@class="datepickerSelected"]/a[text()="8"]
这是在寻找具有 class“datepickerSelected”但它不存在于您发布的 HTML 中的 TD。 我假设 class 仅在您选择日期后出现,但当您首次进入页面时,情况并非如此,因此我们无法使用 class 来定位我们想要的日期。
text()
方法在指定元素内查找文本,在本例中为 A 标签。 如果您查看 HTML,文本实际上位于 A 标签的 SPAN 子标签内。 有几种方法可以解决这个问题。 您可以将定位器的那部分更改为/a/span[text()="8"]
或使用.
它“扁平化”了所有子元素的文本,例如/a[.="8"]
。 无论哪种方式都会起作用。
您必须处理的另一个问题是,如果这一天晚于或早于该月,那么它会在 HTML 中出现两次,例如 2 或 28。要获得正确的日期,您需要在 SPAN 中指定日期TD 为空 class。错误的 TD 为 class datepickerNotInMonth
。
考虑到所有这些,这是我将使用的代码。
import datetime
today = datetime.datetime.now().day
driver.find_element_by_xpath(f'//td[@class=""]/a[.="{today}"]').click()
定位器找到一个 TD,其中包含一个空的 class,它的子 A 包含对应于今天的(扁平化的)文本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.