关于日期选项的选择

最近碰到一个学校的项目,需要把学生的信息录入到政府网站。政府为了规范录入的信息,大部分的信息都是从下拉框的选项里面去选择。比方要录入学生的出生年月日:2015 年 6 月 1 号,需要从下拉框选择年月日,然后在文本框生成年月日数据
关于日期选项的选择

经过测试,很快发现,年份和月份都可以输入数字,
关于日期选项的选择
关于日期选项的选择

这样通过设置文本组件就很容易解决获取年份和月份的输入问题。
接下来就是最难的日的选择了。
关于日期选项的选择
先看一下 html 标签:
关于日期选项的选择
这个日期选择器就是这个 div 标签里面的 table 表格,展开 tr 标签是这样的:
关于日期选项的选择
第一个 tr 标签里面有 7 个 td 标签,从星期天到星期六,
第二个 tr 标签里面也是 7 个 td 标签,从 6 月 31 号到 7 月 6 号,
后面几个 tr 标签也都是 7 个 td 标签,日期依次排列下去,
关于日期选项的选择
我们的鼠标点击的查找路径就是按照标签的值找到指定标签后再点击的,那我想要输入的 2015 年 6 月 1 日是第二个 tr 签下的第二个 td 标签,只要我把这个路径传到鼠标点击的查找路径里面,那就能输入我想要的日期。单独看日期的区域的话,其实 2015 年 6 月 1 日为第一排的第二列,相当于六月份的第一个礼拜的第二天(每周从星期天开始算起),那只要计算出输入的日期是当月的第几个星期几,这样得到所有想要输入日期的为第几个 tr 和第几个 td 标签。
刚好 datetime 里面的 strftime 可以获取到指定日期为星期几:
weekday = int(datetime.datetime(year, month, date).strftime(“%w”))
因为它的返回值是从 0 开始,而我们的标签是从 1 开始的,所以构建一个字典:
col_dict = {
0: 1, # ‘星期天’
1: 2, # ‘星期一’
2: 3, # ‘星期二’
3: 4, # ‘星期三’
4: 5, # ‘星期四’
5: 6, # ‘星期五’
6: 7, # ‘星期六’
}
# 通过这个字典获取星期天对应第一个 td 标签,星期一对应第二个标签,以此类推:
col = col_dict[weekday]
接下来就是计算 2015 年 6 月 1 日为 6 月第几个星期:
# 获取行数
row = int(datetime.datetime(year, month, date).strftime(“%U”)) - int(datetime.datetime(year, month, 1).strftime(“%U”)) + 1

行数和列数都有了,我们就很轻松的构建出该日期鼠标点击的查找路径:
date_selector = ‘DIV:nth-of-type(1) > DIV:nth-of-type(3) > TABLE:nth-of-type(1) > TBODY:nth-of-type(1) > TR:nth-of-type({}) > TD:nth-of-type({})’.format((str(row+1)),str(col))

然后把 date_selector 传入鼠标点击的查找路径里面,就可以实现点击想要点的年月日了。