在Python中使用selenium Xpath为日期选择器下拉菜单查找元素?

在Python中使用selenium Xpath为日期选择器下拉菜单查找元素?,python,html,selenium,drop-down-menu,datetimepicker,Python,Html,Selenium,Drop Down Menu,Datetimepicker,我想在下拉日期选择器中单击日期。总线发生错误无法定位元素。我试过: monyear=driver。通过xpath('/html/body/div[7]/div[1]/table/tbody/tr[5]/td[1]')查找元素。单击() 及 element=WebDriverWait(driver,30).until(ec.element可点击((By.XPATH,“/html/body/div[7]/div[1]/table/tbody/tr[5]/td[1]”)) 驱动程序。执行脚本(“参数[

我想在下拉日期选择器中单击日期。总线发生错误无法定位元素。我试过:

monyear=driver。通过xpath('/html/body/div[7]/div[1]/table/tbody/tr[5]/td[1]')查找元素。单击()

element=WebDriverWait(driver,30).until(ec.element可点击((By.XPATH,“/html/body/div[7]/div[1]/table/tbody/tr[5]/td[1]”))

驱动程序。执行脚本(“参数[0]。单击();”,元素)

但是没有一个为我工作请建议可能的解决方案。下面是dopbox的HTML代码和图像

<div class="datepicker dropdown-menu" style="display: block; top: 311.969px; left: 627.406px;">
 <div class="datepicker-days" style="display: block;">
  <table class=" table-condensed">
   <thead>
    <tr>
     <th class="prev">‹</th>
     <th colspan="5" class="switch">August 2020</th>
     <th class="next">›</th>
    </tr>
    <tr>
     <th class="dow">Su</th>
     <th class="dow">Mo</th>
     ...........
     <th class="dow">Sa</th>
    </tr></thead>
  <tbody>
   ............
   <tr>
    <td class="day  active">23</td>
    <td class="day ">24</td>
    <td class="day ">25</td>
    <td class="day ">26</td>
    <td class="day ">27</td>
    <td class="day ">28</td>
    <td class="day ">29</td></tr>
   <tr>

‹
2020年8月
›
苏
钼
...........
Sa
............
23
24
25
26
27
28
29

我发现了这两个框架:

<iframe src="chrome-extension://kdfieneakcjfaiglcfcgkidlkmlijjnh/writer/index.html"></iframe>
<iframe class="ginger-banner-frame" style="width:385px;height:85px;" ng-src="https://cdn.gingersoftware.com/banners/default/chromeextension.writer.underTools.html" src="https://cdn.gingersoftware.com/banners/default/chromeextension.writer.underTools.html"></iframe>


这些可能是chrome的扩展。它们有什么影响吗?

为什么不编写绝对xPath,而可以编写更简短、更易于调试的相对xPath。比如

date = 19 # You can choose any date
dateXpath = "//td[contains(@Class,'day') and text()="+str(date)+"]"


# Clicking on calendar input
driver.find_element_by_id('startDateToday').click()

# Clicking on Date
WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.XPATH, dateXpath))).click()

# Bug with page, as after clicking on date calendar is not closing. So clicking outside
WebDriverWait(driver, 30).until(
    EC.element_to_be_clickable((By.XPATH, "//label[contains(text(),'Total Rows')]"))).click()
注意:

  • 我假设你的日期选择器和你的页面在同一个框架中。如果有单独的iFrame,则需要相应地进行处理

  • 上述解决方案假设您希望单击当前打开月份/年份的日期(在本例中为2020年8月)。如果您想更改不同的月份/年份,您必须相应地识别相应的元素,并在代码中进行修改


  • 没有这样的框架(您也可以在上面的html中看到),相对路径也显示了类似的错误。原因可能是什么?您的xpath没有标识任何日期。尝试使用我在答案部分提供的xpath。我尝试了相同的方法,但仍然不起作用。类似的问题:TimeoutException消息HTML主体部分上方的部分中没有任何帧。当我搜索时,请使用编辑后的答案。早期的代码有一个小问题,因为类中有额外的s,C是小字母表,而不是C。上面将帮助您选择开放月份的任何日期。此外,在页面中还有一个错误,因为在点击日期日历后,日历没有关闭,这就是为什么需要最后一行。