【问题标题】:Locate element with selenium Xpath for date picker drop-down menu in Python?在 Python 中使用 selenium Xpath 查找日期选择器下拉菜单的元素?
【发布时间】:2020-08-23 17:08:15
【问题描述】:

我想点击下拉日期选择器中的日期。 Bus 发生错误无法定位元素。我试过了:

monyear = driver.find_element_by_xpath('/html/body/div[7]/div[1]/table/tbody/tr[5]/td[1]').click()

element=WebDriverWait(driver,30).until(ec.element_to_be_clickable((By.XPATH,"/html/body/div[7]/div[1]/table/tbody/tr[5]/td[1]")))

driver.execute_script("arguments[0].click();", element)

但没有一个对我有用。 请提出可能的解决方案。这是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>

我找到了这两个框架:

<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 扩展。它们有什么作用吗?

【问题讨论】:

    标签: python html selenium drop-down-menu datetimepicker


    【解决方案1】:

    为什么您可以更短更容易地调试相对 xpth,而不是编写绝对 xpth。有点像

    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()
    

    注意:

    1. 我假设您的日期选择器与您的页面位于同一框架中。如果有单独的 iFrame,则需要进行相应处理。 Getting "Nosuch element Exception" in Selenium Though XPATH is correct. Not sure is this due to Shadow DOM. Please confirm

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

    【讨论】:

    • 没有这样的框架(你也可以在上面的html中看到)并且相对路径也显示了类似的错误。可能是什么原因?
    • 您的 xpath 没有识别任何日期。尝试使用我在答案部分提供的 xpath。
    • 我尝试了同样的方法,但仍然无法正常工作。类似问题:TimeoutException 消息
    • HTML 正文部分上方的部分中没有任何框架。当我搜索
    • 请使用编辑后的答案。早期代码有一个小问题,因为类中有额外的 s,而 C 是小字母而不是 C。上面将帮助您从开放月份中选择任何日期。页面中还有一个错误,因为单击日期日历后没有关闭,这就是需要最后一行的原因。
    猜你喜欢
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2022-11-11
    • 2023-03-15
    • 2021-11-21
    相关资源
    最近更新 更多