selenium—用js实现各种场景

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


原文地址:https://www.cnblogs.com/erchun/p/12875705.html