在selenium定位元素操作中,如果有些元素定位不到,或者页面元素的属性有需要修改,可以通过js操作来对html页面元素获取、元素属性获取、元素的属性进行修改
selenium当中执行js代码有两种方式:
1、driver.execute_script(js代码(语句用;隔开),传入js代码当中的值)
#页面滚动到可滑动最大高度
driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")
2、使用selenium找到的元素对象,可以传递给js代码
js - argument 对象:js代码中使用arguments来接收参数,可以理解是个列表,通过下标取值,从0开始,根据参数的位置
#js代码中使用arguments来接收参数,可以理解是个列表,通过下标取值,从0开始,根据参数的位置
ele_input = driver.find_element(By.ID,"kw")
ele_button = driver.find_element(By.ID,"su")
js_code = 'arguments[0].value="";' \
'arguments[1].click()'
driver.execute_script(js_code,ele_input,ele_button)
driver.execute_script("document.documenElement.scrollTop=xx")
#滑动到页面顶部
driver.execute_script("window.scrollTo(0,0)")
driver.execute_script("window.scrollBy(0,0)")
driver.execute_script("document.body.scrollWidth")
driver.execute_script("document.body.scrollHeight")
driver.execute_script("document.documentElement.scrollTop")
driver.execute_script("document.documentElement.scrollLeft")
两种方式
ele.location_once_scrolled_into_view #元素与窗口顶端对齐
#与窗口顶端对齐,只要元素在页面就可以用,不管元素所属哪个滚动条
driver.execute_script("arguments[0].scrollIntoView(true)",elem)
#与窗口底部对齐,只要元素在页面就可以用,不管元素所属哪个滚动条
driver.execute_script("arguments[0].scrollIntoView(false)",elem)
参数说明
scrollIntoView是一个与页面(容器)滚动相关的API
element.scrollIntoView() 参数默认为true
参数为true:调用该函数,页面发送滚动,使element的顶部与视图(容器)顶部对齐
参数为false:使element的底部与视图(容器)底部对齐
driver.execute_script("arguments[0].click();",element)
driver.execute_script("arguments[0].value = arguments[1].value",ele1,value)
如果鼠标从页面上某元素移开,弹出的元素内容就整个消失了,无法查看其对应的HTML来定位元素,可使用f12-控制台中冻结弹窗
//表示在 5000毫秒后,执行debugger命令。执行该命令会浏览器会进入debug状态。
//debug状态有个特性,界面被冻住,不管我们怎么点击界面都不会触发事件。
setTimeout(function(){debugger},5000)
接收js执行之后的返回值,js代码中要写return
driver.execute_script("return document.getElementById('Input').value")