driver = webdriver.Chrome() driver.get('https://www.12306.cn/index/') # ----------------------------通过js代码修改元素的属性-------------------- from_ele = driver.find_element_by_id("fromStationText") to_ele = driver.find_element_by_id('toStationText') time.sleep(3) # js代码 js = """ var fro_ele = arguments[0]; var to_ele = arguments[1]; fro_ele.value = '上海'; to_ele.value = '太原'; return '操作完了'; """ # 执行js代码 res = driver.execute_script(js, from_ele, to_ele) print('js代码执行之后的返回值:', res) # -----------------------通过js来定位元素------------------------------------- js = """ var forEle = document.getElementById('fromStationText'); return forEle; """ res = driver.execute_script(js) time.sleep(3) res.send_keys('长沙') print(res) # -----------------------理解arguments--------------------------- # arguments:execute_script方法中传进入的参数,除了js代码,都会保存在arguments中 js = """ console.log(arguments) """ driver.execute_script(js, 9999, 111, 222, 333, 44, 555)
窗口滑动指定距离
"""
window.scrollTo:滑动到相对于坐标原点的位置
window.scrollBy:相对于当前位置进行滑动
document.body.scrollHeight:获取当前窗口的可滑动的最大高度
"""
driver = webdriver.Chrome() driver.get('https://www.xfz.cn') date_ele = driver.find_element_by_xpath('//div[@class="more-news"]') js = """ window.scrollBy(0,500); """ js1 = """ window.scrollBy(0,document.body.scrollHeight); """
附:窗口滑动到元素可见
date_ele = driver.find_element_by_xpath('//div[@class="more-news"]') # 滑动窗口到元素可见位置,返回当前元素在页面的坐标位置 res = date_ele.location_once_scrolled_into_view
通过js打开新窗口
# -----------selenium通过js打开一个新窗口----------------------- js = "window.open('https://www.baidu.com')" driver.execute_script(js)
控制网页内嵌div中滚动条的滚动
js = 'document.getElementsByClassName("el-table__body-wrapper is-scrolling-left")[1].scrollLeft=10000' self.driver.execute_script(js)
注意加上下标,第一个为【0】,以此类推
参考:https://blog.csdn.net/legend818/article/details/105248990
改变只读属性
document.getElementById('xxx').readOnly=false
driver = webdriver.Chrome() driver.get('https://www.12306.cn/index/') date_ele = driver.find_element_by_id("train_date") # js代码 js = """ var date_ele = arguments[0]; date_ele.readOnly=false; date_ele.value ='2020-06-09'; """ # 执行js代码 driver.execute_script(js, date_ele)
直接给日期赋值
driver.execute_script("document.getElementById('planDate').value='20181010';")

参考:https://cloud.tencent.com/developer/article/1335981