【问题标题】:Selenium span click works on 1 calendar but not the second calendar (Python)Selenium span click 适用于 1 个日历,但不适用于第二个日历(Python)
【发布时间】:2020-04-29 13:59:40
【问题描述】:

我正在尝试从 2 个下拉日历中选择 2 个日期。

我下面的代码适用于第一个日历<span>,但不适用于第二个日历<span>。 HTML代码一模一样?

我正在使用:

return_date = driver.find_element_by_xpath('//span[text() = " Day "]').click()

HTML 布局

日历 1: 搜索包含文本的跨度 (30) - 有效。

<td aria-selected="true" class="datepicker__day" role="gridcell">
<span data-ts-automation="datepicker-day-30"> 30 </span>
<!---->
</td>

日历 2: 正在搜索包含文本 (14) 的跨度 - 错误:元素不可交互。

<td aria-selected="true" class="datepicker__day" role="gridcell">
<!---->
<span data-ts-automation="datepicker-day-14"> 14 </span>
</td>

【问题讨论】:

  • 我只是在这里猜测,但如果那是四月的日历,那么 30 是未来,14 是过去——也许那个应用程序不允许你选择过去的日期?
  • 对不起,我的错。第 30 天是 2020 年 4 月,第 14 天是 2020 年 5 月。
  • 作为调试步骤,可以在点击之前打印元素吗?也许你得到了一些其他元素,其中包含你没想到的文本 14
  • 您是否可以在普通浏览器会话中手动单击该元素?
  • 我可以在 chrome 浏览器上自己手动单击元素。如果我打印元素,它会给我一个会话和元素 ID。类型:

标签: python html python-3.x selenium web-scraping


【解决方案1】:

那是因为 selenium 从页面的 TopLeft 搜索,并且它在第一个日历中找到当时不可交互的返回日期。您需要在这里使用索引来告诉 selenium 在第二个日历中查找。使用下面的 xpath:

return_date = driver.find_element_by_xpath("(//span[text() = ' Day '])[2]").click()

希望这会有所帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    相关资源
    最近更新 更多