十一 js日期操作

课堂派 登录按钮,手动能点击,代码定位无法点击。用js去点击就可以了

# 定位登录按钮
login_= driver.find_element(By.XPATH,
                    '''//*[text()="登录"]''')
driver.execute_script("arguments[0].click()", login_)

12306 为例子,12306日期框是不能输入的,被设置了readOnely,所以要修改成false.

情况1:
1.如果元素能定位,那么就直接写定位发达式先定位出得到一个element对象。
2.写js 修改value
js = """ argument[0].value = "value" """
driver.execute_script(ele, value) 执行js

  1. 如果有的元素不可见 display:none display:block 可见,也要修改js
    js = """ argument[0].style.display="block" """
    driver.execute_script(ele) 执行js

情况2:
如果元素不能定位,我们直接写源生js就行了。

image.png

需要注意如果选择了带s得到是列表,需要跟上索引[index]取出对应的element.接下来的操作和情况1 一样。只需要将arguments[0]替换成源生js 表达式就行了。

代码如下

from selenium import webdriver
import time
import datetime



# 实例化 浏览器对象
driver = webdriver.Chrome()
# 打开 12306官网
driver.get("https://www.12306.cn/index/")
time.sleep(8)

# 获取当前一周之后的时间
date = datetime.datetime.now() + datetime.timedelta(weeks=1)  # 获取当前一周之后的时间,这里还没有字符串格式化
date = date.strftime("%Y-%m-%d")

# 编写JS代码操作页面定位的元素 并赋值
js_start_end = '''
            var start1 = document.getElementById("fromStation");
            start1.value ="CQW"
            var start = document.getElementById("fromStationText");
            start.value = "重庆";
            var end1 = document.getElementById("toStation");
            end1.value = "KMM";
            var end = document.getElementById("toStationText");
            end.value = "昆明";
            var date = document.getElementById("train_date");
            date.readOnly = false;
            date.value = arguments[0];
            document.querySelector('a[id="search_one"]').click()

'''
driver.execute_script(js_start_end, date)
time.sleep(5)
# 退出驱动 释放资源
driver.quit()

你可能感兴趣的:(十一 js日期操作)