Selenium 日期控件处理和JS定位
点击日期控件
常规方法,先定位到日期控件,再选择日期
from selenium import webdriver from time import sleep # 启动浏览器 driver = webdriver.Chrome() driver.get("https://www.12306.cn/index/") driver.maximize_window() driver.implicitly_wait(10) # 定位日期控件 driver.find_element_by_css_selector("[data-click='train_date']").click() sleep(1) # 获取日期的集合 data = driver.find_elements_by_css_selector("div.cal>div.cal-cm>div.cell>div.so") # 点击指定的日期 data[28].click() sleep(5) # 退出 driver.quit()
修改日期输入框的readonly属性
from selenium import webdriver from time import sleep # 启动浏览器 driver = webdriver.Chrome() driver.get("https://www.12306.cn/index/") driver.maximize_window() driver.implicitly_wait(10) # 先通过日期输入框的id="train_date"来定位输入框,再通过removeAttribute方法移除"readonly"属性 js = "document.getElementById('train_date').removeAttribute('readonly');" # 1.原生js,移除属性 # js = "$('input[id=train_date]').removeAttr('readonly')" # 2.jQuery,移除属性 # js = "$('input[id=train_date]').attr('readonly',false)" # 3.jQuery,设置为false # js = "$('input[id=train_date]').attr('readonly','')" # 4.jQuery,设置为空(同3) # 调用js脚本 driver.execute_script(js) # 清空默认值 driver.find_element_by_css_selector("#train_date").clear() # 输入日期 driver.find_element_by_css_selector("#train_date").send_keys("2020-10-29") # 退出 sleep(5) driver.quit()
JS的5种定位方式总结
其实看到这里,上面的定位方式应该就基本够用了,但是有的时候就是会出现一些诡异的定位失效或者定位到了点击失效的问题,这个时候如果用js进行直接执行该事件,往往就可以解决那些诡异的事情~
- id定位:document.getElementById()
- name定位:document.getElementsByName()
- tag定位:document.getElementsByTagName()
- class定位:document.getElementsByClassName()
- css定位:document.querySelectorAll()
search_js = "document.getElementsByName('wd')[0].value='selenium';" search_js2 = "document.querySelectorAll('.s_ipt')[0].value='selenium';" button_js = "document.getElementById('su').click();" button_js2 = "document.getElementsByClassName('s_btn')[0].click()" driver.execute_script(search_js2) driver.execute_script(button_js2)