课堂派 登录按钮,手动能点击,代码定位无法点击。用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
- 如果有的元素不可见 display:none
display:block 可见
,也要修改js
js = """ argument[0].style.display="block" """
driver.execute_script(ele)
执行js
情况2:
如果元素不能定位,我们直接写源生js就行了。
需要注意如果选择了带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()