[TOC]

**前言**

日历控件是web网站上经常会遇到的一个场景,有些输入框是可以直接输入日期的,有些不能,以我们经常抢票的12306网站为例,详细讲解如何解决日历控件为readonly属性的问题。

基本思路:先用js去掉readonly属性,然后直接输入日期文本内容

## 一、日历控件

1. 打开12306的车票查询界面,在出发日期输入框无法直接输入时间

2. 常规思路是点开日历控件弹出框,从日历控件上点日期,这样操作比较烦躁,并且我们测试的重点不在日历控件上,只是想输入个时间,做下一步的操作

3. Chrome用F12查看输入框的属性:readonly="readonly",如下:

```

```

![Snipaste_2020-08-17_16-55-09.png](https://i.loli.net/2020/08/17/jGs1AKiYNoVtwUy.png)

## 二、去掉readonly属性

1. 很明显这种元素的属性是readonly,输入框是无法直接输入的,这时候需要先去掉元素的readonly属性,然后就可以输入啦。

2. 点击F12的“编辑按钮”,找到对应元素,直接删除readonly="readonly",然后回车。

3. 在页面出发日位置输入:yoyoketang 试试,嘿嘿,发现可以输入成功。当然这里只是为了验证可以输入内容,测试时候还是输入测试的日期。

![Snipaste_2020-08-17_16-57-22.png](https://i.loli.net/2020/08/17/IAZHqyOmpRxvk7d.png)

## 三、用js去掉readonly属性

1. 用js去掉元素属性基本思路:先定位到元素,然后用removeAttribute("readonly")方法删除属性。

2. 出发日元素id为:train\_date,对应js代码为:'document.getElementById("train\_date").removeAttribute("readonly");'

```

# coding:utf-8

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("https://www.12306.cn/index/")

# 去掉元素的readonly属性

js = 'document.getElementById("train_date").removeAttribute("readonly")'

driver.execute_script(js)

```

## 四、输入日期

1. 输入日期前,一定要先清空文本,要不然无法输入成功的。

2. 这里输入日期后,会自动弹出日历控件,随便点下其它位置就好了,接下来会用js方法传入日期,就不会弹啦!

```

# coding:utf-8

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("https://www.12306.cn/index/")

# 去掉元素的readonly属性

js = 'document.getElementById("train_date").removeAttribute("readonly")'

driver.execute_script(js)

# 清空文本后输入值

driver.find_element_by_id("train_date").clear()

driver.find_element_by_id("train_date").send_keys("2020-10-01")

```

## 五、js方法输入日期

1. 这里也可以用js方法输入日期,其实很简单,直接改掉输入框元素的value值就可以啦

```

# coding:utf-8

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("https://www.12306.cn/index/")

# 去掉元素的readonly属性

js = 'document.getElementById("train_date").removeAttribute("readonly")'

driver.execute_script(js)

# 用js方法输入日期

js_value = 'document.getElementById("train_date").value="2020-10-01"'

driver.execute_script(js_value)

```

## 六、参考代码如下:

```

# coding:utf-8

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("https://www.12306.cn/index/")

# 去掉元素的readonly属性

js = 'document.getElementById("train_date").removeAttribute("readonly")'

driver.execute_script(js)

# 用js方法输入日期

js_value = 'document.getElementById("train_date").value="2020-10-01"'

driver.execute_script(js_value)

# 清空文本后输入值

driver.find_element_by_id("train_date").clear()

driver.find_element_by_id("train_date").send_keys("2020-10-01")

```

python时间控件readonly属性_13-js处理日历控件(修改readonly属性)相关推荐

  1. 【基于python实现UI自动化】3.4 JS 处理日历控件(删除 readonly 属性)

    python-UI自动化 1.0 selenium工具介绍 2.0 selenium环境搭建 3.0 selenium常见8大元素定位 3.1 selenium通过By定位元素 3.2 seleniu ...

  2. python时间控件readonly属性_Selenium2+python自动化----js处理日历控件(修改readonly属性)...

    前言 日历控件是web网站上经常会遇到的一个场景,有些输入框是可以直接输入日期的,有些不能,以我们经常抢票的12306网站为例,详细讲解如何解决日历控件为readonly属性的问题. 基本思路:先用j ...

  3. python时间控件readonly属性_人生苦短,我学python之python+selenium js处理日历控件(修改readonly属性)...

    转载于 上海-悠悠的博客 前言 日历控件是web网站上经常会遇到的一个场景,有些输入框是可以直接输入日期的,有些不能,以我们经常抢票的12306网站为例,详细讲解如何解决日历控件为readonly属性 ...

  4. Python+selenium自动化-js处理日历控件(修改readonly属性)

    前言 今天写自动化脚本的时候遇到一个需要更改日期的控件,不想费劲巴拉的去找日历的定位,但是又没办法直接输入我想输的日期时间,想了会儿之后决定用js解决日历控件 基本思路:先用js去掉readonly属 ...

  5. 艺赛旗(RPA)selenium 利用 js 处理日历控件

    艺赛旗 RPA8.0全新首发免费下载 点击下载 http://www.i-search.com.cn/index.html?from=line1 详细内容请参看艺赛旗官网支持栏目:RPA社区 点击链接 ...

  6. html 控件坐标定位,利用JS改变html控件位置

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 利用JS改变html控件位置 我想写一个贪吃蛇小游戏,所以需要完成蛇的自动移动效果,这就需要改变html控件位置.本来我 ...

  7. 初见物理引擎库Cannon.js:使用dat.gui修改物体属性

    0 前言 本文是"初见物理引擎库Cannon.js"系列的第二篇文章,在本文中主要讲解dat.gui的使用. 1 dat.gui简介 熟悉Three.js的读者肯定对dat.gui ...

  8. Selenium2+python自动化25-js处理日历控件(修改readonly属性)

    前言 日历控件是web网站上经常会遇到的一个场景,有些输入框是可以直接输入日期的,有些不能,以我们经常抢票的12306网站为例,详细讲解如何解决日历控件为readonly属性的问题. 基本思路:先用j ...

  9. pythongui日历控件_Selenium2+python自动化25-js处理日历控件(修改readonly属性)

    前言 日历控件是web网站上经常会遇到的一个场景,有些输入框是可以直接输入日期的,有些不能,以我们经常抢票的12306网站为例,详细讲解如何解决日历控件为readonly属性的问题. 基本思路:先用j ...

最新文章

  1. 深入理解计算机系统:网络编程 下 一个简单的web服务器
  2. Java8 ConcurrentHashMap详解
  3. 二叉树展开为链表Python解法
  4. php滴滴平台接口,图片服务API文档
  5. 第四章、epub文件处理 -- epub文件内部组成
  6. 怎么设计接口测试用例更好——百度大佬“教你写用例”
  7. 知乎万赞:熬夜整理出的软件测试面试题大全(2021最新)
  8. 高通modem启动过程_「msm8953」高通8953启动流程 - seo实验室
  9. CharField:Django文档——Model字段选项(Field Options)
  10. [资料分享] 干货~WLAN从入门到精通系列-WLAN技术连载帖汇
  11. QTableView如何设置表头宽度
  12. 我的七个建议 作者:Joel Spolsky
  13. 2022 版史上最全 Java 八股文,没有任何异议
  14. 字库芯片学习之汉字内码
  15. jQuery - 获取兄弟元素
  16. UMR与欧尼酱 区间相加问题
  17. Axure RP快捷键指令汇总
  18. hadoop只显示一个DataNode
  19. Linux下通过dpkg生成.dep安装包
  20. 人月神话(3)外科手术队伍

热门文章

  1. Linux API-进程:getpid、getppid、exit、wait、fork、vfork、execl、execv、system、popen
  2. 第十一章 C++ 封装/继承/多态
  3. Ubuntu20静态IP配置
  4. Kooboo 完全介绍一:概念介绍
  5. 【C++】黑马程序员 C++学习课程—C++核心编程
  6. 时间序列的7种预测模型
  7. PageHelper中的RowBounds
  8. 完美走位【华为OD机试 2023 Q1考试题 A卷】
  9. 如何快速把一个11g数据库插入到12c cdb中去?
  10. ubuntu 20.04 SystemTap安装