在 Python 中使用 selenium Xpath 找到日期选择器下拉菜单的元素?
Locate element with selenium Xpath for date picker drop-down menu in Python?
我想点击下拉日期选择器中的日期。总线发生错误 无法定位元素。我试过了:
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)
但其中 none 对我有用。 请提出可能的解决方案。这是 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 个扩展名。它们有什么作用吗?
而不是写绝对 xPath 为什么你可以更短和更容易调试相对 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()
注:
我假设您的日期选择器与您的页面位于同一框架中。如果有单独的 iFrame,您需要相应地处理。
以上解决方案假设您要点击当前打开的日期 month/year(在本例中为 2020 年 8 月)。如果您想更改不同的月份/年份,则必须相应地识别各个元素并在代码中进行修改。
我想点击下拉日期选择器中的日期。总线发生错误 无法定位元素。我试过了:
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)
但其中 none 对我有用。 请提出可能的解决方案。这是 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 个扩展名。它们有什么作用吗?
而不是写绝对 xPath 为什么你可以更短和更容易调试相对 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()
注:
我假设您的日期选择器与您的页面位于同一框架中。如果有单独的 iFrame,您需要相应地处理。
以上解决方案假设您要点击当前打开的日期 month/year(在本例中为 2020 年 8 月)。如果您想更改不同的月份/年份,则必须相应地识别各个元素并在代码中进行修改。