当前位置:首页 > Web开发 > 正文

利用f表达式使用datetime.now()动态获取当天日期(格式:年-月-日) # 方法一 # 通过操作js语句doc

2024-03-31 Web开发

1.日期框:无法直接输入文本,必需要选择某一天的日期并点击才会填入文本框;

2.检索框:可以直接输入文本,但必需要点击按照输入的文本检索出来的下拉列表的某-项;

3.置灰的文本框:无法直接输入文本

凭据通例套路,我们凡是城市采纳各类元素定位要领凭据操纵法式一步步来实现 ,但是遇到上面三种奇葩,页面定位操纵就显得有些捉襟见肘了,因此我们可以通过 selenium 中的 javascript 操纵来措置惩罚惩罚它。

  我们以12306铁路官网的查票系统来演示,先看看出发地文本框,这个就是范例的检索框,按照下面两张图的比拟,当我们在出发地通过输入检索信息选择了"上海”之后,第一个input 标签的 value 由空值变换为“SHH" (代表上海), 第二个 input 标签的 "class" 由 input 变换为 "input inp-txt_select" (虽然最终不需要通过js去转变这个值也能到达效果), 此外第二个 input 标签的 value 转变了隐藏属性,由“简拼/全拼/汉字” 变换为了“上海”, 通过js可以获取到。

技术图片

====

技术图片

 

技术图片

我们先来通过 F12 的 Console 来获取并转变它的文本框的值,具体法式见下图 :

通过js操纵,我们知道它的初始值为空

技术图片

  当我们把第一个标签的value的值转变为“SHH” , 第二个标签的value的值转变为“上海”时,文本框自动变换为“上海”,达到地检索框的操纵要领一 致。 

技术图片

针对日期框,跟上面的检索框措置惩罚惩罚要领略有分歧,先看看日期框的页面元素属性

技术图片

  我们已经注意到它有两个关键属性value和readonly ,通过js发明, readonly的属性值为true , 暗示禁止输入,那么我们可以直接通过改削readonly的值为false来到达我们的目的

技术图片

  置灰输入框操纵要领跟上面大同小异,这里就不依依演示了,在 selenium 中,driver东西有一个要领可以专门操纵js ,,这个要领名为:execute. script() ,源代码如下:

技术图片

使用要领通过以下代码来示例:

‘‘‘ 使用js完成12306的查票操纵 ‘‘‘ from datetime import datetime from selenium import webdriver driver = webdriver.Chrome() driver.get("https://www.12306.cn/index/") # 打开12306官网 start_area_js = ‘‘‘ var a = document.getElementById("fromStation"); a.value = ‘NJH‘; ‘‘‘ driver.execute_script(start_area_js) start_input_js = ‘‘‘ var j = document.getElementById(‘fromStationText‘); j.className = ‘input inp-txt_select‘; j.value = ‘南京‘; ‘‘‘ driver.execute_script(start_input_js) # 改削达到地 end_area_js = ‘‘‘ var b = document.getElementById("toStation"); b.value = ‘SHH‘; ‘‘‘ driver.execute_script(end_area_js) end_input_js = ‘‘‘ var k = document.getElementById(‘toStationText‘); k.className = ‘input inp-txt_select‘; k.value = ‘上海‘; ‘‘‘ driver.execute_script(end_input_js) # 改削出发日期,操作f表达式使用datetime.now()动态获取当天日期(格局:年-月-日) # 要领一 # 通过操纵js语句document下的getElementById()要领传入id值 train_date_js = f‘‘‘ var c = document.getElementById(‘train_date‘); c.readOnly = false; c.value = ‘{datetime.strftime(datetime.now(), "%Y-%m-%d")}‘ ‘‘‘ driver.execute_script(train_date_js) # 要领二 # 通过创建WebElement东西传入arguments中,方括号里面的索引值+1跟execute_script()里的参数索引连结对应 ele = driver.find_element_by_xpath("//input[@id=‘train_date‘]") train_date_js = f‘‘‘ var c = arguments[0]; c.readOnly = false; c.value = ‘{datetime.strftime(datetime.now(), "%Y-%m-%d")}‘ ‘‘‘ driver.execute_script(train_date_js, ele) # 点击盘问 select_button_ele = driver.find_element_by_xpath( "//input[@id=‘train_date‘]/ancestor::div[@class=‘form-item‘]/following-sibling::div//a[contains(text(),‘查‘)]") select_button_js = ‘‘‘ var d = arguments[0]; d.click(); ‘‘‘ driver.execute_script(select_button_js, select_button_ele)

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/31047.html