javascript - 在 python 中使用 selenium 单击相同的按钮配置
问题描述
我正在尝试单击相同类的按钮。我怎样才能一个一个地点击。
我正在使用下面的python代码
clk_but1 = wait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//button[@class = ('applyBtn btn btn-sm btn-red')]")))
driver.execute_script("arguments[0].click();", clk_but1)
clk_but2 = wait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//button[@class = ('applyBtn btn btn-sm btn-red')]")))
driver.execute_script("arguments[0].click();", clk_but2)
以下是 HTML 代码:
<div class="daterangepicker dropdown-menu ltr opensright show-calendar"
style="display: block; top: 118px; left: auto; right: 0px;">
<div class="ranges">
<ul>
<li data-range-key="Yesterday" class="">Yesterday</li>
<li data-range-key="Last 7 Days">Last 7 Days</li>
<li data-range-key="Last 30 Days">Last 30 Days</li>
<li data-range-key="Last 45 Days">Last 45 Days</li>
<li data-range-key="Last 60 Days">Last 60 Days</li>
<li data-range-key="Last 90 Days">Last 90 Days</li>
<li data-range-key="This Month">This Month</li>
<li data-range-key="Last Month">Last Month</li>
<li data-range-key="Custom Range" class="active">Custom Range</li>
</ul>
<div class="range_inputs">
<button class="applyBtn btn btn-sm btn-red" type="button">Apply</button>
<button class="cancelBtn btn btn-sm btn-gray" type="button">Cancel</button></div>
</div>
<div class="calendar left">
<div class="daterangepicker_input">
<input class="input-mini form-control active" type="text" name="daterangepicker_start" value="">
<i class="fa fa-calendar glyphicon glyphicon-calendar"></i>
<div class="calendar-time" style="display: none;">
<div></div>
<i class="fa fa-clock-o glyphicon glyphicon-time"></i>
</div>
</div>
<div class="calendar-table">
<table class="table-condensed">
<thead>
<tr>
<th class="prev available">
<i class="fa fa-chevron-left glyphicon glyphicon-chevron-left"></i></th>
<th colspan="5" class="month">May 2017</th>
<th></th>
</tr>
<tr>
<th>Su</th>
<th>Mo</th>
<th>Tu</th>
<th>We</th>
<th>Th</th>
<th>Fr</th>
<th>Sa</th>
</tr>
</thead>
<tbody>
<tr>
<td class="weekend off available" data-title="r0c0">30</td>
<td class="available" data-title="r0c1">1</td>
<td class="available" data-title="r0c2">2</td>
<td class="available" data-title="r0c3">3</td>
<td class="available" data-title="r0c4">4</td>
<td class="available" data-title="r0c5">5</td>
<td class="weekend available" data-title="r0c6">6</td>
</tr>
<tr>
<td class="weekend available" data-title="r1c0">7</td>
<td class="available" data-title="r1c1">8</td>
<td class="available" data-title="r1c2">9</td>
<td class="available" data-title="r1c3">10</td>
<td class="available" data-title="r1c4">11</td>
<td class="available" data-title="r1c5">12</td>
<td class="weekend available" data-title="r1c6">13</td>
</tr>
<tr>
<td class="weekend available" data-title="r2c0">14</td>
<td class="available" data-title="r2c1">15</td>
<td class="available" data-title="r2c2">16</td>
<td class="active start-date available" data-title="r2c3">17</td>
<td class="in-range available" data-title="r2c4">18</td>
<td class="in-range available" data-title="r2c5">19</td>
<td class="weekend in-range available" data-title="r2c6">20</td>
</tr>
<tr>
<td class="weekend in-range available" data-title="r3c0">21</td>
<td class="in-range available" data-title="r3c1">22</td>
<td class="in-range available" data-title="r3c2">23</td>
<td class="in-range available" data-title="r3c3">24</td>
<td class="in-range available" data-title="r3c4">25</td>
<td class="in-range available" data-title="r3c5">26</td>
<td class="weekend in-range available" data-title="r3c6">27</td>
</tr>
<tr>
<td class="weekend in-range available" data-title="r4c0">28</td>
<td class="in-range available" data-title="r4c1">29</td>
<td class="in-range available" data-title="r4c2">30</td>
<td class="in-range available" data-title="r4c3">31</td>
<td class="off in-range available" data-title="r4c4">1</td>
<td class="off in-range available" data-title="r4c5">2</td>
<td class="weekend off in-range available" data-title="r4c6">3</td>
</tr>
<tr>
<td class="weekend off in-range available" data-title="r5c0">4</td>
<td class="off in-range available" data-title="r5c1">5</td>
<td class="off in-range available" data-title="r5c2">6</td>
<td class="off in-range available" data-title="r5c3">7</td>
<td class="off in-range available" data-title="r5c4">8</td>
<td class="off in-range available" data-title="r5c5">9</td>
<td class="weekend off in-range available" data-title="r5c6">10</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="calendar right">
<div class="daterangepicker_input">
<input class="input-mini form-control" type="text" name="daterangepicker_end" value=""><i class="fa fa-calendar glyphicon glyphicon-calendar"></i>
<div class="calendar-time" style="display: none;">
<div></div>
<i class="fa fa-clock-o glyphicon glyphicon-time"></i>
</div>
</div>
<div class="calendar-table">
<table class="table-condensed">
<thead>
<tr>
<th></th>
<th colspan="5" class="month">Jun 2017</th>
<th class="next available"><i class="fa fa-chevron-right glyphicon glyphicon-chevron-right"></i></th>
</tr>
<tr>
<th>Su</th>
<th>Mo</th>
<th>Tu</th>
<th>We</th>
<th>Th</th>
<th>Fr</th>
<th>Sa</th>
</tr>
</thead>
<tbody>
<tr>
<td class="weekend off in-range available" data-title="r0c0">28</td>
<td class="off in-range available" data-title="r0c1">29</td>
<td class="off in-range available" data-title="r0c2">30</td>
<td class="off in-range available" data-title="r0c3">31</td>
<td class="in-range available" data-title="r0c4">1</td>
<td class="in-range available" data-title="r0c5">2</td>
<td class="weekend in-range available" data-title="r0c6">3</td>
</tr>
<tr>
<td class="weekend in-range available" data-title="r1c0">4</td>
<td class="in-range available" data-title="r1c1">5</td>
<td class="in-range available" data-title="r1c2">6</td>
<td class="in-range available" data-title="r1c3">7</td>
<td class="in-range available" data-title="r1c4">8</td>
<td class="in-range available" data-title="r1c5">9</td>
<td class="weekend in-range available" data-title="r1c6">10</td>
</tr>
<tr>
<td class="weekend in-range available" data-title="r2c0">11</td>
<td class="in-range available" data-title="r2c1">12</td>
<td class="active end-date in-range available" data-title="r2c2">13</td>
<td class="available" data-title="r2c3">14</td>
<td class="available" data-title="r2c4">15</td>
<td class="available" data-title="r2c5">16</td>
<td class="weekend available" data-title="r2c6">17</td>
</tr>
<tr>
<td class="weekend available" data-title="r3c0">18</td>
<td class="available" data-title="r3c1">19</td>
<td class="available" data-title="r3c2">20</td>
<td class="available" data-title="r3c3">21</td>
<td class="available" data-title="r3c4">22</td>
<td class="available" data-title="r3c5">23</td>
<td class="weekend available" data-title="r3c6">24</td>
</tr>
<tr>
<td class="weekend available" data-title="r4c0">25</td>
<td class="available" data-title="r4c1">26</td>
<td class="available" data-title="r4c2">27</td>
<td class="available" data-title="r4c3">28</td>
<td class="available" data-title="r4c4">29</td>
<td class="available" data-title="r4c5">30</td>
<td class="weekend off available" data-title="r4c6">1</td>
</tr>
<tr>
<td class="weekend off available" data-title="r5c0">2</td>
<td class="off available" data-title="r5c1">3</td>
<td class="off available" data-title="r5c2">4</td>
<td class="off available" data-title="r5c3">5</td>
<td class="off available" data-title="r5c4">6</td>
<td class="off available" data-title="r5c5">7</td>
<td class="weekend off available" data-title="r5c6">8</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="daterangepicker dropdown-menu ltr opensright show-calendar" style="display: none; top: 118px; left: auto; right: 0px;">
<div class="ranges">
<ul>
<li data-range-key="Yesterday" class="">Yesterday</li>
<li data-range-key="Last 7 Days">Last 7 Days</li>
<li data-range-key="Last 30 Days">Last 30 Days</li>
<li data-range-key="Last 45 Days">Last 45 Days</li>
<li data-range-key="Last 60 Days">Last 60 Days</li>
<li data-range-key="Last 90 Days">Last 90 Days</li>
<li data-range-key="This Month">This Month</li>
<li data-range-key="Last Month">Last Month</li>
<li data-range-key="Custom Range" class="active">Custom Range</li>
</ul>
<div class="range_inputs">
<button class="applyBtn btn btn-sm btn-red" type="button">Apply</button>
<button class="cancelBtn btn btn-sm btn-gray" type="button">Cancel</button></div>
</div>
<div class="calendar left">
<div class="daterangepicker_input">
<input class="input-mini form-control active" type="text" name="daterangepicker_start" value=""><i class="fa fa-calendar glyphicon glyphicon-calendar"></i>
<div class="calendar-time" style="display: none;">
<div></div>
<i class="fa fa-clock-o glyphicon glyphicon-time"></i>
</div>
</div>
<div class="calendar-table">
<table class="table-condensed">
<thead>
<tr>
<th class="prev available"><i class="fa fa-chevron-left glyphicon glyphicon-chevron-left"></i></th>
<th colspan="5" class="month">May 2017</th>
<th></th>
</tr>
<tr>
<th>Su</th>
<th>Mo</th>
<th>Tu</th>
<th>We</th>
<th>Th</th>
<th>Fr</th>
<th>Sa</th>
</tr>
</thead>
<tbody>
<tr>
<td class="weekend off available" data-title="r0c0">30</td>
<td class="available" data-title="r0c1">1</td>
<td class="available" data-title="r0c2">2</td>
<td class="available" data-title="r0c3">3</td>
<td class="available" data-title="r0c4">4</td>
<td class="available" data-title="r0c5">5</td>
<td class="weekend available" data-title="r0c6">6</td>
</tr>
<tr>
<td class="weekend available" data-title="r1c0">7</td>
<td class="available" data-title="r1c1">8</td>
<td class="available" data-title="r1c2">9</td>
<td class="available" data-title="r1c3">10</td>
<td class="available" data-title="r1c4">11</td>
<td class="available" data-title="r1c5">12</td>
<td class="weekend available" data-title="r1c6">13</td>
</tr>
<tr>
<td class="weekend available" data-title="r2c0">14</td>
<td class="active start-date available" data-title="r2c1">15</td>
<td class="in-range available" data-title="r2c2">16</td>
<td class="in-range available" data-title="r2c3">17</td>
<td class="in-range available" data-title="r2c4">18</td>
<td class="in-range available" data-title="r2c5">19</td>
<td class="weekend in-range available" data-title="r2c6">20</td>
</tr>
<tr>
<td class="weekend in-range available" data-title="r3c0">21</td>
<td class="in-range available" data-title="r3c1">22</td>
<td class="in-range available" data-title="r3c2">23</td>
<td class="in-range available" data-title="r3c3">24</td>
<td class="in-range available" data-title="r3c4">25</td>
<td class="in-range available" data-title="r3c5">26</td>
<td class="weekend in-range available" data-title="r3c6">27</td>
</tr>
<tr>
<td class="weekend in-range available" data-title="r4c0">28</td>
<td class="in-range available" data-title="r4c1">29</td>
<td class="in-range available" data-title="r4c2">30</td>
<td class="in-range available" data-title="r4c3">31</td>
<td class="off in-range available" data-title="r4c4">1</td>
<td class="off in-range available" data-title="r4c5">2</td>
<td class="weekend off in-range available" data-title="r4c6">3</td>
</tr>
<tr>
<td class="weekend off in-range available" data-title="r5c0">4</td>
<td class="off in-range available" data-title="r5c1">5</td>
<td class="off in-range available" data-title="r5c2">6</td>
<td class="off in-range available" data-title="r5c3">7</td>
<td class="off in-range available" data-title="r5c4">8</td>
<td class="off in-range available" data-title="r5c5">9</td>
<td class="weekend off in-range available" data-title="r5c6">10</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="calendar right">
<div class="daterangepicker_input">
<input class="input-mini form-control" type="text" name="daterangepicker_end" value=""><i class="fa fa-calendar glyphicon glyphicon-calendar"></i>
<div class="calendar-time" style="display: none;">
<div></div>
<i class="fa fa-clock-o glyphicon glyphicon-time"></i>
</div>
</div>
<div class="calendar-table">
<table class="table-condensed">
<thead>
<tr>
<th></th>
<th colspan="5" class="month">Jun 2017</th>
<th class="next available"><i class="fa fa-chevron-right glyphicon glyphicon-chevron-right"></i></th>
</tr>
<tr>
<th>Su</th>
<th>Mo</th>
<th>Tu</th>
<th>We</th>
<th>Th</th>
<th>Fr</th>
<th>Sa</th>
</tr>
</thead>
<tbody>
<tr>
<td class="weekend off in-range available" data-title="r0c0">28</td>
<td class="off in-range available" data-title="r0c1">29</td>
<td class="off in-range available" data-title="r0c2">30</td>
<td class="off in-range available" data-title="r0c3">31</td>
<td class="in-range available" data-title="r0c4">1</td>
<td class="in-range available" data-title="r0c5">2</td>
<td class="weekend in-range available" data-title="r0c6">3</td>
</tr>
<tr>
<td class="weekend in-range available" data-title="r1c0">4</td>
<td class="in-range available" data-title="r1c1">5</td>
<td class="in-range available" data-title="r1c2">6</td>
<td class="in-range available" data-title="r1c3">7</td>
<td class="in-range available" data-title="r1c4">8</td>
<td class="in-range available" data-title="r1c5">9</td>
<td class="weekend in-range available" data-title="r1c6">10</td>
</tr>
<tr>
<td class="weekend in-range available" data-title="r2c0">11</td>
<td class="in-range available" data-title="r2c1">12</td>
<td class="in-range available" data-title="r2c2">13</td>
<td class="in-range available" data-title="r2c3">14</td>
<td class="in-range available" data-title="r2c4">15</td>
<td class="in-range available" data-title="r2c5">16</td>
<td class="weekend in-range available" data-title="r2c6">17</td>
</tr>
<tr>
<td class="weekend active end-date in-range available" data-title="r3c0">18</td>
<td class="available" data-title="r3c1">19</td>
<td class="available" data-title="r3c2">20</td>
<td class="available" data-title="r3c3">21</td>
<td class="available" data-title="r3c4">22</td>
<td class="available" data-title="r3c5">23</td>
<td class="weekend available" data-title="r3c6">24</td>
</tr>
<tr>
<td class="weekend available" data-title="r4c0">25</td>
<td class="available" data-title="r4c1">26</td>
<td class="available" data-title="r4c2">27</td>
<td class="available" data-title="r4c3">28</td>
<td class="available" data-title="r4c4">29</td>
<td class="available" data-title="r4c5">30</td>
<td class="weekend off available" data-title="r4c6">1</td>
</tr>
<tr>
<td class="weekend off available" data-title="r5c0">2</td>
<td class="off available" data-title="r5c1">3</td>
<td class="off available" data-title="r5c2">4</td>
<td class="off available" data-title="r5c3">5</td>
<td class="off available" data-title="r5c4">6</td>
<td class="off available" data-title="r5c5">7</td>
<td class="weekend off available" data-title="r5c6">8</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
解决方案
你最好使用find_elements_by_css_selector
,因为有很大的机会xpath
改变。因此,很难维护代码。然后loop
是元素。
elements = driver.find_elements_by_css_selector("button.daterangepicker")
for element in elements:
element.click();
更新
stackoverflow - Nilesh已经很好地论证了为什么你应该选择SSS-selector
.
推荐阅读
- javascript - 当我尝试调用我的函数时,为什么会出现“未定义”?
- php - PHP标头附加到旧网址
- css - 如何更改 Angular Material Table 行高?
- c - 使用 8051,如何传输正确的信号并在 putty 中检查
- python - 尝试打开文件以在 Python 3 中读取时出现 FileNotFoundError
- javascript - 单击两次后触发 onClick 函数
- c# - 如何打印出 GroupBy() 之后的值?
- php - 如何获取 mysql 查询并将其存储在 var 中
- laravel - 如何从数据库调用中提取实际值以进行后续处理?
- php - 根据PHP中另一列的值获取数组列