selenium之 时间日期控件的处理

来源:互联网 发布:android程序员很难转行 编辑:程序博客网 时间:2024/06/14 13:46

很多人问时间日期的空间怎么处理,但是时间日期控件各种各样,你可能遇到正常点的像这样: 
正常点的

当然也可能遇到难点的,像这样: 
困难的

当然,也不排除会遇到变态的,像这样: 
变态的

呵呵,真要一个个想着怎么去选择,简直是非人类干的事!

那么该怎么办?

其实很简单,我们不去搞时间日期空间,我们把它当成一个普通的input框处理就好了!

但是,很多此类型input框都是禁止手动输入的,怎么办?

很简单,用js把禁止输入的readonly属性干掉就好了。

来吧,看一下示例:

示例网址:http://www.sucaijiayuan.com/api/demo.php?url=/demo/20141108-1/

代码:

<code class="hljs ruleslanguage has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-array" style="box-sizing: border-box;"># </span>-*- coding: utf-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8</span> -*-from selenium import webdriverfrom time import sleepdriver = webdriver.Firefox()driver.get(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'http://www.sucaijiayuan.com/api/demo.php?url=/demo/20141108-1/'</span>)driver.switch_to.frame(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'iframe'</span>)<span class="hljs-array" style="box-sizing: border-box;"># js </span>= <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"document.getElementById('txtBeginDate').removeAttribute('readonly')"</span>  <span class="hljs-array" style="box-sizing: border-box;"># </span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1.</span>原生js,移除属性<span class="hljs-array" style="box-sizing: border-box;"># js </span>= <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"$('input[id=txtBeginDate]').removeAttr('readonly')"</span>  <span class="hljs-array" style="box-sizing: border-box;"># </span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2.</span>jQuery,移除属性<span class="hljs-array" style="box-sizing: border-box;"># js </span>= <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"$('input[id=txtBeginDate]').attr('readonly',false)"</span>  <span class="hljs-array" style="box-sizing: border-box;"># </span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3.</span>jQuery,设置为falsejs = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"$('input[id=txtBeginDate]').attr('readonly','')"</span>  <span class="hljs-array" style="box-sizing: border-box;"># </span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4.</span>jQuery,设置为空(同<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>)driver.execute_script(js)driver.find_element_by_id(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'txtBeginDate'</span>).send_keys(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'2016-08-24'</span>)sleep(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>)print driver.find_element_by_id(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'txtBeginDate'</span>).get_attribute(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'value'</span>)driver.quit()</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li></ul>

结果:

<code class="hljs  has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">2016-08-24</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

看,我一下子给了你四种写法。当然你去选也没有问题,就是一堆div、ul、li,但是我想说对于日期时间控件,认真你就输了,绕过去才是真理,就像验证码一样,这个东西去深究,一点意义也没有嘛,所以这里就不推荐也不写这种方法的示例了。

当然,这里还得说一下,有人说他遇到的日期时间框没有id、name,这里提醒一下,这就是普通的input框,定位方法太多了,class、tag name、xpath、css,总有一种适合你。同时友情提醒一下:注意时刻提防iframe!

0 0
原创粉丝点击